I’m currently sitting on the sidelines of a project watching a bit of a train-wreck in action. The problem isn’t because the code is bad, or because the people delivering the project are poor developers, but rather because an important step was missed at the beginning of the project – deployment.
I am a firm believer that every project should, as its first step clear the throat of its deployment pipeline. You might think that it is important to deliver large wads of functionality early in the project, but it isn’t.
Experience tells me that you can have the best possible code base, but unless you exercise the deployment muscle regularly you are going to end up with a long and protracted deployment headache at the end of the project where you encounter every possible deployment issue.
Unfortunately it was too late to side step that for this project because predictably, the thing blowing out the schedule is deployment headaches.
By deploying early you force all the environments that your code is promoted through to snap to shape. My recommendation for teams starting out is that their first release should be light on features but heavy on work to make sure you can release within a few hours.
Of course having the right tools for the job can make this a bit easier and its one of the reasons that we developed TFS Deployer.