Software requirements are the cornerstone of Software development, without a good understanding of the problem domain, we do not know if the software will function as supposed to for that target audience.
Requirements make up technical and functional requirements sets; technical requirements deal with performance, latency, storage and other technical requirements that can influence operation of software. Functional is asking the questions of what and how the software should work and for whom?
The paradigm we use is from Agile, there are Actors (Who) and then there are activities performed with a specified outcome (What, and Why). These “Stories” are then placed on a Kanban board from which individual tasks need to be distilled.
These Tasks are actual to-do items, e.g. Install a server, install Docker, deploy Containers with Software. These were 3 tasks that could cover 1 Story . Albeit not a very well defined one in terms of scope.
These Stories and tasks are usually iterative in nature, hence Agile. We establish a part of the problem that is known, other parts of the problem are not well understood yet. Then we first define and build what we know, and add as we’re doing these iterations.
This loop allows for customer feedback and a much regular interval, ensuring higher quality software end product than the traditional “define everything, build, and show it” method.