Software Development/Iterative and Incremental Development

From The Thinkulum
< Software Development
Revision as of 00:58, 22 February 2019 by Andy Culbertson (talk | contribs) (Added the article.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Incremental development is the approach of adding a few features per release rather than developing the whole program at once. It lets users begin using the software earlier, and it lets the feature roadmap change without wasting much development effort on the original design. It's different from iterative development, but they normally go together, so I'm using incremental as shorthand for both.

If you're a developer working on your own, the habit of small, frequent releases also can add accountability to the development process. It'll at least hold you accountable to work on the project, since other people will notice when the releases stop coming. It might even encourage you to code each feature well. A short release cycle does mean there's less time to get the code right, but there's also less time to procrastinate on getting it to work, and if you implement good programming practices, you'll waste less of that time debugging.

Small, frequent releases can also help the developer avoid procrastination, since the tasks for a small release feel more achievable, similar to writing a zeroth draft of a manuscript. There's little concern for polish, so a zeroth draft has fewer requirements to worry about, and therefore it's more likely to get written.

A related practice is to deliberately trim your feature list for each release, captured in the Extreme Programming practice You Aren't Gonna Need It.

One practice that's helping me think in terms of incremental development is using GitHub flow as my version control workflow. In GitHub flow the master branch is reserved for deployable code, so anything I'm actively developing goes into a topically named branch off of master. Once the code related to that branch is ready for deployment, I merge that branch back into master. This procedure gets me to plan in terms of small clusters of features. I'll talk more about version control in the next main section.