The date is 1st August 2012. Developers have been wondering for weeks when the release of VS2012 and ASP.NET 4.5 will happen. Somasegar, cvp of dev div in Microsoft, has just announced that the final build version of VS2012 is complete.This means the product is ready for release. Dot net developers all over the world are eagerly waiting for the immortal words, “it’s available to download on MSDN”. Unfortunately they haven’t come. Instead, the download will not show up for another 14 days. This seems wasteful to me.
Tell me if I am incorrect, but I believe the delay is that the product has gone to tool vendors to make sure that their tools / plugins will work with the application. This to me seems a very strange thing to do. This product has technically been in the making for 18 months (since the release of VS2010) so giving it to vendors in the final 2 weeks is crazy. What will happen if the vendors report it doesn’t work with their tools? Would Microsoft stop a release for this considering it is so baked into the windows 8 release? I don’t think there is any possibility of that happening at all. Therefore why the delay? I understand that 3rd party vendors are customers that Microsoft have to satisfy, but technically so are we – the users of the product.
My ethos on software delivery is ship early, ship often. I hate when a feature is complete that it has to wait around for 2 weeks before release. Get the product out there, start gathering feedback and get planning to deliver more value to that customer. I understand that VS2012 is not easy to release often. Its a rather large download and there are pricing models around it. But changing the shape of the product to delivery in small chunks that are updatable more often would allow the product to get shaped by its user base. Faster feedback means delivering more customer value. It seems that other departments within Microsoft are now following this model (MVC team, EF team and Nuget team). Delivering like this is becoming more popular (and hopefully will become the standard). Its time to embrace this ethos Microsoft. Its certainly how I would be looking at things in the future if I were the product lead developer.
$0.02
In traditional, waterfall organisations, a development team follows the organisation hierarchy. The development team can be split into smaller sub teams and each of those teams can have their own leader, but ultimately the hierarchy still exists. Developers usually stay in that sub team for most of their time in the organisation and they know exactly who their line manger is and who is responsible for their reviews and can act accordingly. The organisational structure is rigid and embedded into the process of the team and organisation.
In more agile teams, the organisational structure is less rigid meaning that developers do not need to stay in a single sub team for their time at the company. They can be organised (or organise themselves in more advanced agile cultures) into teams based on skills. New developers are hired with a view to how they can benefit the wider team and not towards the skills needed for a sub team in a waterfall environment. Even though there are less restrictions on people moving between teams, it is not always guaranteed. It can happen when required, e.g. when a new member of staff is hired and the skillsets need to be spread evenly. This can evolve further.
Can agile teams be formed around projects?
Simply, yes. This is actually how projects work at Facebook. When a developer joins the company, they can request what team they want to join when their ‘boot camp’ is over. Each developer has a desk and that desk is on wheels. Their office is completely open plan. When a team’s project is finished, the developers simply break up as a unit and wheel their desks to form the next team for the next project.
I’ve talked to a few people about this fluid team structure. All responses seem to follow the questions:
- If a developer continually moves around, who is the manager responsible for the developers review?
At school, I was part of a form group and I had a form tutor. This was the class I was part of each morning between 0900 and 0910 and where registration would be taken. I didn’t study all my subjects with that class or that tutor. Each teacher had their own area of expertise. I moved around when I needed to go to a class. The same can happen in the workplace. In an agile team there should not be any need to micromanage members of the team. Just because you don’t sit beside your line manager doesn’t mean they cannot manage you. They need to form a trusting and communicative relationship with each other – characteristics of an agile team. This will allow the manager to know exactly how the developer is progressing and any obstacles in their way.
- What happens if a project ends up with all the weakest developers in a development department?
If you are happy to hire weak developers then I suggest a look at your hiring process may be a useful thing to do. If a developer is not hired because they have the correct attitude, skillset and cultural fit for your team or you are happy to hire the ‘best of a bad bunch’ then you may have bigger issues than worrying about the formation of sub teams.
To summarise, you don’t need to keep developers locked to a team or a line manager. A trusting and communicative environment should always allow the team to focus on what they were hired for, the delivery of software. After all, if you are not here to care about the quality and standard of your work, then you should really think about changing career and stop wasting your employers money.
$0.02
I always had the idea that the term ‘burnout’ had a pretty standard meaning in software development. I’m sure each developer have their own way of phrasing it but in essence, I was always of the idea that it meant ‘over working leading to exhaustion and lack of motivation’.
I wanted to see what the exact thoughts of my peers was so asked on twitter “what does burnout meant to you?”. I got a list of varied responses:
@tomasmcguinness: Burnout in terms of software development? For me, it means losing the ability to concentrate and focus,combined with mental fatigue
@mbrit: For me, it's about ending up at a dead end in terms of stimulation/career progress.
@kristofclaes: "I should have kept this as a hobby..." or something like that. Not sure how to put it into words.
@jcmm33: whatever the cause, its a lack of focus/motivation/drive/engagement within an employee when there used to be
@NathanGloyn: burnout = not able to work any more, nervous breakdown, catastrophic event
These are only a few of the responses, but as you can see the vary a lot. The reason I asked this question is that whilst on a trip to San Francisco recently, I was able to catch a company organised talk from Jay Parikh, the VP of Infrastructure at Facebook. I don’t need to tell you who Facebook are therefore you can imagine I was very interested to hear his thoughts on the subject. Whilst talking to us, Jay spoke about Facebook hack-a-thons. Basically their entire team (product owners, devs, IT guys etc.) get together on a night of the week in the Facebook campus and work on something they don't normally work on.
One of our developers asked the question, “how do your devs avoid burnout when approaching hack-a-thons in the middle of a work week?”. Jay discussed that development at Facebook wasn’t a strict 9 – 5 culture and that developers would work the hours that they felt quite at home with. He said the developers at Facebook don’t suffer burnout as “burnout is loosing interest in a project or piece of work” and their developers work for a maximum of 12 months in a team before moving to another.
I can see Jay’s point but I don’t feel that working too much and losing interest on a project are mutually exclusive. I think if you work too much then you can become bogged down in feeling a bit frustrated in your work. This can create boredom and make you lose interest and (or) focus. This is where I think burnout creeps in. This is what we need to make sure we avoid when we plan work. I usually associate burnout with long waterfall projects.
I am fed up with reading more and more posts, mostly on twitter, telling me I’m wrong if I’m doing it this way or wrong if I’m not using this tool. Who gives you the right to tell me I am not correct? You do not know my problem space, domain or the criteria I need to work towards.
I have to say that this post is not in retaliation to anyone telling me I am doing something wrong. It is based towards all the posts titled ‘You’re doing it wrong….’
In my opinion, we are continually learning in this industry. Something you may be good at now, may not be the hot topic in 6 months time. I am not sure there is a single person who knows *everything*. You may have your niche of expertise and you may be able to help but be constructive. If you really think I am doing it wrong, then give me reasons why so and point out the flaws in my way. It isn’t black and white. This is not a math problem – there may be more than 1 way to do something.
I do a lot of speaking to groups about continuous integration & delivery. There is no way I would tell someone they are wrong. Instead, all I can do is to put the reasons out there for my way of doing something. If the person takes this on-board then that's fantastic. If they don't, I won't get offended. Maybe we should focus on helping the devs who are supposedly doing it wrong rather than pointing that almighty finger at them. Who knows, you may even learn something yourself.
</rant>
I had to refactor some very old code a while back. The code looked similar to this:
I had to refactor it so that I could add more parts to it. There was no way I could add in more case statements so it all had to go. I took a cautious approach to the refactoring as it was pretty brittle and quite important code. The first step in refactoring made the code look as follows:
This mean that I could make sure that the function of the code didn’t change but that it was easier to read. This still couldn’t be unit tested though as there was no way to mock the behaviour of the case statements – it was all still in the same class. The next refactoring step was to allow some unit tests to be written. I was able to separate the behaviours into their own class and made the code look as follows:
This wasn’t enough for me. I still had this huge switch statement that was breaking the Open / Closed principle. This meant that in order to add more functionality to the switch, I had to change the switch and risk breaking it. This couldn’t happen. This made my final part of the code look as similar:
With this code I could make sure that I could write some unit tests around the behaviour of the class. This post only talks about going this far. I have since refactored the TaskRunner class much more as it was doing a lot more than 1 thing and thus breaking SRP. How would you have handled the same refactoring?
Yesterday (April 2nd 2012), I posed a question on twitter:
Does anyone think that people working from home in an agile team is a bad idea?
This seemed to be quite a controversial question to pose. My favourite response was “isn’t agile – as long as you get the work done, doesn’t matter home, office, card, no-cards, no??” Now, I can see what the author (@edonsojeva) is trying to say. I agree that one of the main principles of agile is getting work done. But, on the other hand, for me the best principle of agile is the ability to communicate with members of the team *and* the business. IM clients (Skype, Lync, MSN etc.) are a great way to keep in touch. But I have never found them to be fantastically efficient at being able to display the entire picture. When speaking to people I want to see them face to face (where possible). this allows us both to focus on the issue at hand.
when working remotely, people can get distracted. That’s just our nature. It doesn’t matter whether we get distracted by emails, twitter, other IM conversations happening at the same time or TV (yes I have seen this happen to some people), it happens. I find that that level of distraction is less in the office. Why email someone when you can get up from your desk, walk 10feet and speak to them and strike up a conversation instead?
I understand that it can sometimes be very important to isolate yourself just to get a few hours of no distraction. Being at home, with no one round can give you this isolation. My thoughts here are that if you do have so much to do that requires you to be isolated from the rest of the team, that you a) haven’t planned very well or b) are not agile. Team is the key word here. For me working from home takes away that sense of being part of the team. It can just make you feel a little isolated. Architecture and code can be a bit of a beast sometimes. It can therefore take other people to wind in crazy ideas. Unless you are this incredibly focused person, you can sometimes go off in a tangent or with an idea that another has already tried. It can also save time. If you run into an issue, a team member who has been in this situation before can point out a fix.
This leads me to the general idea that working from home is the exception rather than the rule. I wouldn’t be fantastically happy with members of the team who constantly worked from home. They would feel more like remote contractors than anything else. I understand there are incredibly focused individuals out there that can block out all these impediments and work from home efficiently. I am in no way saying that it isn’t possible. This post is merely a scratch pad to get feedback on what others have experienced.
I have recently been thinking about making TeamCitySharp supported on mono. This would require me to either run a VM (that you can download form the mono project site) or install mono on Windows. As I would continue to develop TeamCitySharp in VS2010, I thought it would be better to install mono on windows.
When trying to install mono, I went to the mono project download page and was presented with 3 options for windows:

