A software requirement is a capability or condition that must be met in order for software to solve a real-world problem. More formally, a software requirement can be defined as a feature or non-functional constraint that the software must provide to fulfill the needs of users and other stakeholders. Requirements represent the core functionality that software must deliver in order to be useful and meet business process or user goals.
Examples of common requirements in software systems include:
Requirements form the bridge between business objectives and software implementation. They serve as the foundation for all design, development process, testing, and documentation activities. Clear, testable requirements are crucial to building software that meets stakeholder needs.
Software requirements fundamentals can come from a variety of sources, but generally fall into two categories – business stakeholders and technical stakeholders.
Business stakeholders are people who represent the business, organizational or user interests. This includes:
Technical stakeholders are involved in the software development process itself. This includes:
Aligning requirements from both stakeholder groups is key to effective requirements engineering in the software industry.
Some common examples of software requirements across different application domains include:
E-commerce site
Mobile banking app
Embedded system
Game application
Requirements analysis is the process of examining requirements to improve quality, uncover issues, and gain a deeper understanding of what stakeholders want and need. Why do we analyze requirements? It serves several important purposes:
Analyzing requirements reduces risk by catching problems early when they are easiest to fix. It also sets the stage for developers to build the right solution.
High quality requirements often exhibit the following properties:
Analyzing requirements involves assessing them against these desired properties and making improvements wherever gaps exist.
It is also important to balance cost versus effectiveness. Balancing cost versus effectiveness for quality of service requirements involves economic analysis. The goal is to find the point where further increasing a non-functional requirement provides diminishing returns on investment.
Each incremental improvement in performance comes with an associated cost. The value delivered also increases with higher performance, but at a decelerating rate. There comes a point where the cost of further enhancement outweighs the added value it would provide.
For example, improving uptime from 99.9% to 99.99% costs much more than going from 99% to 99.9%, while yielding little extra value in availability. Similarly, developers should determine the response time and scalability needed to satisfy users rather than over-engineering for unlikely scenarios.
By modeling cost and value curves for key quality attributes, engineers can optimize requirements to find the ideal economic balance between capable enough software and excessive capabilities that users won’t actually leverage.
It is also important to identify and address conflicts in requirements.
When requirements from different stakeholders’ conflict, resolution usually requires consultation and negotiation. Letting stakeholders air their perspectives and priorities helps discover win-win solutions.
For example, marketing wants broad platform support while engineers seek minimal target platforms. Conflict arises but aligning on core platforms and making others lower priority or future work may address both viewpoints.
In cases of irreconcilable disagreement between groups, weighted priority voting, ranking methods or cost-benefit analysis provides data to make informed trade-off decisions.
When conflicts involve too many requirements for resources, deferred requirements aren’t discarded but go into a backlog to prioritize for future releases. Focused development on tightly scoped versions avoids creating overly ambitious software.
Handling conflicts collaboratively, backed by data, helps navigate tricky trade-offs between stakeholders to craft successful requirements.
Requirements specification is the process of documenting requirements in a structured way for review, communication, and implementation. Well-specified requirements exhibit qualities like:
Proper specification transforms requirements into an authoritative reference for design, development, and testing activities. It provides clarity, reduces confusion, and prevents misinterpretation of stakeholders’ needs.
A critical step is determining how the requirements for a project should be determined.
Determining requirements for a software project involves several key steps:
Different development approaches execute these steps at different points in the project lifecycle, but all are necessary to gather well-analyzed, validated requirements as the foundation for what software gets built and how.
Sometimes you might ask yourself if you should document your requirements. This often seems clear cut, but whether and how to document requirements depends on many contextual factors:
Even on Agile projects, high-level user stories provide lightweight but useful specifications. Capturing the rationale behind requirements has long-term value even if details evolve further. The right documentation discipline for each project provides enough specification without over-engineering documentation.
Another topic area to consider are the various approaches to acceptance criteria-based requirements. Two common approaches to acceptance criteria-based requirements are:
ATDD involves collaboratively defining test cases upfront that validate customer requirements before coding starts. Tests form the requirements specification. Code then gets written to pass the defined test cases. ATDD ensures developed features demonstrably meet stakeholder needs.
BDD uses a format of User Story – “As a [type of user], I want [some goal] so that [benefit].” Detailed scenarios define acceptance criteria. For example: Given [preconditions], when [action occurs], then [expected outcome]. BDD focuses on expected behaviors from a user perspective. The language also promotes shared understanding between technical and non-technical stakeholders.
Acceptance criteria approaches like ATDD and BDD lead to well-defined, unambiguous requirements that closely align with business objectives. Automated testing verifies software meets specifications, preventing defects.
Read more about software requirements specifications in the Software Engineer Book of Knowledge (SWEBOK)
DOWNLOAD SWEBOKWhen developing requirements for a software system, practical considerations such as available resources, capabilities of target platforms, compatibility with existing systems, organizational policies, and regulatory standards are vital. A realistic assessment of these factors will help shape requirements that are feasible to implement within project constraints. Requirements that ignore practical limitations may prove impossible to deliver.
Requirements for real-world software systems tend to exhibit some key characteristics:
These factors make requirements engineering quite challenging. No single pass through requirements activities will be sufficient for most projects. Instead, expect progressive elaboration of an evolving, complex requirements landscape.
Inevitably, any project has real world constraints. How do you choose what requirements to prioritize?
Choosing which requirements to prioritize involves assessing each requirement against criteria such as:
Based on these factors, requirements can be ranked as high, medium or low priority. High priority requirements then get addressed first in implementation. Assessing both benefit and cost is key to maximizing return on investment.
One approach to requirements that is commonly used is the Kano Model. The Kano Model recognizes that user satisfaction depends on fulfilling two types of requirements:
Understanding this distinction helps prioritize requirements that eliminate pain points over those that simply raise satisfaction higher. Eliminating dissatisfaction provides greater benefit than achieving high satisfaction. The Kano Model leads to more thoughtful prioritization by considering satisfaction and dissatisfaction separately.
For software products aimed at end users, social media can provide a valuable window into user needs and desires. Monitoring popular requests, complaints, and discussions on social platforms can reveal requirements that may be tacit or difficult for users to articulate directly. Social media analytics can complement traditional requirements gathering by uncovering what users want but may not think to ask for. However, care must be taken to distinguish widespread needs from niche requests. Trending topics on social media may distort perceptions of what capabilities matter most to the broader user base.
Tracing requirements can also be useful to a project. The prices of requirements tracing maintains links between related requirements and other development artifacts like design, code and test cases. Tracing supports essential development activities:
Requirements tracing provides key insights needed to control complexity as software systems evolve. The return on investment is highest for mission-critical systems where safety, security and accountability matter most.
Software requirements are a crucial foundation of any successful development project. They represent the needs and desires of end users, and guide developers in building the right product. However, requirements management is filled with challenges. Stakeholders often have difficulty articulating their needs clearly. Requirements exhibit interdependency, ambiguity, volatility and conflict. Meanwhile, real projects involve many types of complex, shifting requirements.
To address these difficulties, requirements must be systematically elicited, analyzed, specified, validated and managed across the project lifecycle. Key techniques include stakeholder analysis, interviews, prototyping, and acceptance criteria definition. Prioritization based on business value and development cost focuses efforts on high return requirements. Tracing links requirements to downstream artifacts, enabling impact analysis. Careful specification and documentation provide a touchstone as needs evolve. Following proven processes helps deliver software that meets stakeholder needs within the typical constraints of budget and schedule.
Read more about software requirements specifications in the Software Engineer Book of Knowledge (SWEBOK)
DOWNLOAD SWEBOK