Don't miss the special features over in the Art of Agile Development section! New features are posted every Wednesday.

 Print

Reflective Design

24 Oct, 2005

I've been trying to describe this design thing we do in XP for a while now. I'd like to expose it as a mainstream practice that can be done outside of the XP context. Lately, I've been calling it "reflective design."

My best description of reflective design, so far, is Design Mindsets. I called it "continuous design" there, but now I think "reflective design" is a better term. Either way, here's a nutshell description:

  • Predictive design: Designing for code that is yet to be written. What people usually think of as "design."
  • Reflective design: Designing based on code that has already been written.

Reflective design, for me, works like this:

  1. I have some code that I've been working with for a while.

  2. In the course of adding a new feature or making some other change, I become aware of a design flaw.

    • In poorly-designed code, the design flaws are obvious: a procedural rather than OO style; Primitive Obsession; Long Method; Pattern Obsession, etc.

    • In well-designed code, the design flaws are more subtle. Things don't fit together as well as I would like, or I have a hard time understanding how things fit together. It may take me a while--weeks or months--to put my finger on the problem. I don't spend those weeks or months thinking about it; instead, the design flaw is sort of churning around in the back of my mind, triggered every time I run into it.

  3. I draw a picture that shows the design and what's wrong with it. I gather the team together and say, "Hey, look at this!" And I point out the code smell.

  4. By this point, I usually have an idea for a better design. I draw another picture and say, "I think this would be better." And we talk about it. Other alternatives are presented, etc.

  5. Then we fix the design using refactoring. If a big change is required, we'll fix it incrementally, sometimes over the course of a couple of months.

Loading...

Loading comments...