I had no idea what to install & tweeted to that effect. Almost immediately, Rob Reynolds tweeted this back:
cinst mono
This is a reference to chocolatey which I have used before. Chocolatey is described as “apt-get for windows”. In order to install mono I had a number of steps to follow:
1. Set the execution policy of PowerShell to unrestricted

2. Install chocolatey

3. cinst mono

which, when downloaded triggers the install

Mono is now installed and ready to be used. This was extremely easy using chocolatey. I have used it before to install nodejs but I have to admit I didn't really pay attention to what packages it contained. I will be doing so from now on. If you have not checked out chocolatey then please do so – it rocks!
Late in December 2011, I stuck my oar into a conversation on twitter (as I usually do) between Scott Koon, David Ebbo, Sumit Maitra and Eric Ridgeway. This conversation was about why Nuget.org was not the best place for a Northwind DB Sample package. My comment was as follows:
@lazycoder @davidebbo @sumitkm @Ang3lFir3 maybe have the ability for codeplex to have a nuget style feed of its own for sample libraries?
I thought I should clarify my thoughts further. Nuget (and OpenWrap) have set the .net world into a new era for dependency management but there are not many enforced rules or moderation of the packages you can upload. For example, I maintain the NUnit package. This means I submit updates to the package when a new version is released by NUnit. I once received a comment on how I should split the package up into just a dll package and then have a full package.I really had to think hard about why I should do this. Who am I to change the way the guys who create NUnit distribute the package. All I do is to get the contents of their .zip and redistribute that – and I do struggle to think how I have the authority to do that sometimes. This led me to a very prudent question:
Is Nuget.org a site that should have strict regulations about the packages that get uploaded there?
I have heard about a few broken packages and actually sample applications. Is this the correct place for these packages to go to?Has it become a dumping ground for software. Sites like codeplex, github and bitbucket are used more frequently for source control. Are these sites the correct areas for the sample applications? I would argue yes. I feel that Nuget should contain only packages that I can download and use immediately. I don’t want to have to download a 12mb sample application when I could view the source in github or codeplex. Maybe a way to take this further would be to set up the ability for nuget to hook into these types of systems:
nuget install-sample <path to codeplex>
This would keep the nuget library free of the packages not deemed useful. Who can classify a package as useful in this theory I hear you say? Well the users of the site, via a stackoverflow style voting system. A broken package gets a downvote, then any packages below –4 (for example) would get archived by the system and the package owner to get notified. There would have to be some sort of moderation of this though or people with rival packages could eliminate the competition 
I do believe that uploads to the nuget library should be regulated. There are more than enough people in the .net community that would spend a few minutes a day clearing out / verifying packages. If we regulate the packages then developers will continue to use for nuget. If it continues with the following types of packages then this may not be the case:

