Search

What Senior Engineers Know That Juniors Don't

 

You're Not Paid
to Write Code

The uncomfortable truth that separates great engineers from good ones — and why the most valuable thing you produce is never in your codebase.

Read time 12 minutes
Topic Engineering Career
Level All engineers

Every engineer starts their career believing the same thing: the job is to write code. You get hired, you're given a ticket, you write the solution, you ship it. Output = code. Simple.

This belief is understandable. It's reinforced everywhere — by job titles ("Software Engineer"), by tools (GitHub contribution graphs), by culture (the 10x developer myth). But it's wrong, and the longer you hold onto it, the more it limits you.

Let's start with the real question.

What are you actually paid for?

Outcomes
Business value delivered
← Most valued
Decisions & Judgment
What to build, how, and why
← Enabling layer
Code
The implementation artifact
← The means

You are paid to solve problems. Code is one tool for doing that. A sophisticated, powerful tool — but a tool nonetheless.

Your company doesn't pay you because it wants lines in a repository. It pays you because it has problems: users who can't accomplish something, competitors gaining ground, processes that are slow and expensive. Your job is to close those gaps. Sometimes the answer is a clever algorithm. Sometimes it's a spreadsheet. Sometimes it's a conversation that eliminates a week of planned work.

The engineers who advance fastest understand this distinction viscerally. They ask "should we build this at all?" before "how do we build this?" That single question — used consistently — is worth more than any technical skill.


The invisible work that actually matters

Writing code
Tickets, pull requests, commits
Code reviews
Reviewing others' PRs
Bug fixes
Responding to incidents
 
— the waterline —
 
Pushing back on bad ideas
Preventing features that would have cost 3x to remove
Asking the right questions
Clarifying requirements before anyone writes a line
Simplifying scope
Finding the 20% that delivers 80% of the value
Unblocking teammates
Multiplying the team's output, not just your own
Detecting the XY problem
Solving what's actually needed, not what was asked for
Documentation & clarity
Making decisions that don't need re-litigating

Consider what happens when a senior engineer pushes back on a poorly-defined feature request in a Monday morning meeting. That five-minute conversation — that push back — might eliminate three weeks of wasted development, a painful future refactor, and a confused user experience. No commit was written. No ticket was closed. And yet: enormous value was created.

None of that shows up in a GitHub graph.


The code-output trap

There's a cognitive trap that catches almost every engineer early in their career. It goes like this:

"I can see my commits. My commits feel real. If I produce more commits, I am being more valuable."

This is understandable. Code is tangible. It's measurable. It gives you something to point to. But optimizing for code output is often the opposite of optimizing for value.

❌ Code immediately
  • Start typing, assume requirements are clear
  • Wrong thing built — 3 weeks wasted
  • Overbuilt solution nobody uses
  • Future maintenance burden
✓ Question first
  • What problem? Who benefits?
  • Is this the right solution?
  • Right thing, right size
  • Delivered in half the time

The engineer who charges straight to their keyboard on every ticket looks productive. They're closing stories. Their velocity is high. But underneath, they're accumulating invisible debt — in wrong assumptions, unnecessary abstraction, solutions that don't quite match the real problem.

The engineer who pauses, asks a clarifying question, and occasionally says "I think we shouldn't build this" — they look slower. But they're delivering more real value per unit of time.


What separates junior from senior

This is really the core of it. The transition from junior to senior engineer isn't primarily a technical one. It's a judgment one.

Junior mindsetSenior mindset
Asks: "How do I build this?"Asks: "Should we build this at all?"
Values: lines of code writtenValues: problems permanently solved
Sees: the ticketSees: the goal behind the ticket
Reluctant to say "I don't know"Uses uncertainty as a signal to investigate
Avoids stepping on toesComfortable challenging decisions constructively
Thinks individually: "my code"Thinks collectively: "our team's output"
Measures success by shippingMeasures success by outcomes after shipping

None of those right-hand column behaviors require you to be a better programmer. They require you to think differently about what your job actually is.


The highest-leverage actions in software

If code isn't the primary unit of value, what is? Let's map the real leverage points in a software team.

Writing code
 
Code review
 
Clarify requirements
 
Kill bad features early
 
Multiply team output
 

Notice the pattern: the highest-leverage activities are the ones that happen before or instead of code. They're invisible on any dashboard. They feel less like "engineering" by the traditional definition. And yet they compound.

An engineer who helps ten teammates avoid wrong turns is more valuable than an engineer who builds ten features of their own. This is the core insight behind staff and principal engineer roles — those people barely write code at all. They leverage.


"But I love writing code."

Good. You should. Code is genuinely creative work, and the craft matters. No one is saying stop caring about elegant solutions or clean architecture.

The shift is subtler than that. It's about expanding your definition of what "doing your job well" means.

Old framing
"I did a good job today — I wrote 300 lines and closed 4 tickets."
New framing
"I did a good job today — I helped three users accomplish something they couldn't before, and prevented a bad architectural decision in planning."

The best engineers hold both frames simultaneously. They care deeply about code quality because sloppy code creates future problems for real people. But they don't confuse the code with the goal.

They also know when not to write code. Saying "we can solve this with an existing library" or "let's reconfigure what we already have" is a skill. Knowing the right moment to do absolutely nothing and let a problem resolve itself — that's a skill too.


Practical shifts to make starting now

You don't need a new title to start thinking this way. Here's what changes look like at each level:

Mid-level

Before starting a ticket, write one sentence about what user problem it solves
Ask "is there a simpler way to achieve the same outcome?" before designing a solution
When reviewing code, comment on whether the feature is the right feature, not just whether the code is correct

Senior

Proactively flag when a planned feature doesn't align with observed user behavior
Turn ambiguous stakeholder requests into written, signed-off requirements before any code starts
Track what happens after features ship — do they actually get used?

Lead / Staff

Make "should we build this?" a standard agenda item in planning
Build a culture where questioning requirements is celebrated, not seen as obstruction
Create systems (ADRs, RFCs, post-mortems) that make good judgment available to the whole team

The best compliment you can receive

There's a particular compliment that the best engineers earn, and almost never mention in performance reviews because it's invisible. It sounds like this, from a product manager, months after a planning session:

"Remember when you pointed out that the whole onboarding flow assumption was wrong? We would have spent six weeks building something no one wanted. That was the most valuable thing that happened in Q3."

No lines of code were written. A problem was solved. Value was created.

That's the job.

Your job is to make things better for people.
Code is just one of the ways you do that.

The engineers who internalize this — who see themselves as problem-solvers who happen to use code as their main tool — grow faster, deliver more, and build the kind of reputation that opens every door. They stop counting commits and start counting impact. And impact, unlike commits, compounds forever.

Start with one small practice: the next time a ticket lands in your queue, before opening your editor, write down — in one sentence — what problem it solves for a real person. If you can't, ask. That pause is where great engineering begins.

Viola Lunkuse

Viola Lunkuse

Writer, developer, and dreamer

Leave a comment

Your email address will not be published. Required fields are marked *

Your experience on this site will be improved by allowing cookies Cookie Policy