It seems that "design" seems to be the center of a lot of contention about XP. I have to say, coming from the shrinkwrap software world, that this seems almost surreal to me. At least in the projects I've been involved in, OMT, UML, and CRC Cards are unheard of. When design is done up front, it's done on white boards or notebook paper. Certainly no persistent design data is kept. These weren't little projects, either. Does everybody in the Smalltalk world obsess over design? Just curious.
Here are my questions, for those of you who have at one time or another rapped XP over not recommending design:
Do you come from projects that do a lot of design and it feels very successful to you?
Or do you come from projects that do not do a lot of design, and you feel that they should?
If you have "obsessed over design" when you thought of XP ... please try to tell us why.
Please describe how design fits in to your projects: when it's done, how it's documented, the extent to which, and how, design errors get corrected downstream, the extent to which the documents get upgraded. Tell us a story about design in your world.
I guess I'm not very good at design, because I find that if I do it all at the beginning, by the time I get near the middle, the design turns out to be wrong.
So what I do is just design a tiny bit, then build something to see how well the design holds up. The building of it tells me things about what the design should have been. Since I just built a little, it isn't hard to change the design, and the thing, to make it just like I would have if I'd been good at design.
So I design all the time, kind of in hopes that I'll get good at it with enough practice. The nice thing is that the software turns out really good, even though I'm not very good at design.
One of the things I do in my spare time (on the odd occaisions I get any) is designing computer games. My other half (Duncan) was reading through the "designs" and commented on the fact that none of it was what he'd call design. He's used to BigDesignUpFront
even to the extent of creating it when it doesn't exist (mostly because if he didn't do it, there would be absolutely no-one in the building who knew the design when he left). I don't do that for games. I, apparently, write down the things he doesn't bother to. Things like the packing of datastructures. My booch-ish diagrams come with notes about implementations attached to them. Things like that. Because I can hold the high level design about how it all hangs together in my head, but I forget details so I write them down as I think of them. Duncan does design by ignoring the details and sketching broad strokes so he knows where he's going even if not in detail.
Actually this turned up in wargaming as well. I handed him the current draft of the rules and he read it and pointed out that while it contained all the things he needed to know about how special kinds of figures influence dice rolls, I'd neglected to describe the turn sequence...