This book is one of the few books on the market today which directly addresses the subject of operational requirements for modern high-volume software systems, and the only book I have found which explains how to ensure that operational requirements (often unhelpfully called 'non-functional requirements') are prioritised effectively before, during, and after a project.
The authors balance strong technical detail (including real-world examples) with higher-level recommendations for project process changes to improve the chances that operational requirements will be funded and addressed during a software project. Also identified is the need for a strong voice in the implementation team to fight for the attention to operational detail necessary for a non-trivial software system to succeed in operation.
The relationship between performance and operability is summarised by the authors on page 171: "Many of the operability tests that you will need to conduct can only be executed under load." In other words, operational readiness can typically be verified only when the system has been monitored and measured under a representative load; practical approaches to performance testing form an important part of the book.
I have recently started working at a software house that are in the process of developing a new cloud based global application. My initial project has been to scope, prepare and run a set of non-functional tests that will give us confidence that we can successfully operate the application when it reaches production.
I found the book to be very useful and thought provoking.
It is highly focused on non functional considerations that are often an after thought in the development in many business applications. This is a double edge sword as I suspect that a few may consider it short or low on content.
For me, this was certainly not the case, as I found that the advice that it gave was both useful and practical.
Some of the important areas that it covered were.
Taken from the contents page
1. Non Functional Requirement (Performance, Operability, Availability and Archiving) 2. Designing for performance 3. Characteristics of a robust system (Application logging, Visibility into system state, Traceability and reconciliation and Error handling) 4. Test planning 5. Test preparation and execution 6. Operations trending and Monitoring 7. Common impediments to good design.
And other useful insights and ideas.
The book discusses these topics generally as must be the case, as every application will have its own characteristics, usage patterns and stress points. You will still have a lot of work and planning of your own to do, but for me it was a good starting point.