AoAD2 Practice: Simple Design

This is an excerpt from The Art of Agile Development, Second Edition. Visit the Second Edition home page for additional excerpts and more!

This excerpt is copyright 2007, 2021 by James Shore and Shane Warden. Although you are welcome to share this link, do not distribute or republish the content without James Shore’s express written permission.

Simple Design

Audience
Programmers

Our code is easy to modify and maintain.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.

Antoine de Saint-Exupéry, author of The Little Prince

Allies
Reflective Design
Incremental Design

When writing code, Agile programmers often stop to ask themselves, “What’s the simplest thing that could possibly work?” They seem to be obsessed with simplicity. Rather than anticipating changes and providing extensibility hooks and plug-in points, they create a simple design that anticipates as little as possible, as cleanly as possible. Counterintuitively, this results in designs that are ready for any change, anticipated or not. It combines with reflective design and incremental design to allow your design to evolve in any direction.

When, not if, I need to change this decision, how hard will it be?

Simple doesn’t mean simplistic. Don’t make boneheaded design decisions in the name of reducing lines of code. A simple design is clean and elegant, not something you throw together with the least thought possible. Whenever I make a design decision, I always ask myself this question: “When, not if, I need to change this decision, how hard will it be?”

The following techniques will help you keep your code simple and change costs low.

...to continue reading, buy the book!

In this Section

  1. Simple Design
    1. Key Idea: Simplicity
    2. YAGNI: You Aren’t Gonna Need It
    3. Once and Only Once
    4. Coupling and Cohesion
    5. Third-Party Components
    6. Fail Fast
    7. Self-Documenting Code
    8. Published Interfaces
    9. Performance Optimization
    10. Questions
    11. Prerequisites
    12. Indicators
    13. Alternatives and Experiments
    14. Further Reading

Discuss the book on the AoAD2 mailing list or Discord server. For videos and interviews regarding the book, see the book club archive.

For more excerpts from the book, see the Second Edition home page.

If you liked this entry, check out my best writing and presentations, and consider subscribing to updates by email or RSS.