Archive for the ‘ Object Orientated Design ’ Category

Agile Means No Design

At least once a day I fond myself stating that Agile does not mean no design. This misconception is common among developers eager to code, managers thinking Agile means a reduction in quality and architects worried about any trend that reduces up front thinking.

Before the Agile Manifesto was published, Martin Fowler proposed ‘dynamic design’ to cope with changing requirements. In his 1998 paper published in Distributed Computing, ‘Keeping Software Soft‘  Fowler states

“You can get users to sign off on requirements documents in every blood group, but they can still change their mind. … If requirements change without warning how can we develop a stable up-front design?”

Fowler describes dynamic design by saying,

“You don’t try to get the design right at the beginning. This doesn’t mean you abandon up front design: you still do it but now you don’t try to find the best solution … you build the simplest thing that could possibly work”

Agile, of course, addresses this by breaking big projects into lots of small projects, often called sprints, and keeping the requirements – design – build – test cycle as short as possible, doing just enough requirements capture and design for the project at hand. This generally involves working in the context of a larger, higher level design because as Fowler states:

“… designing as you go about building a program doesn’t work for larger scale systems”