Let's say you're working on a big project, and need a design decision. For example, your team is trying to decide whether to go with Rails or Django, or whether to use a database, flat files, or write your own storage system. Maybe you need to define a communication protocol. There are many ways to decide, but it comes down to three basic patterns:
- "The Man in the Room" – One of the star developers thinks "I know how to do this," goes off into a room, and reemerges three days later with a prototype. The other developers are shocked and awed. When one discovers a flaw in the decision, the concern is brushed away with "but it's already working!" The design is adopted, partially to not hurt the star developer's feelings. Because the initial decision was never discussed, the developer ended up reinventing wheels, and forgot some of the requirements.
- "Let's chat" – An hour-long discussion ensues, dominated by the most outspoken developers. Positions are taken early. The group is by the quieter developers, as initial arguments are exchanged. Eventually, the group moves to the whiteboard, and the different options are sketched out. One group eventually wins over, the other feels beaten. A decision is seemingly reached, but is quickly forgotten, since no one remembered to write it down.
- "Committee rodeo" – An overeager project manager proposes to form a committee that makes a decision. Opinions are solicited. Specifications are written, then rewritten. At the scheduled time, all parties involved meet in a room, with a domain expert flown in from across the country to help out. After a day of deliberation, a decision is reached, and the specification becomes forever written in stone.