The limit of uncertainty
Introduction
In my bachelor’s thesis five years ago I first wrote about the idea of a limit of uncertainty. The term helps me describe how tasks feel for me and imagine how they feel for others. I use it to describe the point where a person is no longer willing to work on a task. It’s this feeling that a task is too large to comprehend, too much of a struggle, just too much for you at that specific time. There are all sorts of mechanical coping mechanisms we commonly use in the process of Software Engineering. Refinements are a good example. Keeping commits small and branches short lived is another. It seems to me that we rarely try to discuss the emotional part of it though. You could argue that our entire job is reducing uncertainty. Someone comes to us with a vague largely undefined solution for a problem and we explore and systematically eliminate uncertainty until we end up with a concrete implementation of the solution. I think a more holistic approach would be better and I think this idea can help.
Uncertainty is pain
Have you ever had refinements or a retrospective where a fellow software engineer said something along the lines of: “I can’t work like this! They keep changing the requirements! I wish they would just tell us what they want.” You’ve hit their limit. In Software Engineering because the answer to a specific problem is almost never clearly defined, you may end up building something and then changing it immediately or worse, throwing it away entirely. On the other hand you may be so overwhelmed with paralyzing uncertainty in a task, not knowing whether what you are building is right, will work or is even possible. Both of these experiences are quite painful, but they are not uncommon. In one you just spent a week building something that is not even going to get used and in the other you feel too incompetent to even write the first letter of code. In this way, someone’s limit of uncertainty is similar to pain tolerance. Like pain it builds up to a point that it is no longer bearable and it can completely paralyze you for a while. Also like pain tolerance, it is highly individual and constantly varying. It can change based on mood, based on recent recent experiences and based on how experienced as a Software Engineer you are.
Certainty is also pain
We spend a lot of time trying to make things as certain as possible, but total certainty is also painful. We rarely know exactly how we are going to build something beforehand. If we do though, it can take away all the feeling of being challenged. Who hasn’t spent hours writing Object mappers or hours of unit tests where previous writers “forgot” them. Did you feel challenged? Another way certainty can be very painful is if someone (usually an authorative role) already decided on how something should be implemented and you know a better way. Especially if you’ve tried to argue your solution, but it got shot down. And then especially if it got shut down not based on merits, but based on the fact that the decision was already made. I’m sad to say that some of my colleagues have completely lost the will to argue for a better solution, just because they have been shut down by “certainty” so often. I would like to mention an exception that after feeling completely overwhelmed by a task due to its' uncertainty, sometimes it can be nice to do something that you know how to do, just so you feel a sense of accomplishment and expertise. It may be just what you need to get back into more challenging tasks.
Is it all just pain?
So uncertainty is pain and certainty is also pain, are we absolutely doomed? No. There is a wide area between, a sea of challenge if you will. Where a task is challenging, but not overwhelming. Where you know sort of how you are going to approach it, but not exactly. Where you can discover all sorts of treasure (or junk). The sea of challenge is big, bigger than we could ever fully explore. So gather a good crew and pick an adventure! Try not to lose your ship in the storms when you test your limit of uncertainty and every now and then sail back into the port of certainty, to restock on courage, recruit new crewmates and gather snacks. See you out there!