Installer First!

Installers. Nobody likes creating them nobody ever will. Me Included.
(Well I guess there some who actually likes creating them but I don’t want to think about it it’s too painful)

Seems like the reasonable thing to do is doing installer related tasks in the end 
well at least as reasonable as writing the code before writing the tests …

Let me tell a story from the trenches:
One of our recent iteration demos didn’t went well.
What happened was that in the iteration we had programming tasks and installer tasks. 
It seems reasonable to leave the installer to the end and put our main focus on coding features.
The result was that the installer features were not fully tested and the installation was not successful during the demo. And guess what? the customer was interested mainly in the installer user stories rather than the code features.

When we discussed it later in our team we decided that we should start when it’s possible with the tasks that are related to the installer. There are few reasons to do that:
1. Installer tasks are harder to estimate. I doesn’t really maters what are the tools it’s always takes more time than you think. especially if you didn’t do it before.
2. Once you get the installer ready you got something to show at the demo.
When you sit withe customer you just double click the msi file and than you can show the other features as opposed to "Wait a minute we’ll just copy xyz.dll to here and change the other registry key over there" 
3. User experience – It doesn’t matter how well we wrote and designed our application. If the installer doesn’t work the user won’t see all the magic and wonders you worked so hard to implement.  

You can implement the installer even before the actual files that it needs exists.
For example if you know that you are going to add the assembly OurNewGerateFeature.dll to the installer you can add it to the installer and than go and write the code. 

Our Racer team went as far as creating installer from iteration zero.
It was an empty installer that installed nothing. Each iteration they added content to the installer so they always had something to show in the demos.

I think we’re going to take this approach and see how it works for us.