I’ve been noticing a common theme in several of the teams I’ve been helping or observing over the past few months. I’ve been hearing the complaint that members of teams are working as hard as they can to implement as many stories as they can, ignoring such “optional” activities as refactoring, etc, because they can’t afford the time. They are accepting so much work in terms of functionality that they don’t have time to put any time into the architecture, design, or other “niceties”. Then they start paying for acting like this a bit down the road…
On traditional software projects, developers own their own areas of the system, and they are responsible for getting that particular piece to work. They can afford to put their heads down and just crank on their piece. Once they are finished, they pass it off to someone else, and that person or group is responsible for making sure that the entire system works.
It is different on an agile project. The developers, customers, testers, designers, etc, are all responsible to the system first and foremost. The system has to work, be functional, be shippable at all times, and this is the primary concern. As developers work on individual stories, those stories only serve to help them focus their attention on a piece of the entire system that is being changed. They can’t afford, however, to put their heads down, as above, and just focus on their little piece. At the end of the day, the must make sure that the system works.
The system is paramount.
The system needs to be kept healthy through refactoring.
The system is what gets delivered.