The naming conventions of these packages contain the letters ‘–ci’. How on earth can I work out what the different between MvcContrib.MVC3-ci is? Is it a special kind of package for CI use only or was it built with a CI system? This is exactly the issue. Some kind of visual check around this would have stopped – for the record I actually installed MvcContrib before I realised it was not compatible with MVC3 – this should have been noted in the description, in my opinion.
I enjoy using nuget and I really want to continue enjoying it. All we (as a community) need to do is to be respectful of other developers when we create a package. When delivering software to paying customers, do we release potentially untested applications or do we make sure that they work?
$0.02
This past weekend (January 10th – 14th 2012) CodeMash was held in the Kalahari resort in Sandusky, OH. Yes I know – Ohio in January!! I had been warned that firstly its cold there and secondly there is usually a lot of snow. This time we were quite lucky and only got a little snow. I arrived on Wednesday night after a very long journey and walked into what was just a hive of activity. I have been to a lot of conferences, this one was not only huge but very interactive and social. A lot of the attendees brought their families for the week!

I was very lucky to have a session accepted for this conference (Introducing Continuous Delivery) and was extremely pleased to know that my session had made it from over 700 applications. I was also lucky enough to have my session early on Thursday. If you look at the schedule, marvel at the level of speakers here and you will see why I was so pleased!
The big thing for me on this conference is that there were a lot of companies there in force. Edgecase and Leandog are the 2 that stick out for me. Edgecase as they were usually in the hot tub drinking and leandog because of those hats
. There was also the small matter of a party on Thursday evening after the sessions that actually moved to take over the waterpark between 10pm and 1am. A-Maze-ing! I, in fact, did ‘a Corey Haines’ and smashed my head off the bottom of the pool. At one point on the Friday, Cleveland were trying to get me to stand on the runway as a beacon for the planes to find the runway as it was so red!
a Corey Haines :
- To injure oneself at CodeMash in the waterpark
- OMG Dude you just did a Corey Haines – are you ok?
Oh and the bacon bar – bacon with all sorts of toppings available – from butterscotch to white chocolate.

