The history of software systems development is filled with projects that have either failed or experienced severe problems, ranging from cost or schedule overruns to falling short of customer needs and serious quality defects. The rollout of the federal health insurance exchange website in the US, mandated by the Patient Protection and Affordable Care Act (“Obamacare”), is perhaps the most spectacular example. On the other hand, other complex software projects have succeeded, notably in spacecraft systems, often with high costs and through rigorous engineering and testing. So, what engineering approaches to software projects, within acceptable cost and time constraints, will make successful completion possible? The question remains a perplexing one for project managers, software architects, and organizational leadership and stakeholders. In Righting software, Juval Löwy draws on extensive experience with systems architecture and design to advocate a structured engineering approach to design, intended to mitigate potential problems with projects.
The author’s approach is based on two pillars: a particular approach to designing software systems; and project design that flows from, and is informed by, the system architecture resulting from the system design activity. Both are essential to the project’s success (this may seem obvious, but the strength of the method is in facilitating the integrity of the relationship between system architecture and project design). Accordingly, the first section of this book describes a set of universal design principles, followed by a case study of their application. This is followed by a section on project design; several chapters address different aspects of project design, including project modeling, techniques for risk modeling, design of mega-projects, and time, cost, and risk assessment.
For the system design activity, Löwy recommends starting the design by decomposition of the system based on component volatility, instead of a purely functional decomposition. Concerning requirements, the recommendation is that requirements should capture required behaviors rather than required functionality--how the system is required to operate rather than what it should do; use cases should describe required behaviors. Another significant recommendation is that the general design should take a layered approach to system architecture based on services--a generalized classification of services that should cover most software systems is provided and used in a case study.
The section on project design begins with a discussion of basic methodology and techniques, and progresses to techniques for calculating estimated project duration and cost, resource allocation, assessment of options for scheduling and execution, and validation of the project design. This section discusses conventional tools and techniques, as well as providing rules of thumb and insights derived from the author’s experiences. This longer section is packed with techniques, examples, cautions, and insights.
Three appendices cover project tracking, service contract design, and a design standard in the form of short rules and guidelines encapsulating the principles set forth in this book.
The author believes that the techniques and ideas described in this book apply regardless of programming language, platform, project size, or industry--a position I cannot entirely agree with, for example, certain specialized classes of systems may have overriding constraints and contexts that preclude applying the method in full, and where the ideal “blank slate” may not exist. Even so, the author’s insights regarding volatility-based decomposition and general architecture would be useful to consider. I do agree that they are general enough to apply to a wide range of commercial and/or new system development.
The main target readership of this book is software architects, but project managers, senior developers, and other technically oriented people involved in software design and development may also find it useful for overall understanding and career development. (In accordance with the focus on software architects, certain other aspects of projects, such as requirements analysis, are discussed only to the extent they relate to system and project design, which are the stated main foci of the work.)
Righting software is a highly informative and readable work that does an excellent job of presenting and explaining its ideas in an accessible way. It is packed with useful ideas and insights. Readers will need to put in a fair amount of work to properly assimilate the principles, ideas, and techniques, but it should be well worth the effort. Casual readers who are not primarily software architects, but otherwise technically involved in project management or development, should also find it informative.
More reviews about this item: Amazon