The Real Value of a Senior Developer When it Comes to Dealing With Uncertainty
May 11th, 2023Moving from a junior position to a senior one and then to principal didn’t happen without challenges. One of the biggest ones, and one that I still deal with, is my relationship with uncertainty.
As developers, we learn to avoid uncertainty and oftentimes are expected to eliminate it. How long is this (unclear) project going to take? What challenges are we going to face if we favor direction A over direction B? If you ever had to answer questions like those, and if you are a senior developer you probably have, you know that any honest answer won’t work there, what the stakeholders or managers asking those questions are expecting from you is certainty. It will take 5 and a half weeks. We will have only two challenges with direction A, these are the challenges, and here’s how to deal with them.
Can you remove uncertainty?
For many years I thought I could. I considered uncertainty to be a lack of preparation and planning. How can someone not be able to estimate accurately if they have done it many times before?. Of course that was a fool’s game.
Uncertainty is part of what we do. We are building complex systems that sit on top of more complex systems, often with unclear requirements and unclear problems we’re supposed to solve.
When a stakeholder or a manager asks you for certainty, they know you can’t give it to them. Then don’t expect you to remove the uncertainty, they expect you to absorb the risk.
What no one teaches you how to do it
The truth is that if you can’t get rid of something you need to learn to embrace it. What are the consequences of embracing uncertainty?
First of all, you acknowledge and accept the risk of it. You can’t guarantee the day a project will be finished or you can’t guarantee 100% of the scope will be implemented for a given date. And that’s a good thing I think, if we all agree that those things can’t be guaranteed we start making decisions with that information and minimize the uncertainty: if we have a hard deadline, what are the most important features we need to get done first? if we can’t deal with a project taking an uncertain amount of months how can we break down the project so we deal with an uncertain amount of weeks instead?
The other consequence of embracing uncertainty is that someone needs to start making decisions. Ideally a manager, but sometimes I’ve seen it with senior developers, needs to start finding ways to contain the risk and contain stakeholders and acting upon it. That’s not an easy task and many times people prefer to ignore that responsibility and push it down to the developers who’ll work on the project by asking them for certainty.
What is your role as a developer?
It depends on where you are in your development journey. As a junior developer, you move mostly in the realm of certainty. You’re given specific tasks that address specific (and normally small) problems and if there’s some uncertainty there’s normally a more senior developer who’ll clarify it for you.
At some point, you will be the more senior developer who may clarify things for junior developers, and, from that point, you start dealing with uncertainty much more closely.
As a senior (and more as a lead or principal) you deal with many layers of uncertainty. On one hand, you have technical uncertainty: as problems become more complex and bigger in scope, the decisions become less binary. Most of the time, the answer to the question “What is the best solution or tool for this problem?” is it depends.
That answer leads to another layer of uncertainty which is not having a detailed plan with all the steps. You can’t have it. You can (and should) have a high-level idea of what steps you’re going to take to address a particular problem but the details will depend on what things are found as you move.
This creates a contradiction: managers don’t want to start moving without a clear and detailed plan and developers can’t have a clear and detailed plan unless they start moving.
Your role as a senior developer is to sit among that contradiction and untangle it. You need to provide managers enough certainty that they understand what you know to start moving and what you expect to learn as you do move. But, equally important, you need to guide the developers so they can get enough certainty in the plan for managers and stakeholders to feel confident in it instead of defaulting to the idea that planning is useless because there’ll be always uncertainty.
Practical advice
What I have just described as the role of the senior developer is not an easy or comfortable position yet it’s critical for the success of any project that it is performed.
I’ve been in that situation and I can list a few do or don’ts to ensure you’re able to do your job:
- Don’t absorb the risk that is not for developers to absorb.
- Your job is not to remove uncertainty and risk, it is to minimize it and contain the risk. You do that by breaking down the project into smaller parts and releasing them often.
- Don’t push the risk to the managers that is for developers to deal with. It’s your job to lay out potential risks, possible solutions, and trade-offs to managers and stakeholders
Conclusion
Being a senior developer is more than coding or solving technical problems. Dealing with uncertainty with confidence is a big part of it, and as your seniority grows, it becomes even more important than your technical ability. Embrace it and practice.
Don’t let uncertainty weigh you down!