Without the sponsors this event would never have been able to happen. Please do say a thank you – tweet them even! I seen tweets as to the magnitude of the event:
Just picked up cashier's check to Kalahari for partial conference payment: $330,000. Nice double-take from the cashier when I said amount
Most importantly, I would sincerely like to thank all the organisers. These guys work on this conference while holding down jobs. Its an incredible accomplishment. It was what I would certainly class as the best conference ever. Thinking of 1300 geeks in a waterpark in Ohio in January doesn’t do this event justice at all. It is quite literally a software conference for the entire family.
I met so many cool people – I couldn't begin to name them all or acknowledge them all! I will certainly be back next year! For now I will have to get over the bacon sweats, keep icing my head from my stupidity and start working on my submission next year!
2011 was an excellent year for me. Unfortunately I didn’t see the point in setting myself clear personal goals for it. But here is my retrospective of my personal work. This post does not include anything that happened at work or in my personal life. 2011 was the year:
1. I started speaking at user groups / events
In total I spoke at 26 events. This included some bigger events (DDD) in Reading. Scotland, Bristol and Sunderland as well as a lot of user group events all around the country. Unfortunately, 2 had to be cancelled due to unforeseen circumstances but I will make it up to those groups in 2012.
2. I was made a Jetbrains Academy Member
I still cannot believe this happened and I am honoured at being involved with it. I hope to be part of some big things with this academy and I look forward to continuing to be part of it in 2012. You can read more about this program on the Jetbrains site.
3. I helped organise GiveCamp UK
Even now, almost 3 months after the event, I am still on a high about this. It was certainly something I can look back on in my career and be really proud to have been part of such a fantastic weekend. More information on GiveCamp and a chance to sign up for the 2012 event can be done on the GiveCamp UK site.
4. I was Technical Reviewing books
I was part of the reviewing effort of MVC3 In Action and HTML5 for the .Net Developer both by Manning Books. For those who know me, I can be quite opinionated and this was a great opportunity for me to take those opinions in order to help shape a book.
5. I was accepted as a Friend of Redgate
Redgate run a program that helps bring together some well known community members and MVPs in order to help give feedback on their products. This was another great opportunity for me to use my opinions and experience in order to help evaluate the products developers use on a daily basis. You can read more about this program on the Redgate site.
6. I started my first real OSS project – TeamCitySharp
As an avid TeamCity user, this was a project that I really enjoyed writing. IT is now approaching 100 downloads from Nuget.org, 27 watchers, 7 forks and 11 pull requests on github. I am very happy with it. You can find the project on my github repository.
What does 2012 hold for me?
I’m honestly not too sure what 2012 has in store for me. 2011 was such a fantastic year that I am not sure I can top it. Bit it does give me the opportunity to speak at 2 international events. Codemash and Software Passion Summit. Hopefully there will be more well known events that I can submit sessions and speak at but there are so many fantastic speakers that I have to be on top of my game.
I hope 2012 is half as good a year for me as 2011! I look forward to it……