Dynamics of Software Development
Jim McCarthy, the leader of the MS C++ Development team, provides us with a team-centric (as opposed to process or tool-centric) set of practices. The book was first released in 1995, but remains just as relevent and useful today as then. In his introduction, he reminds us that:
The real task of software management is to marshall as much intellect as possible and invest it in the activities that support the creation of the product. Intellect can take the form of abstract human qualities like creativity, cleverness, reasonableness, efficiency, and elegance. Intellect can take on other immaterial qualitieis like timeliness of availability and relevance to customer needs. The point is that to create intellectual property you need the intellectual involvement of the of the creators, and this involvement is the single hardest thing to achieve in any software development effort.
Jim offers us a series of essays about a broad range of topics covering the themes of organizational composition & ownership, design, development, and customer relations. He groups these practices into what he calls 'moves', which are areas of sequential emphasis in the development of packaged software development. These moves are: the opening, the middle game, shipping, and launching. He does a particularly good job of 'branding' each idea with a short tag line that enables the practice to be invoked like a play in a playbook. A representative set of the practices which he suggests are provided here:
- Establish a shared vision
- Get their heads into the game
- Create a multi-release technology plan
- Don't flip the bozo bit.
- Use scouts
- Watch the ratio
- Use feature teams
- Use program managers
- Be an authority, not an authority figure
- Alone? A market without a competitor aint.
- Dead heat? Break out of a feature shoot-out.
- Behind? Ship more often with new stuff.
- Ahead? Don't ever look back.
- Take the oxygen along.
- Enrapture the customer.
- Find the sweet spot.
- It's a relationship, not a sale.
- Cycle rapidly.
- Go for greatness
- State your theme
- Minimize dependencies
- Propitiate the gods.
- Portability is for canoes.
- Design time at design time.
- Don't accept dictation.
- Now go play.
- Be like the doctors.
- Remember the triangle: features, resources, time - don't throw more people at a problem.
- Don't know what you don't know.
- Don't go dark.
- Beware of a guy in a room.
- If you build it, it will ship.
- Get to a known state and stay there.
- Use zero defect milestones.
- Nobody reaches the zero defect milestone until everybody does.
- Every milestone deserves a no-blame portmortem.
- Stick to both the letter and the spirit of the milestones.
- Get a handle on 'normal'.
- A handful of milestones is a handful.
- Every little milestone has a meaning (story) all its own.
- Look for the natural milestones.
- When you slip, don't fall.
- Don't trade a bad date for an equally bad date.
- After a slip, hit the next milestone, no matter what.
- A good slip is a net positive.
- See the forest.
- The world changes, so should you.
- Violate at least one sacred cow.
- Beta is not the time to change.
- The beta is for spin development.
- Triage ruthlessly.
- Don't shake the Jell-O.
- Compete with the superior story.
- Create a winning image.
You'll have to read the book to benefit from the deep insights and wisdom available from each of these practices, but the investment is definitely worth it.
Jim and his wife subsequently produced the Core Protocols, a framework and patterns for communications within team settings that builds upon the ideas in this original work. He continues to offer workshops on these topics today.
