Most developers will never become senior engineers — and it has nothing to do with how much code they write.
Here's the uncomfortable truth after 25 years in this industry: the thing that holds most mid-level engineers back isn't a lack of technical skill. It's a lack of judgment.
You can know every design pattern. You can write clean, tested, beautifully documented code. And you will still get passed over for senior roles if you haven't developed this one thing.
They don't teach the real world in bootcamps. Get 25 years of production-grade experience on my YouTube: 🛠️👉 https://www.youtube.com/@lessonsfromproduction
So What Is Engineering Judgment?
It's not experience. It's not cleverness.
It's knowing when not to build something.
It's reading a half-baked Jira ticket and immediately seeing the three hidden problems that will blow up in production in six months. It's walking into a technical discussion and knowing which battles are worth having — and which ones you let go.
Here's where most devs mess this up.
They think senior engineers are the ones who solve the hardest problems. But the seniors I respect most? They prevent the hard problems from ever existing.
They ask one question in a planning meeting that saves three weeks of rework. They spot the dependency nobody thought about. They say "have we considered what happens when this scales to ten times the load?" — and suddenly the whole room goes quiet.
That's not seniority from coding skill. That's seniority from judgment.
The One Question That Separates Junior, Mid, and Senior
Let me show you how three different engineers approach the exact same task.
The task: "Add a new user authentication flow."
| Level | First Question Asked |
|---|---|
| 🔵 Junior | "What framework should I use?" |
| 🟡 Mid-Level | "What are the technical requirements?" |
| 🟢 Senior | "Why are we building this? What's the existing auth doing wrong? Do we actually need a new flow — or do we need to fix the one we have?" |
That question — why — is the separator.
This is the part nobody talks about.
Senior engineers are comfortable saying "I don't know, let me find out." They're comfortable saying "I was wrong." They're comfortable saying "this solution works, but it's going to cost us later."
Mid-level engineers are often afraid of those statements because they think it makes them look weak. It doesn't. It makes you look trustworthy. And trust is the currency that buys you a seat at the senior table.
The Career Trap: Feature Factory Thinking
Here's a pattern I've seen kill careers.
The developer who ships everything asked of them. Never pushes back. Never questions the spec. Just executes, ticket by ticket, sprint by sprint.
You might think that makes you valuable. Short term, it does. But long term, you become a human Jira board. You get labelled as someone who delivers tasks — not someone who delivers outcomes.
Senior engineers own outcomes. They care what happens after the code ships.
And this is why you stay mid-level.
You're solving the problem you were given — instead of solving the actual problem.
There's always a difference between what someone asked for and what they actually need. Learning to find that gap is what separates the engineers who get promoted from the engineers who get stuck.
Judgment Is Trainable — Here's How to Build It
Here's the good news: this isn't some mystical quality you either have or you don't. Judgment is a skill, and you can develop it deliberately.
1. Ask why before you ask how
Every ticket, every feature, every bug fix. Why are we doing this? What happens if we don't? What's the simplest solution that actually solves the real problem?
2. Read post-mortems — especially public ones
AWS outages, GitHub incidents, financial system failures. They're the best engineering school you've never attended. They show you exactly how smart engineers made bad decisions under pressure. Your future self will thank you.
3. Pair with people who have been wrong in expensive ways
War stories aren't just entertaining. They're compressed judgment. Every story that starts with "we tried that once and it was a disaster" is a shortcut to ten years of hard-won wisdom.
The Three Futures Test
Here's a simple framework I use before committing to any technical decision.
Before you write a line of code, ask yourself these three questions:
- 📈 Future 1 — What does this look like in six months when the team doubles?
- 🔄 Future 2 — What does this look like when the requirements change? (Because they always change.)
- 🌙 Future 3 — What does this look like at 3am when something breaks and whoever is on call has never seen this code?
If the answer to any of those three questions makes you uncomfortable — you've found your actual problem to solve.
Here's the hard part.
Most engineers optimise for writing good code. Senior engineers optimise for maintainable systems. There's a big difference.
A clever piece of code that only you understand is a liability. A boring, obvious, slightly-verbose solution that any developer on your team can debug at 2am — that's engineering excellence.
// ❌ Impressive but fragile
const r = d.reduce((a,c) => ({...a,[c.id]:c.v*c.q}),{});
// ✅ Obvious and maintainable
const totalsByItemId = {};
for (const item of data) {
totalsByItemId[item.id] = item.value * item.quantity;
}
Complexity is never impressive. Clarity is.
The Hidden Layer: Communication
The other side of judgment that nobody puts in the job description is communication.
After 25 years, I can tell you: the most technically brilliant engineer I've ever worked with nearly got fired because he couldn't explain his decisions to stakeholders. He had the best judgment in the room — but none of it translated into influence.
Senior engineers don't just have good ideas. They know how to bring other people along with them. They speak in outcomes, not implementation details. They know when to go deep on the technical and when to zoom out to the business impact.
That translation layer? Underrated. Career-defining.
Your Challenge — Starting Today
The next ticket you pick up — before you open your IDE — write down in one sentence the actual problem you are solving.
Not the feature. The problem. Then ask yourself: is this ticket the best solution to that problem?
// Before touching your keyboard, fill this in:
const actualProblemIAmSolving = "";
If you can't answer that, find someone who can. That conversation is the start of senior thinking.
The Gap Is Smaller Than You Think
The gap between mid-level and senior isn't a gap in skill. It's a gap in the questions you ask.
Start asking better questions.
Everything else follows.
25 years of building software, watching careers stall, and watching others accelerate — the pattern is always the same. The code is rarely the differentiator.
If this resonated, drop a comment with the last time a single question saved your team from a disaster. I'd love to hear the war stories.
Note: This article was written with AI assistance to help structure and articulate 25+ years of debugging experience. All examples, insights, and methodologies are from real-world experience.
Top comments (2)
Thanks for writing and could not agree more to 'Read post-mortems'
Thanks for the feedback :) Yes, so much easier to learn from other peoples mistakes!