“There are known knowns. There are things we know that we know. There are known unknowns. That is to say, there are things that we now know we don’t know. But there are also unknown unknowns. There are things we do not know we don’t know.” — Donald Rumsfeld
I was first introduced to the concept of unknown-unknowns in my work as a developer. During a discussion about an upcoming project, one of the developers said that we should take into account the number of unknown-unknowns we could face. We were diving into new territory, which meant we were sure to encounter more unknowns than we were used to. The project involved higher risk than usual.
The concept of unknown-unknowns has a lot of application in the world of IT, but I have a better (and more fun) way of explaining the concept using the competitive cooking show from across the pond: The Great British Bake Off.
This guy’s reaction to making a perfect Genoise sponge is how I look if my code works the first time.
There are three challenges in every episode of this competition, and each challenge tests the skills of the contestants on the episode’s theme:
- Known-known: The episode starts with the Signature Challenge, which allows the bakers to make something they are known for making and have hopefully cooked many times. I consider this challenge to be made out of mostly known-knowns. There is small risk of things going horribly wrong because of unknowns.
- Known-unknowns: The Showstopper Challenge is more challenging because bakers are forced to push the limits of the theme and their abilities. Similar to the Signature Challenge, they have a week to prepare and test their recipes. Contestants love to gamble here, trying things they haven’t done before, but they often fall victim to the pressure of known-unknowns.
- Unknown-unknown: The Technical Challenge is my favorite because, each week, the contestants have no idea what dish they will be tested on. The hosts of the show, Paul and Prue, take sadistic pleasure in choosing a strange and esoteric recipe, which contestants must duplicate without even seeing. Contestants are all given minimal instruction, identical ingredients, and a time limit. No one gets to see a picture of the finished product.
The Technical Challenge to make a Le Gateau Vert stuck with me, mostly because it was an entirely green cake, but also because of how each contestant handled it.
Making Le Gateau Vert challenged the breadth of contestants’ knowledge. Paul remarked about the challenge that it was “about the basics and it being done well.” This task seemed anything but basic, but if you broke the recipe down into its basic elements, any seasoned baker would know how to put this together but only if they had done the work in discovering their unknown-unknowns.
In this challenge, one of the big unknown-unknowns for a couple contestants was that egg-whites don’t fluff up as well without a stand mixer, and including even a drop of yolk would destroy those desirable stiff peaks. This mistake put said contestants dead last.
The winner of the competition said Genoise sponge was his “favorite sponge to make.” He had a deeper understanding of the most important component before the competition started, giving him an advantage. Even though he’d never made Le Gateau Vert before, he had done other similar tasks in the past. His pre-existing knowledge shone in the montage of all the bakers giving their best guesses for baking time. Other bakers looked unsure and hesitant when giving their baking times ranging from 13 to 20 minutes, but the future winner declared in a quiet, confident voice, “18 minutes.”
While binge-watching this show, I asked myself, “How do the winners of the technical challenges know all of this? When did they make these discoveries?” However, I knew that I underwent similar feats in my day-to-day life as a programmer: Success is all about whittling down the list of known-unknowns and unknown-unknowns.
Known-unknowns are easy to tackle. Just keep a list of things you don’t know but have heard of, and then do your research. If you hear buzz around some terms or programming techniques (especially when you’re reading job requirements for desirable companies), do research on it. Try it. Make the unknown known to you.
For example, the Docker container platform generated a lot of buzz. IT conferences that I went to had one or two seminars on how to use it effectively. I saw it pop up as an option for installing server software tech I wanted to try. I decided to dive in and use it extensively, learning why it was useful and what it could be used for. I turned a known-unknown into a known-known.
The unknown-unknowns, on the other hand, are harder to pin down because they are ultimately unknowable. In my work, I’ve gained an instinct for spotting unknown-unknowns, but I have a list of tactics you can use if you’re still trying to build that instinct:
1. Dig deeper to turn your unknown-unknowns into known-knowns. Surface-level knowledge is great, but when you really dig into a new tech or a delicious chocolate cake recipe, you can gain a lot of fundamental understanding. If you want to use a new technology to its fullest, go further and read the code, the API, and any instructional material offered. You can then apply the knowledge to future projects.
2. Talk with your peers. Veterans in your field are usually more than willing to talk your ear off with advice if given the opportunity. Through their battle-hardened perspective, they can give you the valuable advice they’ve collected throughout their professional years.
3. Talk with people outside of your skill set. Experts outside of your field can have just as much impact on your knowledge as your peers. If you stay inside of your own bubble for too long, you might miss important information. Take time to grab lunch with people outside of your field. Ask them about their work and the challenges they’ve overcome.
4. Read a dang book. It might seem old-fashioned, but reading a book on a topic you want to learn more about can put you ahead of the competition. StackOverflow.com is nice to use for quick info, but it isn’t a well-rounded collection of information. You can miss out on subtle details if you simply get the info you need and run. Books and API documentation will give you the full scope needed to be ready for anything.
5. Recognize gaps in your knowledge. This is the hardest tip to master. You have to recognize the limits of your current knowledge and fill in the blanks. For example, suppose that you know of a process that takes you from A to B to C. You know about A and C, but as you play out B in your head as thoroughly as you can, you begin to see gaps in the process. Don’t write those off. Solving those parts of the process could be essential to saving you time and effort later. You might discover that step B is actually steps B1, B2, B3,…Bn.
6. Go exploring. One of my favorite pastimes is coming up with a silly idea and just going for it. Sometimes it pays off, and sometimes it doesn’t, but I do it for the love of learning. Recently, I tried figuring out how to send a player’s position through an online multiplayer game in the most efficient way possible. While learning more about that process and the solutions that other people used, I learned more about serializing data, popular libraries in use, and common pitfalls. My new knowledge came into practice at work not even a week later!
To the curious, the brave, and the innovative, I wish you the best of luck in all of your future baking, programming, and other career adventures!
Leah Lee is a Game Developer on the engineering team for The Crystal Core. To find out how BitLoft and BitLoft Game Studios can help you with your knowns, your unknowns, and everything in between, contact us!