Sustainable software development is a mindset (principles) and an accompanying set of practices that enable a team to achieve and maintain an optimal development pace indefinitely. I feel that the need for sustainable development is an important but unrecognized issue facing software organizations and teams today. One of the more interesting paradoxes in the high-tech sector is that while the pace of innovation is increasing, the expected lifetime of successful software applications is not decreasing, at least not in a related way. This chapter outlines the value of sustainable development, while the next chapter discusses the pitfalls of unsustainable development.
The more successful an application or tool is, the greater the demands placed on the development team to keep up the pace of innovation and feature development. Think of products like Adobe Photoshop, PowerPoint, SAP, or Oracle. These products are all successful and continue to be successful because their development teams have been able to meet user's needs over a long period of time despite persistent competitive pressures and changing technology and market conditions.
Unfortunately, there are too many projects where there is a myopic focus on the features in the next release, the next quarter, and the current issues such as defects and escalations reported by customers. The software is both brittle and fragile as a result of factors such as over- (or under-) design, a code first then fix defects later (code-then-fix) mentality, too many dependencies between code modules, the lack of safeguards such as automated tests, and supposedly temporary patches or workarounds that are never addressed. These are projects that are unknowingly practicing unsustainable development.
In unsustainable development, teams are primarily reactive to changes in their ecosystem. By and large, these teams are caught in a vicious cycle of reacting to events and working harder and longer hours akin to being on a treadmill or walking up a down escalator. The result is a project death spiral, where the rapidity of descent depends on the amount of complexity faced by the team and its principles and practices and discipline.
In sustainable development, teams are able to be proactive about changes in their ecosystem. Their ability to be proactive is enabled by their attention to doing the work that is of the highest value to customers with high quality and reliability and an eye toward continual improvement despite increasing complexity. These teams are in a virtuous cycle, where the more team is able to improve themselves and how they work together, the greater their ability to deal with increasing complexity and change.
Underlying sustainable development is a mindset that the team is in it for the long haul. The team adopts and fosters principles and practices that help them continually increase their efficiency, so that as the project gets larger and more complex and customer demands increase, the team can continue at the same pace while keeping quality high and sanity intact. They do this by continually minimizing complexity, revisiting their plans, and paying attention to the health of their software and its ability to support change.