• Home
  • Writing
  • Resume
  • Home
  • Writing
  • Resume

Writing

  • Why Some Managers Look Disingenuous

    January 3rd, 2024
  • Do’s and Don’ts For Technical Interviews

    December 27th, 2023
  • The Book That Made Me Want To Be A Leader

    October 30th, 2023
  • How to Fail An Interview As the Interviewer

    October 25th, 2023
  • Should Managers Be Prescriptive?

    October 16th, 2023
  • How To Help Unmotivated Developers

    July 12th, 2023
  • What to do when nothing seems good enough

    July 10th, 2023
  • Why Do We Burn Out?

    July 7th, 2023
  • What I Taught You, I Don’t Know

    June 21st, 2023
  • How To Delegate Effectively Without Feeling You Are Losing Control

    June 12th, 2023
  • Let’s Accept It. Technical Interviews Are Broken

    June 7th, 2023
  • Why Managers Need Empathy to Manage Low Performers

    May 31st, 2023
  • The Slow Decline of Highly Motivated Developers

    May 24th, 2023
  • Why Writing Explicit Code Matters

    May 18th, 2023
  • Why Is It So Difficult to Assess Expertise in an Interview?

    May 15th, 2023
  • The Real Value of a Senior Developer When it Comes to Dealing With Uncertainty

    May 11th, 2023
  • Why You Should Use Feature Flags to Deploy with Confidence

    April 28th, 2023
  • Over-Engineering Is Not (Just) a Technical Problem

    March 20th, 2023
  • The proactivity fallacy

    January 25th, 2023
  • Extending typescript intersection with optional properties

    January 18th, 2023
  • Setting up Google Tag Manager in a Nextjs application with a strict content security policy

    December 27th, 2022
  • How to build a scalable folder structure for a nextjs app

    December 11th, 2022
  • Why I have stopped writing comments

    December 6th, 2022
  • How to efficiently type nextjs page's props

    December 6th, 2022

The Real Value of a Senior Developer When it Comes to Dealing With Uncertainty

May 11th, 2023

Moving 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!