The Five Orders of Ignorance framework helps us understand different levels of ignorance and what’s needed to reduce it, especially in software development.
- **0th Order of Ignorance (0OI)** or **Lack of Ignorance**. Represents complete knowledge. You know something and can demonstrate it. In software development, it indicates that the problem is fully understood and correctly implemented. At 0OI, you have the answer. This is the realm of [[Known knowns]].
- **1st Order of Ignorance (1OI)** or **Lack of Knowledge**. Occurs when you recognize that you don't know something. This involves known variables whose values are unknown. A good question often leads to finding the answer. This type of ignorance can be remedied through learning or acquiring the missing knowledge. At 1OI, you have the question but not the answer. This is the realm of [[Known unknowns]].
- **2nd Order of Ignorance (2OI)** or **Lack of Awareness**. You don’t know that you don’t know something. This is the real problem area where neither the question nor the answer is known, common at the start of projects, leading to unknowns and variations in project estimates. This explains phenomena like the [[90-Percent-Done Syndrome]], where progress is misjudged due to unknowns, resulting in rework cycles and late-phase surprises. This is the realm of [[Unknown unknowns]].
- **3rd Order of Ignorance (3OI)** or **Lack of Process**. You don’t know how to find out what you don’t know. This involves lacking an efficient process to discover [[Unknown unknowns]], representing a gap in methods to resolve these unknowns within the available time. Software development methodologies are often 3OI processes that help identify areas of ignorance (2OI) but do not provide answers. Methodologies frame questions and offer discipline but cannot deliver the solution.
- **4th Order of Ignorance (4OI)** or **Meta-Ignorance**. You are unaware of the concept of the Five Orders of Ignorance. Once you understand these orders, this type of ignorance is resolved. Though not as critical as 2OI and 3OI, it helps in understanding the recursive nature of knowledge and ignorance.
In system development, much of the effort focuses on reducing 2OI, with 3OI processes used to illuminate 2OI. These processes typically generate either 1OI (a question) or, less frequently, 0OI (an answer). The ultimate goal in system development is to resolve ignorance down to 0OI, achieving complete knowledge.
In reality, software development involves using methodologies to uncover what is unknown, rather than directly solving problems. The process of resolving these orders of ignorance leads to a functioning system. This framework helps categorize knowns and unknowns, estimate the likelihood of unknown unknowns, and appropriately position processes and methodology within system development.