Good software requirements do not begin with a list of screens. They begin with a clear account of the business problem, the people involved, the information they use and the decisions the system must support. The purpose of requirements gathering is to turn that operational knowledge into a shared basis for design, estimation, testing and acceptance.
The process should be detailed enough to expose risk without trying to predict every future change. A useful requirements package explains what must be true for the project to succeed and where further decisions are still needed.
1. Define the problem and the intended outcome
Start by describing the current problem in observable terms. “We need a new CRM” is a proposed solution. “Three teams maintain separate customer records, updates are copied manually and managers cannot see an agreed pipeline” is a business problem.
Record the outcome the project should create. Examples include reducing duplicate entry, giving customers a self-service route, shortening an approval cycle or replacing a system that can no longer be supported. Add the measures or evidence that will show whether the outcome has improved after launch.
2. Set the scope and boundaries
Define which processes, teams, locations and user groups are included. Also state what is outside the first release. Clear exclusions prevent an early requirements exercise from becoming an unlimited list of desirable features.
Useful scope boundaries include:
- the first and last step of the process;
- the systems that remain the source of record;
- the teams and external users included;
- the data that will and will not be migrated;
- the integrations needed at launch;
- the work deliberately deferred.
3. Identify stakeholders and decision owners
Requirements are not gathered from one senior stakeholder alone. Include people who perform the work, supervise it, support customers, manage the data and operate the existing tools. Different roles see different failures and exceptions.
For each area, name the person authorised to make the final decision. Workshops can reveal disagreement; they cannot resolve it unless decision ownership is clear.
4. Observe the current process
Interviews explain what people believe happens. Observation and real examples reveal what actually happens. Review a sample of records, forms, spreadsheets, inboxes and reports. Ask users to show a normal case, a difficult case and a recent mistake or delay.
Document:
- the trigger that starts the work;
- each activity and decision;
- the role responsible;
- the data read or changed;
- handoffs between people or systems;
- waiting time and workarounds;
- exceptions, rework and escalation.
Do not automate a poor process without asking whether steps can be removed, combined or clarified first.
5. Describe the future process
The future process should show how the proposed system changes the work. Keep the first version at business level: roles, decisions, data and outcomes. Detailed interface design can follow.
For each step, ask:
- Who can start it?
- What information is required?
- Which rules determine the next step?
- What can go wrong or require manual review?
- Who is notified?
- What is recorded for reporting or audit?
- How is the step accepted as complete?
6. Define roles and permissions
Job titles are not enough. Define roles according to actions and data access. A manager may approve records for one region but only view another. A customer may edit a draft application but not a submitted one.
Create a role matrix covering view, create, edit, approve, export, delete and administration. Include sensitive fields and separation-of-duty rules. Permission requirements should be testable with named example accounts.
7. Map data and ownership
List the important records, their source, required fields, owner and lifecycle. Clarify which system is authoritative where the same information appears in more than one place.
| Data question | Why it matters |
|---|---|
| Where is the record created? | Prevents two systems from competing as the source of truth. |
| Who may change it? | Defines permissions and accountability. |
| Which fields are required? | Supports validation and migration planning. |
| How is duplication identified? | Reduces conflicting customer or transaction records. |
| How long is it needed? | Supports retention, archive and deletion decisions. |
| How is it exported? | Supports reporting, migration and supplier exit. |
8. Record integrations and external dependencies
For every integration, define the business purpose, data exchanged, direction, timing and failure behaviour. “Integrate with the finance system” is not enough. State which records move, when, who can correct a failure and how the two systems are reconciled.
Include dependencies outside the software: supplier access, internal approvals, data-cleaning work, hardware, identity management and availability of subject-matter experts.
9. Capture functional and non-functional requirements
Functional requirements describe the actions and outcomes the system must support. Non-functional requirements describe the conditions needed for reliable operation, such as performance, recovery, accessibility, security and support.
Connect both to the process. Requirements should not be a catalogue copied from another project. Prioritise the qualities that protect the most important workflows and data.
10. Include exceptions and failure paths
Most operational complexity sits outside the ideal path. Ask what happens when information is missing, an approval is rejected, two users edit the same record, an integration is unavailable or a deadline passes.
For each exception, identify whether the system blocks the action, saves a draft, creates a task, notifies a role or allows an authorised override. Record the reason when an override is used.
11. Prioritise by outcome, risk and dependency
A useful priority is not simply “important”. It explains why an item is needed now. Consider:
- whether the core process can operate without it;
- whether it protects data, access or financial control;
- whether later features depend on it;
- whether a temporary manual workaround is acceptable;
- whether delaying it creates avoidable migration or rework.
Keep a separate list of future ideas. Mixing them into the committed scope makes estimation and acceptance harder.
12. Write acceptance criteria and open decisions
Each important requirement needs evidence. Acceptance criteria should describe the user role, starting condition, action and expected result. Include negative conditions, permissions and failure behaviour where they matter.
Not every question will be resolved during discovery. Maintain an open-decision log with an owner, required evidence and decision date. Unresolved assumptions should be visible in the estimate and plan.
What the requirements package should contain
| Artefact | Purpose |
|---|---|
| Problem and outcome statement | Explains why the project exists and how success will be judged. |
| Scope and exclusions | Defines the delivery boundary. |
| Current and future process maps | Shows roles, decisions, handoffs and exceptions. |
| Role and permission matrix | Defines access and responsibility. |
| Data and integration map | Shows records, ownership and dependencies. |
| Prioritised requirements | Provides the basis for scope and estimation. |
| Acceptance criteria | Defines how delivery will be verified. |
| Assumptions and decision log | Makes uncertainty visible. |
Questions to put to a supplier
- Which requirements are still assumptions rather than confirmed facts?
- Which areas are likely to change the estimate most?
- How will process, role and data decisions be traced into the delivered system?
- Which requirements need a prototype or technical investigation?
- How will changes be recorded after discovery?
- What evidence will be produced for acceptance?
Practical next step
Choose one important end-to-end process and document it fully before trying to describe the whole system. If the team cannot agree its trigger, roles, data, exceptions and completion criteria, the project is not ready for a reliable estimate. Resolving that one process often reveals the method needed for the rest.