Abstract
Achieving an equilibrium between the desire to produce more functionality and quality requirements is a challenge in most software development projects. Functional requirements are often in the spotlight because of their tangible impact on user experience and business value. But quality requirements silently underpin a system’s reliability, security, and robustness. In this article, we delve into the critical role played by quality requirements and the tension most software projects experience in managing these two types of requirements. Navigating the tension between functionality and quality is a challenge. The allure of visible functionality often overshadows quality attributes, leading to the unintentional neglect of quality requirements. This imbalance can result in costly consequences, including operational disruptions, post-release fixes, and damage to an organization’s reputation that may be caused by a security breach or a custom data privacy leak. To address this challenge, organizations must empower their technical teams to influence project priorities and actively participate in shaping product quality.
Introduction
According to a survey of agile adoption [Ambler(2008)], achieving software quality remains the main objective of 77% of the respondents. Another survey [digital.ai(2021)] also suggests that 42% of participating companies adopted agile to enhance software quality and that 46% were able to improve software quality [digital.ai(2021)]. While these figures show that some agile adopters manage to enhance software quality by using agile practices, the numbers also show that the use of agile methods does not always result in quality improvements. This is problematic, knowing the enormous economic costs linked to poor software quality. The American Consortium for Information and Software Quality (CISQ) issued a report in 2018 on the state of software quality in the US [Krasner(2018)]. The report estimates that the cost of poor software quality in the US in 2018 was approximately $2.84 trillion. It reports that about 60% of the software development effort is steered towards finding and fixing defects [Krasner(2018)]. Defects in production software can have a negative impact on the business. The same report claims that business disruptions caused by software-related defects can cost between $32.22 and $53.21 a minute [Krasner(2018)]. Software defects may continue to make their way into production. These defects are not always functional; they span across all aspects of software, including performance and sometimes failure to comply with particular standards. However, our efforts to prevent defects, resolve them, and mitigate their economic impacts should continue. This includes meticulous attention to understanding quality requirements.
The information technology (IT) and software engineering industries are not free of failures caused by poor quality requirements. The Boeing 737 MAX software issue and Healthcare.gov launch can be attributed to some extent to a lapse in quality requirements. Both crashes of the Boeing 737 MAX in Indonesia in 2018 and Ethiopia in 2019 were linked to the MACS software failure. Investigation reports claimed that the software had design and implementation issues. This case underscores accountability failures within Boeing’s software development processes, including inadequate quality assurance practices and lacking documentation. Similarly, the launch of Healthcare.gov in 2013 was marred by not only usability issues but also technical and functionality defects.
Quality requirements, also known as system qualities, are an essential component of software development that specify the attributes, characteristics, and performance criteria that a software system must have. These requirements describe how the software should behave, perform, and interact with its users, the environment, and other systems. Quality requirements include a wide range of expectations that collectively determine the overall quality of the software. Some of these non-functional expectations may include regulatory or industry compliance, performance, and code maintainability.
The role of quality requirements
Clear quality requirements help identify and mitigate risks early in the development cycle. By addressing potential issues related to performance, security, or reliability at the outset of the project and/or during the development cycles, teams can make these requirements part of their development effort. Quality requirements are also a reference point for validation throughout the development process. Development teams can use them to evaluate whether the software meets the expectations of these requirements at various stages and iterations of the development process, from design, development, testing, and deployment. This continuous validation ensures that quality remains a focus of development efforts.
Once well understood, quality requirements guide developers by offering a clear understanding of what the software must achieve beyond its core functionality. They inform critical design and development decisions related to architecture, design, coding decisions, and technology selection. For instance, performance requirements influence the choice of hardware and other infrastructure-related decisions. In the same vein, security requirements determine the implementation of mechanisms for vulnerability protection, authentication, and encryption. Quality requirements, once discussed and articulated, serve as a contract between technical and non-technical stakeholders. They enable productive discussions, helping to align expectations and avoid making inaccurate assumptions.
Navigating the tension
In software development, a perpetual tension often exists between the desire for more functionality and the sometimes overlooked, but equally important, quality requirements. Functional requirements define what the software features should be, capabilities, and user interactions. These requirements are tangible, visible, and easily understood and sought by stakeholders because they are perceived to add business value. This is always expected for this type of requirement to take center stage, as they represent features that the software is expected to deliver. However, this emphasis on functionality can sometimes come at the expense of quality requirements. Quality requirements may not be as conspicuous as functional ones, mainly because the business stakeholders, who are often not educated in the former, are more inclined to see more functionality, believing they add more value to their processes. Then, how can this tension be managed? Before we do that, let’s talk about the underpinning causes of such tension. There are two common pitfalls: the allure of functionality and the neglect of quality requirements when a project’s constraints overwhelm the development process.
The allure of functionality: Functional requirements have an inherent allure for business stakeholders. They are visible, tangible, and can be demonstrated, showcasing progress and functionality. Clients and end users often prioritize these requirements, as they directly impact the software’s utility and competitiveness. In addition, they add tangible value to business processes compared to a quality requirement like code maintainability, which is invisible and less understood by business stakeholders.
Neglecting quality requirements: Sometimes, even though the project is aware of quality requirements, it can fall victim to some constraints inherent to the project itself. Some of these constraints could be meeting deadlines and fulfilling user demands for more functionality. The latter is common in agile teams, as the product owner tends to influence the priorities of the development efforts. Teams may inadvertently sideline quality requirements under these conditions. These less visible qualities are sometimes also seen as secondary concerns that can be addressed later in the development process, especially when the pressure from business stakeholders is to deliver more features.
Overlooking quality requirements or falling victim to some projects’ constraints comes with hidden costs. Software lacking adequate performance standards, security compliance, or usability can cause expensive operational disruptions and costly post-release fixes. These repercussions can also damage the company’s reputation when they have public visibility and incur substantial technical debt.
Achieving a balance between functional and quality requirements is essential. However, this requires empowering the technical team to influence the project’s priorities and having a voice in shaping product quality. To navigate this delicate equilibrium, software development projects require a balanced distribution of decision-making across business and technical teams.
Empowering the technical team to influence project priorities may result in recognizing that those closest to the code are often best positioned to assess the implications of different requirements. By giving them a voice in influencing the product’s quality, projects tap into a valuable source of expertise that can prevent costly mistakes down the road. This empowerment isn’t about diminishing the role of business stakeholders or product owners but rather fostering collaboration and shared responsibility. By nurturing a culture where technical input is actively sought after during requirement discussions. The pursuit of functionality and quality is a shared journey. It doesn’t happen without involving developers, architects, and quality assurance experts in requirement workshops, requirement prioritization, and decision-making processes.
Achieving this balance is a testament to an organization’s commitment to delivering software that not only meets functional needs but also upholds the highest standards of quality. It’s about harnessing the collective wisdom of the technical team to guide project priorities in a way that ensures both functional and quality requirements are considered, ultimately resulting in better-quality software.
In conclusion, the tension between functional and quality requirements is an enduring aspect of software development and is not easy to resolve, even notice, or acknowledge. Functionality grabs the spotlight because it is tangible and highly sought. Quality requirements quietly underpin software’s reliability, security, and robustness. Striking the right balance between these two sets of requirements is often an ongoing exercise of self-awareness. Projects that navigate this tension with finesse, ensuring that the software not only functions as intended but also excels in terms of performance, security, and overall quality, are more successful. In this balance lies the key to delivering software that not only meets user needs but also stands the test of reliability and robustness in an ever-evolving digital landscape.
Author: Adam Alami
Adam Alami is an assistant professor with Aalborg University, Denmark. He has broad experience in information technology practices. His career began in software development, before progressing to include business analysis and project management. Involvement in major IT transformation projects has for twenty years been the mainstay of his work. His chosen fields of research fit within the broad topic of cooperative, social, and human aspects of software engineering. He has a keen interest in business analysis and contemporary software development practices. He holds a PhD degree in Computer Science from the IT University of Copenhagen, Denmark, a Master degree in Computer Science from the University of Technology (UTS), Sydney, and a Bachelor degree in Software Engineering from the Université du Québec à Montréal. Email: [email protected]. Twitter: @AdamAlamiDK.
References:
[Ambler(2008)] S. W. Ambler, Feb 2008. URL http://www.ambysoft.com/surveys/agileFebruary2008.html.
[digital.ai(2021)] digital.ai. 15th state of agile report: Agile leads the way through the pandemic and digital transformation, Jul 2021. URL https://digital.ai/catalyst-blog/15th-state-of-agile-report-agile-leads-the-way-through-the-pandemic-and-digital.
[Krasner(2018)] H. Krasner. Research report, Sep 2018. URL https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report/.