Our lead customer asked me yesterday, "In XP, who does the design?" I answered, "The team."
doesn't designate a role like Architect or Designer or Chief Cook And Bottle Washer. There is no final authority bearing all responsibility for design.
"But wait," a critic cries. "It's obvious that some people are much better designers than others. Even more scary is that some are much worse. You can't just let everyone design their own stuff. Even with PairProgramming
, you'll get a wide range of quality, and some of it will suck!"
Right on, dude. It would be possible, perhaps, to get more code entered that way, but some of it would indeed, as our rough-hewn interlocutor suggests, be less than adequate. And in a big long-lived system, inadequate goes a long way. Remember the advice of the unnamed master: "Code rots".
It is very important that all new development tasks, certainly those requiring new classes or changes in relationships between existing classes, begin with a bit of design. The team should sit around the table and do a CRC session to fix in their minds how the task is to be done.
This process will provide the programmers with the best thoughts of the entire group. These will converge to something better than even the best designer would have produced.
The effect is that all programmers are working with good, often great designs, which are custom-fitted to the situation.
A warning, however. In the press of time, it's easy to get too busy to do CRC for things. A programmer may feel under pressure to get something done, or may be reluctant to interrupt other busy programmers. Everyone starts kind of keeping their head down so they won't see a face pining for help.
Do not do it. You'll go from designs that are best of breed to mongrel unrelated designs that have not had the light of review shone upon them. (Unmix that metaphor!)
Good design, done minimally, just in time, with CRC. An ExtremeProgramming
In the early days of describing XP here, the XP people were at pains to distinguish their practices from CRC. It was even suggested that XP could be done without CRC at all. Of course no one ever explained how ... so is it now fair to say that CRC is central to XP, or is that still going too far?
Where do we say that? I'll take a look at it and see what I think. --rj
I am new to ExtremeProgramming
(a recent convert) and I'd like to propose
a way of doing this, namely DesignInIdl
counter that. IDL implicates a very stable fixed large-scale design. We want design elements to start small and local, and only grow large at need, and reluctantly. Then, once large, the modules may need PublishedInterface
Where does this leave what FredBrooks
? Most often, ConceptualIntegrity
is achieved by the design proceeding from a single mind. Each compromise (required when many people design and there is no vision
) dillutes a system's conceptual integrity. See: DesignByCommittee
On the ConceptualIntegrity page it says that, 'a system must have a powerful metaphor that is uniformly applied throughout a system'. XP espouses the SystemMetaphor to maintain integrity. Its one of the practices.
No one is recommending design by committee for XP, and no one is recommending design "compromises". Perhaps you have never experienced effective teamwork in the design area. As a somewhat expert designer, I find that my designs are improved by exposing them to the ideas of others. I'm pretty smart, but I'm not as smart as me + someone else; most ANYONE else. --RonJeffries
It is my understanding that the ConceptualIntegrity
is ultimately coming from the customer, his stories, and his steering. The design is the stories, not the implementation details. In XP, design of implementation details is never comprehensive but rather simple and local. Since the code is kept clean, tight, and refactored the implementation details are easy to change, and there never needs to be comprehensive design for it. --JamesRobey?
How much time are required for a CRC Session? I often use UML diagrams for design drafts is this too much effort? --KarlNeuhold
UML diagrams can be very useful to show the team or the pair-programming partner your ideas. Just walk up to the whiteboard or grab the nearest napkin. It's just that easy.
I think when you use all XPPractices you only has to design a framework and some interface before you can start with Programming.
No, you can evolve your framework and interface as you program. You just need to start with a test.
Design is losing ground in the era of Agile. I have started a list of design related principles called AmmerseDesignPrinciples
Comments and collaboration is welcome. I think that Ammerse can be included within XP, SCRUM and others, to add a bit more focus to design. - JonathanCrossland