Home > Articles > Programming > C/C++

How to Achieve Sustainable Software Development

  • Print
  • + Share This
Very little software is written once, installed, and then never changed over the course of its lifetime. And yet, the most prevalent development practices used in the industry treat change as an afterthought. This chapter will teach you to not only anticipate change in your software but develop specifically with change in mind.
This chapter is from the book

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 [1] 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.

Sustainable Development

Sustainable development is a mindset (principles) and an accompanying set of practices that enable a team to achieve and maintain an optimal development pace indefinitely. Note that optimal doesn't mean fastest— that would be pure coding, such as for a prototype.

Sustainable development is about efficiency and balancing the needs of the short and long term. It means doing just the right amount of work to meet the needs of customers in the short term while using practices that support the needs of the long term. There are not enough software projects today where over time a team can stay the same size (or even shrink) and still deal with the increasing complexity of its software and its ecosystem and increasing customer demands. In sustainable development, the needs of the short term are met by regularly producing software that has the highest possible value to customers. This is done while keeping the cost of change as low as possible, which lays the foundation for future changes and makes it possible to quickly respond to changes in the ecosystem.

Sustainable development, as depicted in Figure 1-1, is a liberating experience for the lucky teams who can achieve it. While they have to deal with stress in the form of constant change, they have the advantage that they are in control of the situation and can out ship their competitors because they are able to respond more rapidly and at a much lower cost. They are also able to be proactive about new technologies or new opportunities in any form.

01fig01.gif

Figure 1-1 In sustainable development, the cost of change stays low over time. The team is able to respond to changing requirements and changes to the software's ecosystem. This is a pace that the team can maintain indefinitely. Key indicators of sustainable development are an ability to keep the number of defects relatively constant over time while recognizing that the software must be modified to keep the cost of change under control.

  • + Share This
  • 🔖 Save To Your Account