A few years ago, I was listening to an episode of IMPOSSIBLE FM by Joel Runyon. It's about "unknown unknowns", a concept coined by United States Secretary of Defense Donald Rumsfeld in 2002.

Rumsfeld famously said:

Reports that say that something hasn't happened are always interesting to me, because as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns—the ones we don't know we don't know. And if one looks throughout the history of our country and other free countries, it is the latter category that tend to be the difficult ones.

I'd like to examine how we might apply this to your web development journey. The word "journey" is important, because as Bruce Lee reminded us:

Remember, success is a journey, not a destination. Have faith in your ability. You will do just fine.

Joel laments that the unknown unknowns tend to surface once you feel like you're starting to get a handle on things. You've learned the basics. You've got your feet wet and built some cool projects.

And then you find something you didn't even know you didn't know. A good example for me is when I first learned about JavaScript patterns like the:

  • Immediately-invoked function expression
  • Revealing module pattern
  • Constructor pattern
  • Revealing constructor pattern
  • Universal module definition

I felt so overwhelmed.

When it happens, you feel like you've hit a brick wall. You start to doubt yourself and wonder whether you can do this stuff after all. But you must stick with it, because it's so worth it once you push through.

The simple reason this happens is because when you start learning something new, you go from zero knowledge to a baseline. There's a huge exponential curve in your learning.

Once you've got that baseline, though, the gains become much more incremental. You learn little things, less often, that will take you to the next level over time.

This phenomenon is known as the law of diminishing returns.

And so it is with a lot of things in web development. In a field that's constantly changing and evolving, you cannot possibly know everything. There will be a lot of unknown unknowns, and that's OK.

The best thing you can do is get a solid grasp of the essentials. Learn about semantic HTML and A11Y. Dig into CSS and the cascade. Make sure you understand vanilla JS before reaching for that framework.

Only then can you attempt to keep up with all the amazing work going on in this wonderful community. ❤️