This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:

The document's metadata is available in BibTeX format.

Find the publication on Google Scholar

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Diomidis Spinellis Publications

Copyright © 2007 by the Association for Computing Machinery, Inc. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, to republish, to post on servers, or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from Publications Dept, ACM Inc., fax +1 (212) 869-0481, or

Book Review: Sustainable Software Development

Diomidis Spinellis
Athens University of Economics and Business

Kevin Tate
Sustainable Software Development: An Agile Perspective
Upper Saddle River, NJ: Addison-Wesley, 2006

Our software engineering community has for decades flirted with the idea of applying the rigor of other engineering disciplines to the development of software. Sustainable Software Development boldly argues that this metaphor is unsuitable for arguing about software. Buildings are expensive to modify and typically static, whereas software is cheap to modify and evolves over its lifetime. Instead, Tate argues that an appropriate metaphor is a coral reef: an ecosystem of developers, customers, suppliers, distributors, and competitors that lives on top of the software, in the same way as the reef’s organisms live around the coral. Interestingly both the coral and the software evolve together with their surrounding ecosystem.

The book distinguishes itself from other agile programming books by taking a wider view of the field covering not only the project management side of agile practices, but also developer collaboration and technical excellence. The book starts by arguing that the goal of sustainability comes into play by recognizing that a project’s progress depends on the competition between negative stresses (user requirements, disruptive technologies and business models, external dependencies, competition, and cost management) and positive controls (collaboration, methodology, expertise, decision making, leadership, culture, and simplicity). When the negative stresses outweigh the counteraction of a project’s controls the project enters into a death spiral of diminishing productivity. For example, as defects in a project mount (perhaps due to a rush to fulfill a deluge of user requirements) developers spend increasing effort in fixing bugs and less time implementing the actual user requirements. According to Tate, a project’s goal should be to apply the positive controls creating a virtuous cycle of sustainable development. Thus, in our example, by applying an appropriate methodology, such as automated testing, requirements are not considered done before they pass all tests. In the short term this course change will appear to decrease the project’s apparent productivity, but in the long term it will support the project’s evolution and, ultimately, sustainability. Tate contrasts the two ways as working harder versus working smarter.

The remainder of the book is organized around a chapter for each of the four guiding principles that should guide sustainable development: defect prevention, a working product, emphasis on design, and continual refinement. With another apt metaphor Tate advises developers to juggle the four principles of sustainable development while working on product features and fixing bugs. Developers and managers can apply the principles by adopting the supporting practices that Tate describes for each principle. In all cases the practices are pragmatic and clear of dogma. For example, although in common with other agile methodologists Tate argues for a minimal design, he cautions against postponing the design of elements that we will definitely require in the future.

Two appendices contrast sustainable software development with Extreme Programming the Software Engineering Institute’s Capability Maturity Model (CMM). An annotated reading list, an eclectic list of references, and an index conclude the book. The text is full of interesting ideas and illuminating sidebars discussing real-world cases, but as a result at times the reader can occasionally get lost among them, loosing focus of the argument and the course of thought. Some readers may also object to the way the waterfall model, which software engineers have considered as impractical for over a decade, is often (ab)used as a straw man for effortless punching. Nevertheless, this is a book that both developers and managers will appreciate and value. Its advice is important, understandable, and practical: a gift to the software engineering community.