Big Tasks in Little Pieces

The single biggest objection to developing in short iterations is that some tasks are just too big to fit. System architecture is often placed in this category, as is the development of complex functionality that “doesn’t work unless all the pieces are there.” On the surface, these may seem like valid arguments, and in traditional Waterfall development, they are. However, changing the development paradigm addresses both arguments.

Emergent design allows the component-level architecture to evolve as requirements become more defined. When evolving an architecture over time, short iterations actually aid development. The quick turnaround times resulting from short iterations provide timely feedback on what works, allow architects to try multiple approaches, and postpone critical decisions until the system is better understood.

Emergent design doesn’t relieve system architects of all need to think ahead. For example, attempting to retrofit security onto an existing system can result in lots of redesign and rewriting. However, adequate consideration of security issues early on doesn’t require implementing a full-blown security component in the first iteration.

The implementation of complex functionality often doesn’t fit in one iteration, which can mean that the development team has no functional software to release at the end of the demo. However, complex functionality can typically be broken into smaller, less complex pieces. Simulating nonexistent components ...

Get The Art of Lean Software Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.