System design is the evolution of information punctuated by decisions, decisions that are based on uncertain and evolving estimates from agents, web searches, simulations, tests, experience, or wild guesses; all tempered by conflicting human values, estimates and beliefs. The uncertainty creates risks with every decision made, regardless of whether the decision is focused on the architecture of the system, the relationships of the sub-systems, or the configuration of code, parts and assemblies in the sub-systems.
In this essay, I will discuss four “Kinds” of decisions. Decisions of the 0th Kind are informal, based on intuition or single point analysis. Decisions of the 1st Kind use a structure to help explore the decision-space and then test the results to investigate uncertainty. Those of the 2nd Kind are built on the assumption that uncertainty is a variable that permeates all information, not an after-thought. Finally, Decisions of the 3rd Kind are adaptive, fusing man and machine, understanding the current situation and past decisions in context, and tracking the inherent risks faced in the current situation. All four types will be developed here, but in practice most decisions are made using 0th Kind logic; mature organizations utilize the 1st Kind for major decisions; few use the 2nd, and the 3rd is glimpse into the future.