A supposed practice of both Scrum and XP is that every iteration should end with production deployable code, however in my experience this rarely happens – the scope of the project is supposedly too big, not enough has been done, or enough has been done but at the expense of quality.
I think what this primarily exposes is that people and organizations are too lazy in controlling and managing scope. Are you sure that there really is nothing that you could build in a couple of weeks that could go some way towards addressing your users pain points, even if it is not immediately perfect?
There is something to be said about being able to actually put something into production at the end of EVERY sprint, with no exceptions, ever. It forces people to ruthlessly manage scope, evaluate what the least possible functionality that can be deployed is, removing space for procrastination and excuses for not pulling the trigger. Even if, God forbid, the first few releases are extremely limited and even have some issues, you will learn invaluable lessons from having it live, see how the technology works under stress, see how users use it, get early feedback, expose early issues.
If you are not extremely ashamed of your first couple of releases, you are probably procrastinating and waiting too long to actually make your first release. Furthermore, releasing early gives your development organization a sense of urgency – there is no room to rest on your laurels or be complacent, because your first release is a bit limited and shit. Doing frequent incremental releases and having a constant sense of urgency breeds productivity and accountability, because what you are doing is visible not only to you, but to a wider audience, possibly the entire world.
However, having a sense of urgency and doing frequent production releases should not be confused with doing things hastily or to a poor quality – everything that is released should be rock solid, time and quality of what is produce should be non-negotiable, while scope is the factor that is ruthlessly managed. Scope should be the simplest thing possible that is useful/valuable to users and works, but no simpler.
June 22, 2009 at 8:27 pm
[...] No, this does not mean that developers should be allowed to “perfect” software for ever with little or no accountability. No it does not mean that you stretch out deployment until it is deemed to be “ready” after months and months of work. My take is the opposite: Every iteration should end with a production deployment. No exceptions. Ever. [...]