The software can be described from different points of view. The best procedure for our tasks is to consider software as a result of the human's activity. To simplify our model we'll speak only about the mental activity. We won't investigate such things as the speed of typing or the number of errors by drawing a diagram.
In other words our primary subject is the process in the human's head. There are many models describing it too. Let's make or model maximal simple and maximal applicable to solve real problems. We get out all activities that can be made by a computer and all human's activities that aren't bound with the information. The rest is the human's ability to make decisions.
There is a principal difference between solution and decision. The solution can be found, if a person has a task to solve, all information needed and a method to apply. In case of decision a human may or may not have enough information, appropriate method and even the task itself. He can have even an information conflict, where facts he knows demand quite different decisions. To find a solution one can use formal or empirical methods. To make a decision a human or a group of people must use a mixture of knowledge, experience and intuition.
We won't consider the chemistry of the process of the decision here. Let's use the following simple black box model:
We consider a simplified model. In our model the software is the result of all decisions about software.6 The word ``decision'' will be used below in meaning of the result of a decision, not of the process of making it.
In general the decisions about software are hierarchical and sequential. The first and main decision is the decision to start a software project. All other decisions are depended from it. In a real project some decisions are independent, some can be made simultaneously. We haven't any method to prove such facts. To simplify our model we don't consider this problem now.
For instance in our model the decision to code an operator in a function can be made only after one have decided which function must be coded and which programming language must be used. The decision to code a class member function can be made only as a result of the decision to make this class. The decision to use a class in one module cannot be made without the decision to make this module, etc.