Kim Gräsman asked a simple but thought-provoking question to the extremeprogramming Yahoo! group:
Hello all,
It seems incremental design has become a theme (if implicit) on the
list these past weeks -- does anyone have good references to reading
on incremental design?
Good question. There were some good recommendations made. Here are some of them:
- Refactoring, by Martin Fowler
- Agile Software Development, by Robert Martin
- Implementation Patterns, by Kent Beck
- Design Patterns, by Gamma et. al.
- Applying UML and Patterns, by Craig Larman
The question then morphed into a discussion about adopting incremental design:
I'm just thinking about this in the abstract, I don't have an actual
question really, but it seems to me getting a team started with
incremental design can be difficult, and I've talked to people who
have tried without much success. So I think I'm trying to better
understand the practice before misguidedly attempting to use it.
To answer the question about how to adopt incremental design well, the age-old question of what IS good design reared it's head. This, of course, resulted in advice that was all over the map. One interesting point of view was presented by Ron Jeffries:
I believe that by most people's lights, a "good design"
automatically turns out to be evolvable. IOW, faced with a design
that is thought to be good, but not evolvable, we can quickly come
up with a design which is similar in essence, "better", and
evolvable. The making it "better" will make it more evolvable
without working directly toward that property.
But, one notable gap in the discussion was that the "how do I adopt incremental design?" was never directly addressed even though that seemed to be the main topic for a large part of the discussion. The group came at the issue from different angles but never directly. Is it difficult for us to discuss adoption? Or is it so obvious that we don't need to address it directly?