By: C. Weir
Published in: PLoPD3
Category: Design Process, Organization and Process
Summary: Techniques for using teams effectively in software design.
A team of designers can think itself into a cul-de-sac. Once the team has reached a conclusion, ego and inertia make it difficult to consider other possibilities. Have several designers work individually or in pairs to produce a different design to solve the same problem. The entire team then evaluates the designs in a series of reviews. Finally, a lead designer combines the different solutions into a single design.
Teams typically make arbitrary design decisions. Have the team meet with a facilitator to produce a decision document, comparing and contrasting two design approaches. This is a short document, usually just a couple of pages.
People make mistakes. It's difficult to see problems and errors in your own work. When one or two designers are producing a design, there is a strong likelihood of undetected errors. Have each designer produce a draft or a complete design. Each of one or more reviewers receives a copy and provides feedback.
You need to partition the design work for a large system. There must be a chief architect or small team to provide design integrity. Yet in a large development project, it might be impossible for this core team to do all the design work. The core team should provide an overview of the system architecture and divide the system into independent components. Journeymen architects then design the components and act as chief architects for the components.
It's difficult to keep documents up to date. Keep a master hard copy of the design accessible to the entire team. Anyone who updates the design must make corrections in the margin, delete sections that no longer apply, or write a description of the change. Ultimately, one team member should update online copies to reflect the corrections. This can be a learning experience for newcomers.