Knowing the requirements of software is very important. They are the foundation of clean code and programming principles. This means that they help you understand programming principles much better. They also help you create your own solutions, even when programming principles don’t clearly point to one.
On the other hand, if you don’t know about them, then you may be applying programming principles blindly rather than deliberately. Additionally, you may take things too far and apply programming principles to the extreme, to the detriment of your project.
The definition of the word "software" tells it all.
"Software" is a combination of two words:
"Soft" means malleable, easy to change, etc. In terms of programming, it means that the code you produce must be easy to change.
"Ware" means a product, goods, etc. In this case, the product you produce is a system of code. Obviously, as with any product, it must work correctly.
Both of these words perfectly describe the requirements of software from a coding point of view:
- The product is a system of code, which must work as intended.
- It must be easy to modify.
Explanation for the requirements
The "ware" part should be pretty clear. Obviously we produce systems of code and the code has to work as intended.
The "soft" part might not be immediately obvious.
Why is it that code needs to be easy to change?
It’s because as we work we change code all the time, for many reasons.
- Requirements change all the time.
- We constantly revise and modify the code during development.
- Software needs constant maintenance and improvement, both in terms of bugs and new features.
So since code needs to change all the time, we should make it easy to change to make our lives easier.
In more detail, here’s each reason with a bit more explanation:
Requirements change all the time
We constantly revise and modify the code during development
This is how we work.
If we could design the code upfront perfectly and then just write it, we would be done significantly faster. We would also probably use waterfall and everything would be much better. Unfortunately, it’s not possible for us to do that.
Experience has shown us that working in iterations is much more effective. This is also what agile advocates. It’s just the nature of our work that we constantly need to revise our code and modify it.
Gall’s law also supports this. It essentially states that we can’t create a (propriotary) system of code in one go, we have to continually revise it and build it up slowly.
Software needs constant maintenance
Even after initial development is finished and the stakeholders have accepted the product, software still needs constant maintenance and improvement. See software evolution.
This means that we have to continue to make changes to the code, potentially indefinitely.
The requirements of software are:
- It should work as intended.
- It should be easy to modify.
If you want to write good code and apply programming principles effectively, you should probably remember these requirements.