You can fill your garden with flowers, but space is limited. As you grow your garden, weeds will follow and occupy additional space. From time to time you have to stop planting flowers and allocate some time to clear of weeds. With the given additional space, new flowers can be planted.
- garden = project
- space = complexity capacity
- flowers = features
- weeds = technical debt
- planting = implementing
- clear of weeds = refactoring
You can fill your project with features, but complexity capacity is limited. As you grow your project, technical debt will follow and occupy additional complexity capacity. From time to time you have to stop implementing features and allocate some time to refactoring. With the given additional complexity capacity, new features can be implemented.
Update: As Andreas pointed out correctly, the gardening metaphor is also introduced in The Pragmatic Programmer (great book, go get it now (DE/US)). See the authors’ understanding of software gardening in this interview.