The world’s dependence on software is rapidly increasing and so too is the need for quality coding and systems development. In fact, $3.61 is the technical debt of a line of code in a typical application – an average of $1m for a system as a whole1 – putting pressure on organizations to make every line of code count. In addition, 52% of debugging effort is spent on complex defects, which account for only 8% of all defects.2 The quality of software coding has a direct impact on costs and time to market. More major businesses and industries are being run on software and delivered as online services – from movies to agriculture to national defence.3 Better quality and accountability in software development is key and it is increasingly vital that individuals and organizations ensure that they have a fully developed and certified skillset to achieve the best quality possible.
Organizations face challenges around maintaining code. When it becomes necessary to change or update code, organizations need to understand what the code does in order to be able to change it. The more complex the code is — and embedded code is often highly complex — the more time-consuming the process of changing and updating it successfully gets. The adaptation of systems to meet evolving requirements or simply to fix bugs becomes so much more onerous when code is of poor quality. This results in increased time to market or a long wait for users for bug fixes, rendering the operation of the system sub-optimal in the meantime. During the initial development process, if code is not of high quality it may not be possible to adapt it to changing requirements quickly, causing delays to the project.
For many years the focus was on the process around the system or on the way requirements were provided. The elephant in the room was the system itself. No one was focusing on the quality of the system. Software systems were viewed as black boxes and embedded systems especially so. Organizations did not question the role of the software coding in delivering requirements or causing issues, instead focusing on fixing issues around it. But if the system is fundamentally of low quality it is an impediment to improvement. Now, even at senior management level, there is recognition that issues must be addressed at the application and embedded software level as well as with the surrounding infrastructure.
The focus needs to be on the technical quality of the system, particularly for embedded systems. If this is not up to scratch there will be wide-ranging repercussions. There is a fundamental requirement for a high quality technical system that can be easily adapted and is easy to test. A high quality system is not necessarily a 100% perfect system that will be forever bug-free. However, the higher the technical quality of the system, the more flexible it can be in the future.
A high quality software system is like a professional footballer. A highly trained, match-fit professional footballer will have the skills and fitness to perform throughout a 90-minute match. Despite the best training it is still possible for professional footballers to experience injuries, make mistakes or fail to score a goal but high quality training mitigates that risk and in most cases the footballer will perform well. It is the same for high quality software systems.
Better code is cheaper
Poor quality software can cost an organization dear. Research4 indicates that system enhancements or bug fixes can be implemented in 66% less time in a system of good quality compared to a system of poor quality. However, it is possible to avoid the expensive mistakes that many organizations are making if all the relevant stakeholders are engaged and buy into the need for quality in all processes – from gathering requirements from end users through to development of the system. Stakeholders might include client business users, top management, testing teams and end user customers. The infrastructure around the software and the testing need to be robust, high quality and standardized.
Software development should be standardized in the same way that processes in other sectors are standardized. The automotive sector has standardized building cars. The construction industry has recognized certified processes for ensuring it designs and build houses that meet all the important criteria and follows established rules and guidelines so that a robust building is created that will stand the test of time. It should be the same for the software engineering industry.
The drivers for certification
The wider software sector has a poor track record in comparison with other major production sectors. Only 64% of projects meet their goals5 and 70% of companies report having at least one failed project in the last year6. Imagine if 70% of building projects failed. There is a wide variation in the success rates of software development projects – high-performing organizations complete 89% of projects successfully, while low performers only complete 36% successfully. Low performers waste nearly 12 times more resources than high-performing organizations7 .
Certification in improved quality in software development results in greater accountability and better reporting in the development cycle. Projects often fail not because the software engineering team is not doing a good job but for many other reasons. Requirements may not have been scoped correctly, the team may not have the right resources to test the system effectively or the infrastructure may not be adequate. Software developers who are in fact doing a good job are protected from situations where they end up unfairly taking the blame for issues elsewhere in the process. By introducing clear reporting aligned to certified best practice to support quality and accountability, the organization can get a better understanding of the issue and make a more informed decision about how to address problems.
Certification can support a positive process of improvement. In the first instance, developers may feel threatened by any attempt to formalize and define quality but in time this can become an integral part of software development. Software developers generally appreciate any opportunity to develop their skills in a fast changing sector and most software developers will welcome the introduction of ‘technical quality’ as a non-functional requirement for the delivery of a system. Transparency around what the organizational demands are for technical quality can support professional development.
Getting software right
Many of the principles that underpin software development quality are well known. More often than not software development teams will follow at least some of these principles but the issue is that they do not practice all of the best practices or principles all the time. There are gaps and this is where problems creep in.
Often there is an issue of data overload and the project manager must sift through lots of irrelevant updates to assess what is key and what requires action. Software developers who have achieved certification in development quality methods will have a much clearer idea about what information they might usefully share with project managers as the project progresses.
The key attribute of most organizations’ systems and processes is people. Improve developer skills and embed best practice in quality systems development and the systems and software will improve and become more adaptable, providing the value that is expected. The key is to apply a best practice approach all the time, including among others:
- Keep units of code short. This may be only 10 or 15 lines of code but best practice is to address code quality in very small units such as these. The bigger the unit of coding gets the harder it is to understand it and test it.
- Avoid repetition. The less repetition there is, the more chance of avoiding repeating errors through the system. When changes need to be made, the number of places where code needs to be altered is minimized.
- Maintain certification in a quality approach for software developers and development teams – as well as improving business outcomes, staff development is motivational.
One large organization that implemented certification in software development quality saw clear benefits. One month before ‘go live’ the client introduced a major change in requirements. As the software developed to date was of high quality it was easy to incorporate the changes needed without adverse effect on the solution, still in time for the original launch date.
The recipe for successful software maintainability has two key ingredients – a generous dash of improvement in best practice coding at individual level, complemented by baked-in software improvement at team level. Using a certified approach to quality, software development teams can identify poor quality systems and work through a process to improve quality. As they begin to see real improvements in the code and subsequent improvements to their workload, the team becomes more engaged in taking a quality-led approach, improving their working methods and creating a virtuous circle. The business will benefit from fewer project failures and high quality system development outcomes that are much more sustainable, adaptable and fit for purpose.
1 Deloitte University Press, Tech Trends 2014 – Inspiring Disruption http://dupress.com/wp-content/uploads/2014/02/Tech-Trends-2014_FINAL-ELECTRONIC_single.2.24.pdf
2 Dennis Bijlsma, Miguel Alexandre Ferreira, Bart Luijten, Joost Visser: Faster issue resolution with higher technical quality of software. Software Quality Journal, 2012
3 Wall Street Journal http://www.wsj.com/articles/SB10001424053111903480904576512250915629460
4 Dennis Bijlsma, Miguel Ferreira, Bart Luijten, and Joost Visser, Faster Issue Resolution with Higher Technical Quality of Software, Software Quality Journal, 2011
5 Project Management Institute: Pulse of the Profession 2015: Capturing the Value of Project Management 2015
6 KPMG New Zealand: Project Management Survey 2010
7 Project Management Institute: Pulse of the Profession 2014 – The High Cost of Low Performance