Link: The five orders of ignorance
Software development is not as much about producing code as it is about encoding knowledge.
Prototyping is the act of discovering what you don’t know. As you are prototyping, you may be encoding false information (referred to as “unknowledge”). As you learn more, you correct a lot of that unknowledge, but there may still be some of it that remains at the end (invalid states or unused functions for example). This is why, after prototyping, you should rewrite the prototype from scratch. All of the knowledge will be included and all of the unknowledge will be excluded.
There are five orders of ignorance (using 0-based indexing):
- 0th Order Ignorance (0OI) - Lack of ignorance. You can demonstrate that you have knowledge in a tangible way. For example, you can demonstrate that you know how to sail given a boat and a lake.
- 1st Order Ignorance (1OI) - Lack of knowledge. You don’t know something and can identify what you don’t know. For example, you know that you don’t speak the Russian language.
- 2nd Order Ignorance (2OI) - Lack of awareness. You don’t know what you don’t know. For example, after learning the single crochet stitch, you may think that you know all there is to know about crocheting. You don’t realize that there’s also a double, half-double, and treble crochet stitch as well.
- 3rd Order Ignorance (3OI) - Lack of process. You don’t know how to discover what you aren’t aware of. For example, if you want to learn calligraphy, you may not even know where to start. You are completely unaware of resources that can help you to identify the things that you don’t know, so you can’t get started trying to discover what you need to learn.
- 4th Order Ignorance (4OI) - Meta Ignorance. You don’t know about the orders of ignorance.
Generally, the main focus of the software development process is 2OI and 3OI problems.