Necessary and Sufficient
In examining a problem to be solved it is useful to understand and use the concepts Necessary and Sufficient. The words themselves are so common that they hardly need much explanation. In the context of problem solving a necessary factor means that factor must be present. Sufficient means that the factors we have identified are together sufficient to accomplish the action or activity. For example what is necessary and sufficient to start a campfire? We would need fuel - normally wood. We would need some means of lighting the fire - matches , a lighter or the equivalent. Each of these items is necessary in order to make a campfire. Are these two items sufficient by themselves? No. A further necessary condition is that the wood must be dry or it will not burn. So actually the necessary condition is not wood but dry wood. These two items and one condition of one item are together sufficient to light a campfire.
Likewise in theory of constraints we have necessary conditions. And when we know all the necessary conditions then together they need to be sufficient to accomplish the action. Let's look at a software programming example. We want to calculate the monthly payment on a loan. What are the necessary conditions. At what point is what we have sufficient to accomplish the writing off the routine.
Calculating a Loan Payment
With the example of calculating a loan payment we need three pieces of information. They are:
- The amount of the loan.
- The current interest rate.
- The duration of the loan.
We need each piece of information and we need all three pieces in order to complete our calculation.
To express this in another way, each of the three datum is necessary to obtain a correct result for the caculation. None of the three datum, by themselves, is sufficient to obtain a correct caculation result. Only all three datum together are sufficient to obtain a correct calculation result.
On one level expressing things this way may seem like extra work for little or no benefit. Such is not the case. By expressing things this way we have a crystal clear picture of the requirements of the situation. We know exactly:
- What is necessary - a list of all the datum that is needed for the operation, and
- What is sufficient - an understanding that the data which we have is complete for the purpose at hand.
For simple tasks, or for tasks with which we are familiar, because we have done them many times in the past, this level of analysis not necessary. For things we are doing for the first time, or for things which we do not do frequently, we need to do the analysis so that we know we are ready to proceed. Especially in the case where what we are doing has a large cost, we want to be sure we have the precision to ensure that we get it right!
In fact, in programming if we are creating good reliable code, we will plan our program to prevent the processing from occuring until we have verified this. We then know that:
- we have all the necessary data entered.
- each datum entered is the correct kind of data.
Note: It is often impossible to check that the data is absolutely correct, but we can at least verify the two conditions listed above. This also allows us to code so that our program does not crash because the user entered invalid data.