This third posting on “What Drives Quality” investigates factors that drive the quality of the architecture and design. A previous posting covered the factors that drive requirements quality. Understanding what drives quality enables you to take action before problems actually occur, thus saving time and money.
With architecture and design I mean activities to define and support the solution architecture (i.e., functionality) and the software architecture (i.e., structure of software and non-functional requirements), and the global and detailed designs prepared by development teams before writing the code.
Some of the factors that drive Architecture and Design Quality are:
- Architecture Stability & Flexibility – The quality of the architecture definitions that are defined in architecture documents and supported by system management.
- Analysis & Design Capability – The skill and experience level of architecture and design teams. This includes the capability of communication and cooperation between the teams.
- Root Cause Analysis – Capability to learn from defects found during development, (e.g., analyzing defects, determining common causes (related to processes, tools and development environment, capabilities, management & organization, etc), and defining actions to prevent them from recurring).
- Requirements Performance – Result of the previous phase (i.e., specifying the products to be developed and the supporting activities such as requirements clarifications, reviews and inspections, and tracing).
- Project Management Performance – Definition, planning, tracking, and control of quality in the development projects and the delivered products.
- Process Management Performance – Defining and baselining the processes to be used for management and technical work. The support in operational usage of the processes for training, instructions, tools and templates and the availability of websites and experienced personnel.
- Architecture & Design Process Maturity – The quality of the defined and baselined architecture and design processes, including all supporting material such as training and templates.
Looking at the first item, architecture stability and flexibility, this is a balance where you want an architecture to be stable (it is a foundation for the software product) but also flexible (to support future additions and enhancements). Refactoring is an agile technique used to continuously restructure your code to keep it maintainable. It will not change the external behavior of the product.
I consider the ability to do Root Cause Analysis as an important driver for the quality of architecture and design. Major or frequent occurring defects often provide information about flaws in your product and/or development process, addressing them improves the quality of your product. To give an example, I have once a lead Root Cause Analysis session on a major performance issue with a product. The team had already tried in several ways to reproduce and isolate the problem, but without success. In the Root Cause Analysis session we analysed several cause-effect paths. For instance we looked at a path starting from the effect that was visible a the customers site, and analysed what part of the software would cause such behavior. This helped the team to investigate parts of the source code, and look for possible code fragments that could be the cause of the performance issues. We also investigated the path why the problem had not been found with system testing, before the product was released. Several root causes where identified, which helped the team to setup a test which could catch the problem. It also helped them to improve system testing to prevent similar problems in the future. With the combination of focused code review and testing they were able to reproduce the problem, implement a solution, and deliver an update to the customer. Exploring different cause-effect paths turned out to be a very effective solution to solve the problem.
Next up in this thread will be a posting on what drives code quality. Future posting will also look at quality drivers from a project management, operational management, and senior management point of view.