The Flow of Development
The world of things is drama.
The world represents all that exists and might exist;
Flow manifests all that happens and may happen. [Lao2000]
Traditional methods document the artifacts of schedule, budget, requirements, and design in order to control development. These static artifacts capture the intention of a project, yet they fail to account for its tao, its flow. The flow of development erodes old intentions and creates new ones, forcing an ever widening gap between artifact and perception. The effort needed to complete, correct, and maintain consistency between artifacts increases exponentially with the scope of a project, yet even small developments may swiftly overrun their banks.
Implications spread from requirements like melting ice. Code swells to accommodate them. Fast fixes and redundancies spread like weeds until source bears no resemblance to design. Schedules inflate like balloons, and budgets stretch or snap. The widening produces stress, heroics, low morale, staff churn, and management intervention. Politics kicks in and software quality disappears beneath stopgaps and recriminations.
According to the Standish Group [Standish1995], almost a third of all traditional software projects are cancelled before delivery. Another half double their initial budget and time frame. The ritual of diagrams, charts, spreadsheets, and specs is grasped ever tighter by management, yet each document begins and ends with open speculation on the quality and timeliness of a deliverable.
The key insight in XP is that development must be regulated by dynamic discipline. Architecture is validated by small, throwaway prototypes. Requirements are detailed by regular consultation between developers and customers. Schedule is specified by cyclic negotiation. Budget is obtained by iterative feedback. Code is delivered in concrete features of restricted granularity but testable effect. Quality evolves through merciless automated testing of features and the units that comprise them. Each feature undergoes continuous integration with an evolving whole, and a regimen of whole-system refactoring keeps the project in balance, prepared to respond swiftly to change.
These disciplines are not captured by any traditional development artifact. XP doesn't dispense with artifacts, but instead reduces them to disposable chunks that decay and evolve as business needs are reappraised. XP artifacts track, but do not pretend to control, and so they can be maintained in harmony with the flow of development.