I've had this happen a couple of times now and the first time was a little worrying that I'd bricked my iPhone. Basically I was running an application on my phone via XCode and when rebuilding an updated version it failed with a "busy" error message. Stopping XCode and unconnecting my phone had no effect, the phone was stuck displaying the loading screen of the application and wouldn't respond to any key commands. To fix you have to hard reboot, holding the power and home button until the phone reboots - doesn't lose any of the data you have on your phone (a concern the first time I did it).
Tuesday, 7 January 2014
Wednesday, 1 January 2014
I'm just looking at my post from last year "looking forward to 2013"! I'm still in a hands-on development role, but now in a different company. Many of my goals for last year are still relevant for this year. Time management has to be right at the top of them; getting the right work/life balance whilst doing a job you love is always difficult; even more so when there is just so much new cool stuff you want to learn!
The delivery process is another key item for this year. Being in a pure software house, delivering working software promptly to clients is not just something to aim for but key to the success of the business. Whilst the 2 week sprints of scrum might not work, the short delivery cycles and early visibility have to be a good thing. Reducing the time and effort required to develop a working prototype of the screens / system is also something else to look to improve on.
On the technology front, I hope we are quickly proficient in developing and publishing iOS and Android applications; not just on phones but tablets as well. The cloud is also going to be quite important in 2014! So 2014 is shaping up to be a great year for learning new skills and languages. Personally I'd like to look at learning F# and at least one new database language (either a graph database or noSQL).
2013 certainly didn't turn out as planned, the less said about the first half of the year the better; so moving on (which I did!) In the second half of the year I joined a company which has managed to get me excited about and enjoying programming again! It has been an insanely busy 7 months into which (as well as the normal .NET stuff) we've managed to cram learning to program iOS and Android (the later being more of a challenge for 2014. There was also a lot of ground work investing in new processes and systems and preparing us and the business for the coming challenges in the next couple of years. There's also been the odd bit of specification work! I managed to get along to a few Brighton ALT.NET sessions (something I'd not managed or felt like for a while) and enjoyed going to Worthing Digital evenings through out the year.
I'm looking forward to 2014, I finished 2012 trying to be optimistic about 2013 - I'm finishing 2013 feeling and believing that there is load to be optimistic about in 2014!
Monday, 8 April 2013
Today I realised that I'd forgotten how spoilt I am using Resharper and dotCover to run my unit tests. Put another way I'd forgotten how badly Visual Studio plays with any other unit test frameworks other than MS Test! I'm used to and really like the fluent API style of NUnit's Assert.That(...) syntax so having to fall back to MS Test always feels like a step back. If you ever find yourself in a situation where you can only run MS Tests, but want to use NUnit functionality you can easily do this just by using aliases on the NUnit "using" statements.
The following "using" code block facilitates this - you will be able to decorate your unit test classes with MS Test attributes so they can be picked up and run by Visual Studio whilst using NUnit functionality.
Wednesday, 2 January 2013
The title pretty much says it all, there is no way to open an MVC2 project within Visual Studio 2012, there is no "auto upgrade" path either! If you attempt to convert a solution containing an MVC2 project you will probably see the following error message:
If you do, then the only real solution appears to be graft the existing MVC2 project into an empty MVC3 or MVC4 project and update references accordingly - bit of a chore no matter what approach you choose / prefer.
Monday, 31 December 2012
First and foremost, the biggest change in 2013 is that I will be responsible for and managing the development team. To help the team with the challenges we will face in 2013 I will need to stay hand on too, so that should make time management critical just to make sure I can personally fit it all in. This will probably be the biggest challenge I have faced in the last few years and something that I'm looking forward to getting started with.
Another change for 2013 will be refining our agile process. For the 2nd half of 2012 we followed a scrum methodology, successfully developing and deploying an MVC replacement for an old ASP legacy application. Feedback from the technical teams resulted in us modifying the process, removing task hour estimation from the sprint planning session with no measurable negative effect. Additional feedback from the business indicated that sprints were causing some friction when defining stories and planning releases. The 6-9 month development cycles of waterfall just don't work for most software applications, but at the same time, the artificial barriers that an 'x' week sprint causes can confuse the business. As we'd come to similar conclusions in my previous role, we are going to try to develop a "Kanban" methodology that will work for us.
- We want to keep the short and frequent feedback loops and engagement with the business.
- We also want to keep most stories as small as they can possibly be (days rather than weeks), but for some functionality we just don't want to be forced to break up a story just to make it fit within a sprint (but I must stress that we hope these to be the exception, otherwise it is just waterfall by the back door).
- We also want to look into releasing at the end of every story so the business can get the value of development work as quickly as possible.
To help the business adjust to the harsh economic climate that we still face, the biggest challenge is going to be making sure that every single bit of effort really counts! This really does include everything, we need to improve the deployment process of all our application suite, making sure we really can live continuous integration / deployment. All development work needs to address both existing bugs / performance issues whilst providing much needed new functionality. As a part of this we should get the chance to learn Puppet, refine our TeamCity skills, potentially look at a DVCS and most importantly have fun developing!
2012 has been a full-on year with lots of change. I started the year in my previous role, preparing for a transition into a newly created role of "Solution Architect"; moving away from both day to day coding and purely concentrating on .NET applications / systems. It sounded a really interesting challenge but another opportunity presented itself working for my current company in another newly created role of "Technical Team Lead". It was a hands-on development role, leading a team of 3 developers bringing a large business critical application in-house and helping to roll out scrum and other processes (such as TDD/BDD, Continuous Integration, etc.) to the business and team.
The very first challenge was the knowledge transfer sessions for the "out-sourced" application, which had been designed and developed by one company and then the maintenance passed onto a second company. It's probably fair to say that the code has grown organically rather than being designed and has undergone several architectural changes without completing or replacing the previous model(s). As a result it contains both direct SQL access via ADO.NET and at least 2 different ORM implementations. Many other areas of the code based might contain a mixture of design patterns alongside some large "procedural based" class methods. There were no automated tests of any form, and most documentation had either been lost or was now hopelessly out of date! Having just had the opportunity of working in a completely green field system in my last role, getting the chance to apply that knowledge in a large, deployed, business critical brownfield system seemed like a nice challenge (I have spent much time wondering if I was mad!)
With such an interestingly complex system we had our most success videoing the hand over sessions, recording what didn't work as much as what did work as this both gave us the instant knowledge and the ability to go back after the event to refresh our memories. This also meant that those sessions are available as a record for new members joining the team. The very first win was the ability to deploy and develop all aspects of the system locally, with instruction guides that could be followed by the entire team and worked every time on every machine (no small achievement!). We are now preparing for the production deployment of our first "in-house" developed release of this application including a few small pieces of new functionality but mostly containing massively increased logging to help track down issues reported by the business in the production environment.
As well as taking over responsibility for the main application code base, we have replaced an existing ASP system with an MVC application developed in sprints using Scrum, TDD and TeamCity Continuous Integration - a massive learning curve for the team which they handled extremely well. This system has had two functionality deployments so far, with a third currently in test. This is a big improvement over the current norm of deployments every 3 or 6 months but there is still a little way to go before we can look to release at least every sprint.
I think that on the whole the team can be really happy as we have accomplished everything that was promised in 2012, just not necessarily everything that was hoped for - but we have to leave something to improve upon in 2013!