Ship Anytime – Is It Worth It?
By Adrian Sutton
XP has the concept of keeping the code base in a state that you can ship at any time. That seems like a good idea as it allows you to quickly ship a new version to preempt a competitor’s release or when marketing suddenly wants to attend a trade show and have something new to talk about. In other words, allow the business requirements to drive the release schedule instead of it being purely driven by the engineering team’s schedule.
The problem though, is that some features require a lot of work to make them shippable while they are still in development – and they take a long time to develop so you want to gradually integrate them into the project. A typical solution is to create a branch in version control and develop the feature there, but that goes against the concept of continuous integration and causes significant pain when you try and merge the branches back together.
So you’re left with a choice – either get the feature finished as quickly as possible, but not be able to ship while it’s being developed, or potentially waste time keeping your code in a shippable state when your current plans don’t require it to ship until after the feature will be complete. If we don’t over-engineer our code by accommodating things we think we might require in the future, why should we over-engineer to accommodate maybe having to ship earlier than expected?
There is something of a middle road though. If you can identify what would be required to make the product shippable sooner, you can keep it as a backup plan. If for some reason you need to ship sooner than expected, you know you’re 2 weeks work away from making this feature shippable – but at least you don’t have to complete the entire feature which may take much longer. As long as you communicate that to the business, you can leave it up to the business to judge how important it is to be able to ship at the drop of a hat. Perhaps they will want you to complete part of the work to make it shippable now and leave part of it until it is actually required.
In the end it comes down to keeping your options open so that you can choose the path of most value when the time comes.