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.
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.
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.
Whilst upgrading our TeamCity server from 6.5 to 7.x, I encountered an error:
Unexpected error occurred inside Alarm task: java.lang.OutOfMemoryError: GC overhead limit exceeded
After a bit of looking around and sifting through some very weird articles I was able to find some good information on this. Basically, the JVM starts by default with 512mb of memory and it was struggling to process our 300+ build configurations with this. In order to fix it I had to do the following:
- Go to TeamCity webserver
- Open CMD
- cd <TeamCity root dir>
- cd bin
- teamcity7w.exe //ES//TeamCity
This will open the following dialog:
- If you are on TeamCity 6.x then you need to run teamcity6w.exe rather than ..7w
Go to the Java tab and change the maximum memory pool entry to something other than 512mb
Restart the service and all should be well with the application start-up.
After my foray into the work of the TeamCity API, Gary Park and I have written a WP7 app. We are pleased to announce that this app is now available in the AppStore and is FREE to all. For version 1, the application will only give you the opportunity to see your projects, builds types, last 10 builds of each build type and then link to the build on your teamcity server. This is only an initial release and will be followed up with the ability to trigger builds.
The application looks as follows:
If you want to request a feature or leave us some feedback then please get in touch with us. An application website will soon appear. All feedback gratefully received. Huge thanks to all our beta testers. Without them this application would never have made it past beta.
A while back I had to use JQuery mobile for a project. The project needed to have 2 themes on an application and the configuration would need to tell the application what theme to load. With JQuery Mobile, the theme string could only be a single letter. I like keeping to decent and meaningful naming conventions, so I created a configuration setting as follows:
<add key="Theme" value="Plain" />
I could see easily that the theme for this build of the application is the Plain theme. How could I relate that back to a JQuery theme? Plain would not be acceptable with JQuery Mobile. Therefore I had to do something different. I was able to use an attribute on the Theme Enum:
I then overrode the WebViewPage to include logic to get the Theme as follows:
As you can see, I have an extension method in place to get the string value of the enum. This then taps back into my String attribute as follows:
This then allowed me to turn a simple readable string from a web.config, into something that JQuery Mobile could understand and parse as normal
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.
I had this idea to create a dashboard that would ping different version of a site in order to get the build number. The details are as follows:
runs on a local site at 192.x.x.x, a QA environment at 10.x.x.x, a staging environment at 66.x.x.x, and a live environment at 88.x.x.x (these IPs are made up). In order to hit each site, I would usually manually change the host file and then make the web request. This was not a great solution as I hate dealing with host file entries. On experimenting with HTTPWebRequest, I noticed that you can use reflection in order to change the Headers of the Request. The normal code to create a HTTPWebRequest would look as follows:
I was able to spoof the host by changing the host using reflection:
This allowed me to make multiple requests to different versions of the same site. Using a simple collection of my site objects to build a dashboard that had the following outline:
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?
In the past week, I have started using YouTrack 3.0 in the cloud as a think tank of blog posts that I want to write. Previously I had used Trello. there was no particular reason for moving away from Trello other than curiosity about what YouTrack could offer me. On setting up YouTrack I added a project to start the tracking of the blog posts. On adding the first post, I was given the following state workflow:
As you can see, you can pretty much change the state to be any other out of the box. I wanted to use this as the opportunity to create a custom workflow for YouTrack. I was able to download the YouTrack Workflow Editor and start the editor. Hadi Hariri has created a post on the basics of the workflow editor on his blog but this was only to create a stateless rule. I wanted to create a ‘statemachine’ rule. Basically the flow was to be as follows:
- Initially the issue created would be assigned to ‘To Write’
- Issues in ‘To Write’ could be changed to ‘In Draft’
- Issues in ‘In Draft’ could be changed to ‘In Review’ when complete or ‘To Write’ when paused
- Issues in ‘In Review- can be changed to ‘Published’ when closed or ‘In Draft’ when failed review
I immediately got to work and created a new rule as in Hadi’s post but this time I chose a statemachine rule. This gave me the following template:
I had to add the first transition. That when initially opened the state would be ‘To Write’:
I then had to implement the changes allowed to State from ‘To Write’. This says that when an issue in To Write, the only state it can move to is ‘In Draft’. As you can see, there is a stub of the state for In Draft created now by the Editor. I was then able to say that when the post is In Draft, it can move to In Review when finished writing or To Write when paused:
I was then able to implement that when the post is In Review, it could change to Published when verified or In Draft when it didn’t pass review. This gave us the stub for Published. As there were no state changes allowed when published, I just had to leave the Published state empty as shown:
After uploading the workflow to the server, as per Hadi’s instructions, I then had to attached the workflow to my project. I went to administration and chose the project type and then the workflow tab, I clicked the button ‘Attach workflow’. This game me the following:
I just had to choose the workflow I had created (stack72-blogging-stateflow) and I could then see the transition screens were working as appropriate:
This was very easy. I must pay credit to the Youtrack team for such a simple workflow editor. IT has intellisense and was able to offer me all sorts of options on clicking control + spacebar together. Thanks also to Hadi’s post for introducing me to the Workflow editor.