Agile Design vs Domain Driven Design

In section 2 of his book Agile Software Development: Principles, Patterns and Practices, Robert C. Martin explains that with agile methodologies there is definitely no “big picture” with regard to the design of the system. He says: “In an agile team the big picture evolves along with the software. With each iteration, the team improves the design of the system so that it is as good as it can be for the system as it is now. … they [the team members] focus on the current structure of the system, making it as good as it can be.”

He goes on to give 7 symptoms of bad design (“smells” that pervade the overall structure of the code) and 5 principles that help developers eliminate those design smells. He says that agile design is:

… the continuous application of principles, patterns, and practices to improve the structure and readability of the software. It is the dedication to keeping the design of the system as simple, clean, and expressive as possible at all times.

Agile methodologies take this approach to ensure that the resulting software is flexible, maintainable and reusable — thus providing the capability to easily cater for change. And that is the very agility that these methodogies provide.

Okay, so this yields agility, but is that all we can or should aim for with our design approach in agile?

Well, in his excellent presentation “Folding Design into an Agile Process” Eric Evans isolates some smells (around 30 minutes into the video) that indicate when the agile methodology would benefit from incorporating some degree of explicit design. Here is an excerpt where he addresses the smell of “when your development velocity is slowing down because the previous work is a burden on your new work”:

It’s gotten to the point where most people haven’t experiencde a project where earlier work was an asset to new work. … And that saddens me. But … that’s what modelling can give you. Your old work actually makes the new work go faster because you are building on abstractions that you’ve created that let you work at a higher level.

And he goes on to give guidance as to when and how to fold design into the agile process.

Check out the presentation; it is very insightful.

Speak Your Mind