After being a part of the start of numerous projects for Don’t Panic Labs, I have become rather familiar with our term “Iteration 0” (Iteration Zero). We have embraced this idea and introduced it into numerous projects – whether they be internal projects or joint ventures.
If you have not heard of “Iteration 0”, it is simply our term for the first iteration of a project and the tasks it encapsulates. These tasks are so crucial they can essentially mean the success or failure of a project. During this iteration, we spend time on architecture, technology choices, project setup, and deployment scenarios.
However, one of the most vital pieces to our “Iteration 0” is the configuration of a continuous integration system. Our continuous integration system should come before any large coding and development effort.
That’s right. Besides an initial project/solution construction, you should set up continuous integration to perform builds, tests, and potential deployments before you start writing code.
The reason for this is simple. Just as your design and development will be iterative, your build process will become iterative as your application grows. You may just start with a single web app and test project. But as time moves on, you will still have that initial web app, along with database migrations, tests, windows services, console apps, desktop apps, etc. And without a continuous integration scheme, your manual builds and deployments will only become more taxing and error-prone.
I guarantee you it will be much easier to configure your continuous integration setup at the start with a single application, versus beginning with many applications. The longer you wait, the more difficult it becomes. And you will eventually reach the point where someone says “we don’t have time for that.”
Take our word for it. We’ve been through this process time and time again. We’ve waited on projects to configure continuous integration. And every time it was increasingly exhausting to do so “after-the-fact”.
That’s exactly why we treat continuous integration as a high priority item in “Iteration 0”.