Depending on the project conditions, the complexity of the product, the professionalism of the team, and many other factors, different approaches to working with requirements are used.
When implementing simple and clear requirements, it is not necessary to create detailed specifications or to document business processes. Working with documentation takes time, especially when requirements change continuously. For throwaway products, prototypes, and an MVP, upfront design is less valuable than the speed of feedback from users.
In this case, development relies on primary (user) requirements. The customer or their representatives formulate requirements and clarify them together with the project Participants. Once the requirements are clear, the team implements them and, as a working product, hands them to the customer's users so that feedback can be formed. The cycle then repeats until all user tasks have been completed.
User Stories are one of the convenient and widely used ways to record user requirements. In short, a User Story is written in the following format:
Brevity is good, but project success depends on the quality of the requirements. Use the principles INVEST, as a checklist for checking the quality of the Stories that have been written.
Do not confuse a description of functional requirements in the Use Case format with user requirements in the User Story format — these are two very different views of software requirements. One User Story can contain several Use Cases. User Stories are not a way to structure software requirements.
You can define your own scheme for identifying artifacts, different from the one used in the system by default. To do this, open the settings of the "UID" attribute and set a formula there for calculating the default value.
As the formula for calculating the Requirement identifier, write an expression following the example from the description. Here are several variants of custom identification of Requirements:
You can form an identifier using leading zeros; for example, given the expression {Id,6}, the system forms the identifier as 000001, 000002, and so on.
The risks of developing software from user requirements are that:
The practice of developing supporting requirements helps reduce these risks.
Before implementing a User Story, while implementing it, or immediately afterwards, document the important technical decisions: UI mockups, algorithms, data models, and others. On the one hand, these system requirements will be linked to the Story and will let you implement it properly. On the other hand, over time you will accumulate structured system requirements for the whole product, which removes the risks described above.
Why is it a poor idea to write system requirements directly in the Story itself? A User Story is, by definition, supposed to be small. Completion criteria and acceptance criteria already enlarge its description. System requirements in the form of mockups (and detailed requirements for them), algorithms, and various models make the Story very bulky and awkward to work with. Moreover, finding the system requirements you need later becomes simply impossible, to say nothing of making changes to them.
Implementing a product from fragmentary and superficial ideas of its functionality can lead to technical decisions that are fast but short-sighted. In agile methods (Scrum, XP) this is called technical debt. Instead of doing it right the first time, you have to rework the system architecture that was laid down earlier. That is an extra loss of time and money.
The "cone of uncertainty" tells us that the less detailed the requirements are, the larger the error in estimating their complexity or effort. A more accurate estimate of the project budget, or of the budget for changes to requirements that have already been implemented, is possible only when the requirements have been worked out in advance and the impact of changes on them has been analyzed.
Development based on requirements (Requirements driven development, RDD) explicitly sets aside a design cycle, during which:
After the design cycle, a development cycle is organized on the basis of the development tasks that were created (Enhancements):
In some cases the project can end immediately after the design cycle, if the goal of the project was to develop the software requirements.
Development from requirements is sometimes confused with waterfall development (or development according to GOSTs). The volume of requirements being designed (the size of the increment) can be adjusted to the conditions of the project.
Requirements can be distributed across different projects and linked to each other: