Listen to this post
In previous posts, I discussed that the first leg of emergent design is TDD, which provides code quality and sustainability. The second leg is design patterns, which provides insights into handling variation. The third leg is ATDD, which provides us a way of discovering and clarifying the value we will get.
The essence of agility is to be able to realize value quickly. But what is of value has to be discovered, created, and then validated. This needs to be done in a series of small increments. Requirements are discovered and clarified over time. If they weren’t, we would not need emergent design! A waterfall approach would work. The emergence of Agile requirements drives emergent design.
ATDD drives not just by refining and clarifying small pieces of work, it has to be consistent with the mantra of working on those items with the greatest potential value. ATDD drives the emergence of design by driving the emergence of behavior.
One of the key insights required to truly understand Agile is that requirements, design, code, and test are different aspects of the system. They are not separate from each other. This is reflected something Steve Jobs said, “Design is not just what it looks like and feels like. Design is how it works.”