I would venture to say that almost every human created system, software or otherwise, can be found to imitate nature in one way or another. Especially complicated systems, such as living systems, are frequently chosen models imitated by modern digital computer technology.
In living systems, there are requirements that must be met in order for the system to continue to exist as a living system. Take animal life for example: what must an animal have to live? food, water, air, etc. Some would say shelter as well. What if you had to choose among the things an animal must have to live and prioritize them? In other words, if you could only deliver the “must haves” one at a time, which would be first?
To me the obvious answer is air for the living animal. Without air, food and water become largely unnecessary. Air is the number 1 priority for a living animal system.
Once priority 1 is met, other priorities can begin to be met as nothing else is more important than air for the living animal. Next on this list is probably water followed by food. Now, you analysts and engineers are probably competing with each other on who can develop the longest list of needs. That’s very good.
Here’s what we need to do with that list – force rank each individual item with a priority. Yes, the most important things to the goal of the living animal is usually to continue living so, let us make sure that those things that are directly related to the goal come first.
In a software system, there are many features, many functions and many moving parts which must be designed, developed, tested, integrated, documented and deployed in order to deliver the system as envisioned by the designers. Interestingly, many designers tend to have holistic attitudes about the completeness of their vision. This is a good thing. Unfortunately, the reality of limited resources when constructing a software system come to bear as an in-congruent reality that must be dealt with.
While the desire of the designer and other specifiers of requirements is to have all that they desire delivered immediately without error, the reality is that this usually never happens. It is generally because the designers and specifiers have little to no experience in the actual means or process of software construction. This too can be a good thing.
A software system is an expression of logic, reason and art that is intended as a tool to be used to accomplish one or more goals. In the context of business software, this is usually to make some information management process easier or more efficient. In the process of software system construction, as in the process of the construction of many other things, unexpected conditions present themselves. These unexpected conditions consume resources, the resources intended for the construction of desired features and functions. In a world of limited resources, one must choose how the resources will be consumed by what will get done and not consumed by what will not get done. These choices are driven by the system essential goals – the purpose of the system and the reason for its existence.
Forced ranking is a business tool for managing limited resources. This becomes especially useful in software projects for scheduling features and functions, prioritizing bugs, scheduling resources for work activities, selecting infrastructure and organizing testing and deployment activities.
All forced ranking of business requirements must be business driven. Business decisions led to the project to create the software system. The software system is a business tool. The leaders of the business and the project are ultimately responsible for communicating to the team performing software construction what they want built first, second and so on.
This process of forced ranking certainly is not new or unfamiliar to many. This process is integrated into several modern “Agile” methodologies namely Scrum, which incorporates forced ranking into the “backlog grooming” process. It is also incorporated indirectly in the “minimum viable product” or MVP concept.
The benefits of forced ranking are largely for helping to manage limited resources towards achieving the essential parts of a system to meet primary goals. To begin a forced ranking exercise, one must consider what the system is, who it is for and what is absolutely necessary for the system to exist. Once this is known, we can consider the living animal system as a model and determine which feature and functions constitute the “air” which are the “water” and which fall under food, shelter, etc.
A software system is a human art form which imitates nature. The development of these systems mimic evolutionary processes in interesting ways. Very few natural systems are all or nothing, most come down to some and most, many and few, or first and last.
Software requirements and construction is not all or nothing. Software is some now, some later, some more later. We must be able to know what is essential and what is not so that we can create a viable start on which to evolve capability. This is how software is made.