In an Agile / DevOps setting, we work in an iterative way. By dividing up the product into small increments, we can start delivering features very early in the development cycle. We can always be “ready to ship” and produce a Minimum Viable Product (MVP) as quickly as possible.
However, if you’ve never worked this way and you aren’t used to shipping frequently, this can seem intimidating, impractical, or even completely unrealistic.
How do you get your team into a position to increment and start delivering value?
Consider completing an Iteration Zero.
What is Iteration Zero?
In Iteration Zero, you complete the initial setup required to allow the team to start executing iteratively. This may involve some of the following:
- Put all user stories or known tasks into a backlog.
- Create a skeleton project that will build and execute. This could be a small feature or even a “hello world” app.
- Write the initial packaging instructions for your deliverable skeleton artifact. (Dockerfile, RPM spec files, etc depending on your target environment)
- Add the skeleton project to source control.
- Establish team norms related to branching/merging strategies and code reviews. Then, set up your source control system to support the desired workflow.
- Configure any hardware, operating systems, or set up infrastructure as code.
- Set up scaffolding for automated tests along with 1 simple test.
- Configure automated builds, test execution, and deployments.
- Create mechanisms for receiving feedback (from users, other teams, or systems).
The specific details and the amount of setup required will depend on the team. If you are just getting started, you can pick just a few of these. A skeleton project, in source control, that will auto build and deploy to an existing server is a good start. However, if you have been working this way in the past and this is just a new product, you may be able to set up everything very quickly.
Scoping your Iteration Zero
When you are just getting started, try to limit the scope of your Iteration Zero to the things that will give you the most immediate benefit. You don’t want to spend so much time on this phase that it ends up becoming a roadblock to your progress. In keeping with the themes of iterative work and continuous improvement, you can always come back and refine your tools and processes as you try them out.
Benefits of Iteration Zero
If you spend a bit of time up front on this initial setup, it will pay off forever. On a recent project I was involved with, the team spent about 8 hours setting up our initial automated builds, deployments, and test automation framework. Then, over the first 4 months of the project lifecycle, they executed around 2500 total deployments to the test environment. That’s around 150 deployments each week, or 30 a day.
Without this automation, a manual deployment might have taken around 10 minutes each. If the team had attempted to perform 2500 manual deployments they would have spent over 400 hours on them over a 4-month span (almost 5 hours a day!). Clearly, 5 hours per day is impractical and the team would not have attempted to do that. Instead, they would have deployed less frequently and this would have reduced their ability to get feedback on the product.
But, with the automation in place, the test environment always had the latest deployable, almost as soon as the code was in source control. And automated tests were executing each time.
If a developer unexpectedly broke something, they would find out quickly and add a test for the case.
When a feature didn’t work quite as the user had envisioned, the team was able to get this feedback and adjust immediately.
If you are having trouble figuring out how to get going, consider completing Iteration Zero. Think of it like setting up the Minimum Viable Product for your tools and processes. But don’t try to do too much if you are new, you can always refine your setup. The most important thing is to enable your team to get started. You’ll learn as you go!