Two great tastes: Agile development and distributed, declarative setup
I’ve had the good fortune to work on several agile software-development teams over the years. If you’ve ever hated having software you’ve developed sit on the shelf for months or years until the next release, shipping several times a year feels good. Shipping almost every month is even better. Shipping almost every week is phenomenal.
Most of the principles of the agile manifesto reinforce the idea that shipping software often is how to best deliver customer value. To ship often, you need predictability:
- Finish all the work associated with a feature.
- Make sure it’s of ship quality.
Done versus done-done
The waterfall model of designing, then coding, then throwing over the wall to test, then fixing bugs, then throwing over the other wall to setup – yes, of course I’m going to talk about setup – is just procrastinating. Sure, it’s more fun to start working on the next new thing, but it’s just postponing the work required to get a feature really done and ready to ship.
Setup development, like testing, is often considered one of the “taxes” of software development that is best put off as long as possible. But if you want to deliver shippable software on a rapid schedule, paying taxes late doesn’t work; you might get to April 15th and discover that you have more bugs than you can fix by midnight. Instead, you pay your taxes as you go along so there are no surprises when you get to the last day and you want to ship.
Rather than developers considering themselves “done” when they’ve written some code and debugged it, developers need to get “done done” by providing code, unit tests, acceptance tests, and setup.
WiX supports “done done” by easily integrating into the development build cycle. Every member of an agile team can author setup. That prevents the lone setup developer, who probably supports multiple product teams, from being a bottleneck.
Plus, if developers are responsible for their own setup authoring, they’re less likely to push bad design decisions onto the setup developer’s shoulders.
Keep quality high and take the weekends off
Agile methodologies bring a whole set of tools and processes to help keep quality high and ready to “ship on a dime,” like:
- Test-driven development to produce high-quality designs and code
- Automated acceptance testing to reduce the need for armies of testers to validate the whole system at the end
Add some setup flavor:
- Make sure that “done” for every feature includes its setup authoring.
- Run your automated acceptance tests from official setup packages, not from local builds.
- Build upgrades and patches and create automated tests to ensure you can service the product.
- Use only fully declarative custom actions – they make it easier to handle patching, upgrades, and repair.
Frequent, automated testing tells you if your code (and setup) do what they’re supposed to (or not – at least as far as the tests are concerned). Adding setup into the testing mix helps ensure that your setup is ready too.