At Highgroove we do iterative development. There’s no better way to create software than incrementally, with planned releases every week (or every 2 weeks). Here are some tips that we’ve learned that make Iterative development work.
Release Early and Often. In our iteration planning meetings, we go over new functionality of the application, but throughout the week, while the iteration is in progress, we may deploy multiple times a day. In fact, now that we’re using chef, every time we push a change, the server gets updated with the latest code. This means that the server is always getting new features, and new “releases” are happening daily, if not hourly!
Re-Prioritize. We’re always working off a backlog of tasks, prioritized in order of importance, but it would be naive to think that we (or our clients) know in advance everything that a user will need or want ahead of time. Once a feature has been pushed out (like “An Admin can log in as another user”), our clients (or us) will realize that we want other users to be able to do this, or that we want it to only be available to certain users. If this isn’t a huge must-have feature, we’ll put it in the backlog (or the Icebox from our tracking software). If it is a must-have feature, well, then it’s next on our plate.
Do the Simplest Thing. There’s a lot to be said for keeping it simple. In software, reducing complexity helps keep costs down, and makes development easier and more fun. Acronyms like: YAGNI (You Aren’t Gunna Need It) help remind us that sometimes we can be too clever: “let’s make the system automatically synchronize contacts if x is greater than y” – might not be as smart as: “let’s just send an email notification to a user” so they can decide what to do.
What other tips do you use to make Iterations successful?