The Mushroom Method:

A Practical, Evolutionary Software Development Process for Small Companies

Contents


Overview

This document describes an agile software development process that I, with help from many of my colleagues, developed over the past several years at a number of different companies. The process has a lot in common with other agile methods, such as eXtreme Programming and Scrum, but it focusses on practical methods that are best suited to small to medium sized groups. Over the years, this method has become known, for better or worse, as the Mushroom Method. The name stems from the shape of the diagram, seen later in this document, describing the concentric release cycles that are at the heart of the method.

Principles Behind the Method

Though the Mushroom Method was developed and honed independently from other agile development methods, the principles that drive its definition and use are basically the same as those espoused by the agile development community. Namely,

Participating Groups - PDQ

Product development activities are carried out by an organization consisting of three separate but coordinated groups.  The Product, Development , and Quality groups are responsible, respectively, for defining product releases, designing and developing the software products, and testing and evaluating the quality of the release.

The Product Group consists of representatives from sales, marketing and technical support, including a Product Manager, and is responsible for defining the feature sets of each of the product releases and setting customer expectations regarding features and release dates. Members of the product team leverage their direct customer contact to help write requirements documents outlining desired product features and priorities. Members of this group also participate in weekly bug triage sessions where reported software defects are tracked, prioritized, and allocated to future releases. The product group makes the final determination of whether a software build is ready to be released.

The Development Group is responsible for architecting, designing, and implementing the company's software products.  Each major product release is assigned a Release Manager from this group. Starting with the requirements documents and working with other developers, the release manager produces a high level design for the software release, decomposes the work into tasks and assigns these tasks to other developers. The release manager also participates in detail design reviews and bug triage.

The Quality Group subsumes what is typically called software quality assurance, but its expanded role in this development process includes evaluating and assessing product usability, code quality, buildability, performance, functionality, and adherence to schedule. Members of this group, including a Quality Lead, participate in design reviews and bug triage and have the final determination of whether a software build meets its quality goals.

Product Development Cycle

The Mushroom Method is a practical, incremental approach to software development based loosely on the evolutionary delivery ideas of Dr. Tom Gilb. Our process encourages us to "deliver early and often," thus helping to ensure that we are never very far away from a buildable, stable system.  The product release cycle is actually three concentric cycles as shown below.
After a product release is defined and architected at a high level, we immediately begin to execute a sequence of very frequent (every 7-10 days) internal releases delivering more and more of the desired functionality with each alpha release.  Every 4-6 weeks, the aggregate functionality of the alpha releases becomes significant enough to warrant a public beta release including updated docs and a higher level of stability than the internal releases.  Finally, when all desired features have been built and proven both by internal users and free beta users, and when certain other quality and completeness criteria have been met, we do a commercial release (which we call a gamma release here) at which time sales can begin collecting revenue for the new version of the product.

This evolutionary delivery strategy allows us to do almost continuous integration testing.  In addition, detailed design can be done in an incremental fashion allowing simultaneous design, implementation, and testing of different features.  This strategy reduces the risks involved with more traditional models where developers tend to wander and lose focus during lengthy design and coding phases and the 'end game' of documentation, packaging, and roll out is played only once, usually under extreme pressure.

The alpha, beta, and gamma release types allow us to progress toward a feature-complete, high-quality production release in a process similar to the annealing process in metallurgy. Each beta and gamma release is the result of multiple, sometimes dozens, of "heating and cooling" cycles where the code is gradually hardened. As in metallurgy, the result is tough, resilient, and relatively free of defects and brittleness. This release annealing aspect is generally not found in other iterative and evolutionary processes like eXtreme Programming (XP) and Scrum.

Glossary of Terms


Created by: dutton on: November, 1998
Last modified by: dutton on: February, 2007
Copyright © 1998-2007 by Jim Dutton
All Rights Reserved