Software engineering is cursed with uncertainty.
When we’re solving big new problems with software, if the exact problem has been solved before, we could just reuse the solution that already exists. Frequently though, the exact problem (or combination of problems) hasn’t been solved before, and we need to come up with a way to solve it.
Have you felt that feeling? That moment of uncertainty, where you don’t know what the solution will look like. You’ve solved many other problems before this one (and so far they keep paying you), but now you have to reach into the creative ether again to come up with a way to solve this new one.
(As an aside, one of my pet theories is that this is part of the reason behind all of our imposter syndromes, since every new problem is a new chance to face this uncertainty. What if I can’t solve this new problem? Is this going to be the one where they finally figure out I’m a fraud?)
It can be uncomfortable. It’s like diving into a new codebase, where at first it’s all a series of files and unfamiliar names. It’s like learning a new technology, where you’re trying to map these new concepts to the languages you’ve seen before while also seeing what’s new. It’s these moments of uncertainty, where everything is still an amorphous, blurry mist that has yet to come fully into focus.
Slowly, over time, the mist starts to clear up. Suddenly you can see how things are connected. After a chat with a coworker, a deep-dive into the code, or a walk around the block, something clicks, and some of the pieces start falling into place. The mist transforms into an outline, the outline into a conversation, the conversation into a diagram, the diagram into a few pull requests, the pull requests into follow up pull requests, and finally this vague problem has been translated from that amorphous blob into concrete lines of code.
This process is one of the most interesting parts of software development. I’m lucky to be able to work on interesting problems and spend a lot of time learning, and I’ve spent a lot of my time in this uncomfortable zone. I’ve gotten used to it and, dare I say, almost started to enjoy it. There’s still that moment of uncertainty, but I have my ways to get through it. I think it’s an important skill to build, this familiarity with the unknown and the uncertainty, and finding ways that are effective for you to get through it can be very empowering1.
We’ve made it through every other problem so far, and chances are good we can make it through this next one, too.