The Correlation between Software Quality and Maturity Levels
Coder, programmer, developer, engineer… You name it. Everyone wants to be one of these. The “going digital” trend gained more and more traction in the last decade and it is only fair to say that the most popular professions are from the digital world. We are seeing tons of new software products being introduced every day.
What about the quality of these products? When we talk about quality, follow-up discussions mostly focus on the best coding language or framework, the most popular conventions or standards, the number of QA engineers there should be in a team, etc. These topics are not answering this question actually, they are just broadening the aspect of it.
Software quality is not something relative or obscure. It is scalable, can be expressed in numbers, and could even be certified.
Scaling products and organizations is one of the main topics in software engineering education. When it comes to process improvements, there are models, concepts, institutions to scale your organization and process. This generally gives you an idea about your overall manufacturing quality and work effectiveness too. However, on the subject of scalable quality, the options are limited.
A big step forward in the industry towards process improvement was the development of the Capability Maturity Model concept. This model is designed to evaluate the maturity of processes and overall organization. This phenomenon then evolved as Capability Maturity Model Integration (will be referred to as CMMI), in which the US government (specifically the U.S. Department of Defense) was the first one to use this model to scale and evaluate project teams and processes.
Personally, I think these models are perfect for scaling software quality. In this article, I will try to convince you too.
CMMI is a very comprehensive and detailed model to define the maturity level of your organization which can be perfectly applied to tech companies and products. The most important aspect of this model is that CMMI makes processes and organizations demonstrable. Also, it provides the business owners a clear vision of the missing or strong parts of their products and processes. You can contact CMMI experts and get a Maturity Report of your organization that displays the weak spots in your processes with suggestions for improvement.
What is the use case of this maturity model? What do you get when you apply for an appraisal? Below is a sample table of points where you need to accomplish for each level.
For example, you applied and got the above report. And according to the report, you are on Maturity Level 1. This means, to achieve the 2nd level, you need to implement Requirements Management, Project Planning, etc. processes into your organization as mentioned. Then for the 3rd level, you need to add Validation, Verification, etc. steps, and so on.
Not surprisingly, a company with a high maturity organization can:
- Provide more customer satisfaction
- Land new clients more successfully
- Have better productivity and efficiency with optimized processes
- Cause less risk due to a well-defined structure
What if we are to apply a similar approach to software products? Let’s try to apply these exact levels to a fictional product with a little bit of adjustment and achieve a meaningful result. Assume you have to complete the tasks below to achieve each level.
- Incomplete: The problem should be well-defined
- Initial: Requirements should be analyzed
- Managed: High-level design should be completed
- Defined: Low-level design should be completed
- Quantitatively Managed: Functional coverage on requirements and test coverage should exceed the optimal point
- Optimizing: The product should be well-maintained and regularly improved
Not bad, eh? Well, the good thing is there are already approaches that we can follow so we don’t have to reinvent the wheel.
CMMI For Development (CMMI-DEV)
CMMI Development is an integrated set of best practices that improves performance and key capabilities for organizations that develop products, components, and services. — CMMI Institute
The CMMI-DEV model acts as a guideline on how to apply CMMI best practices in a development environment by defining Goals and Practices. You can take those practices depending on your goal as a checklist or to-do list. The more you do in your daily progress, the higher the quality you can achieve in your software products.
Below is a summary of some generic goals and related practices, taken from the CMMI-DEV document .
To Institutionalize a Managed Process
A managed process is a monitored, controlled, and reviewed process that is in accordance with a pre-defined policy and involves relevant stakeholders.
- Establish an Organizational Policy
- Plan the Process: define and document the plan and the process description, review the plan with relevant stakeholders and get their agreement, and revise the plan if necessary.
- Provide Resources
- Assign Responsibility: assign overall or specific responsibility and authority and confirm that the people assigned to the responsibilities and authorities understand and accept them.
- Train People
- Control Work Products
- Identify and Involve Relevant Stakeholders: identify stakeholders relevant to this process, share these identifications with project planners, and involve these relevant stakeholders as planned.
- Monitor and Control the Process: evaluate actual progress and performance against the plan, review accomplishments and results, identify problems in the execution of the process, take corrective action when requirements and objectives are not being satisfied, and track corrective action to closure.
- Objectively Evaluate Adherence
- Review Status with Higher Level Management
To Institutionalize a Defined Process
A defined process is a managed process that is tailored around the organization’s set of standard processes and tailoring guidelines.
- Establish a Defined Process: select from the organization’s set of standard processes those processes that best meet the needs of the project, establish the defined process by tailoring the selected processes according to the organization’s tailoring guidelines.
- Collect Process Related Experiences: store process and product measures in the organization’s measurement repository, submit documentation for the organization’s process asset library, document lessons learned from the process, and propose improvements.
TL;DR: When creating software products, you are performing some processes. If you want higher quality in your production, then you have to be sure that your processes are managed and defined by following the above practices.
CMMI on Agile Environments
After reading the previous chapter, I can hear you grumbling “Yeah, right. Who has time for that when the stakeholders wait for a feature to go live next week/month” blah blah. Because you are “agile” so you do not have time for this “fun stuff”. Wrong!
Being agile does not mean having less time for non-practical things. You can document your work or follow guidelines without angering The Agile Gods.
In most agile environments, multiple small teams develop small components of a modular system within quick sprints. However, to produce large-scale systems, you may need more than this rapid approach because the integrations of multiple components should be planned adequately at the design and requirements stage, otherwise it is inevitable to run into big problems related to the interfaces and integration between components. Agile teams mostly skip or quickly pass this process which makes them not being preferred for large-scale projects.
CMMI helps here by providing a powerful framework that helps you to define the needs for integration of components to be built at the initial requirements and design phase. And at the end, it helps you to track and test your components through the individual sprints .
Software Capability Evaluation (SCE)
Another CMM-based framework that helps when assessing maturity and capability is the Software Capability Evaluation (SCE) model, again by the Software Engineering Institute (SEI). SCE offers a way to measure the process capability of an organization by presenting an approach to compare the organization’s standards with pre-defined ones. This framework was developed in 1994 to document the procedures developed for the Electronic Systems Center (ESC), Hanscom Air Force Base .
Long story short, the “just get the job done” approach is not to way to go in the tech world anymore. We have to first define, derive, and manage our power to get maximum efficiency and as a result, produce better quality. These tools and frameworks are here to guide you. If you are aiming for the best and don’t know how to get there, then meet your new friends.
- The Process Group. (2019, November 04). Improving Capability and Performance With CMMI V2.0 — What Has Changed? Retrieved from http://processgroup.com/improving-capability-and-performance-with-cmmi-v2-0-what-has-changed/
- CMMI Product Team. (2010, November 01). CMMI for Development, Version 1.3. Retrieved from https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=9661
- CMMI Institute. (2019, October 15). How to Truly Scale Agile Development in the Enterprise — with CMMI. Retrieved from https://cmmiinstitute.com/resource-files/public/how-to-truly-scale-agile-development-in-the-enterp
- Members Of The CMM-Based Appraisal Project. (1994). Software Capability Evaluation (SCE) Version 2.0 Implementation Guide (CMU/SEI-94-TR-005 ). Retrieved from http://resources.sei.cmu.edu/library/asset-view.cfm?AssetID=12155
- White, S. K. (2018, March 16). What is CMMI? A model for optimizing development processes. CIO. https://www.cio.com/article/2437864/process-improvement-capability-maturity-model-integration-cmmi-definition-and-solutions.html
Just Eat Takeaway.com is hiring! Click here to learn more about our job opportunities