technology

Why Getting Defensive About Code Reviews Kept Me Junior Longer Than It Should Have

I stayed mid-level for 4 years because I confused competence with growth. Here's what actually separates engineers who thrive from those who plateau.

DW

Dorothy Williams

Engineering leader with 30+ years in tech, from mainframes to microservices. Dorothy brings historical perspective to modern development and mentors the next generation of tech leaders.

July 12, 20258 min read
Why Getting Defensive About Code Reviews Kept Me Junior Longer Than It Should Have

Breaking into software development? That's one thing. Building a career that spans decades and actually stays fulfilling? That requires strategy, self-awareness, and (let's be honest) a willingness to make some pretty uncomfortable decisions at key moments.

Over the years, I've noticed patterns that separate those who thrive from those who plateau. This guide covers the software developer career path from junior to senior and beyond, including that critical crossroads most engineers hit around the five- to seven-year mark.

The Junior Developer Phase: Years 0–2

I remember my first week at a fintech startup. There I was, staring at a 50,000-line monolith with zero documentation and a ticket that said "fix the checkout bug." Which bug? Nobody knew. That's the junior experience right there: feeling completely lost while everyone around you seems to know exactly what they're doing.

Here's the thing. This phase isn't about proving you're smart. It's about proving you can learn, ask good questions, and ship code that doesn't break production at 3 AM.

During this phase, focus on:

Technical fundamentals over framework hopping. Learn one stack deeply before chasing the newest shiny technology. Understanding why React works matters way more than knowing React, Vue, and Svelte superficially.

Code review as education. Every piece of feedback is free mentorship. Engineers who get defensive about code reviews stay junior longer than those who treat criticism as data. Simple as that.

Visibility without arrogance. Document what you learn. Share knowledge in team channels. Quiet engineers who solve problems but never communicate their value often get overlooked during promotion cycles. It's frustrating, but it's real.

Promotion timelines at this level vary a lot by company, industry, location, and individual performance. While one to three years gets tossed around in industry discussions, there's no universal standard. Some companies move faster, others require specific project milestones, and individual trajectories depend on many factors.

Mid-Level Developer: Years 2–5

I stayed mid-level for four years because I confused competence with growth. Sound familiar? The feeling when you can write features independently, understand the codebase, and close tickets on time.

But here's what I learned: closing tickets isn't the same as driving impact. And comfort? That's the enemy of progression.

A full-stack developer career progression at this stage requires expanding beyond immediate responsibilities:

Own outcomes, not just outputs. Junior developers complete assigned tasks. Mid-level developers should start questioning whether those tasks solve the right problems. Push back on requirements that don't make sense. Propose alternatives. Get a little uncomfortable.

Develop a specialty while maintaining breadth. Generalists are valuable, but engineers known for deep expertise in performance optimization, system design, or security become go-to resources. That reputation accelerates careers.

Mentor junior developers. Teaching forces articulation of concepts understood only intuitively. It also signals leadership potential to managers evaluating candidates for senior roles.

Reaching Senior Developer: Years 5–8

What does "senior" actually mean? At a startup, that title might come after two years. At a large tech company, it might take six or seven. Same word, completely different expectations.

Regardless of timeline, genuine senior-level work involves:

Technical decision-making with business context. Building what's requested isn't enough. The work demands understanding why something is requested, evaluating the costs and benefits, and pushing back when a simpler solution exists.

Force multiplication. Impact shouldn't scale linearly with hours worked. Making entire teams more effective through better tooling, documentation, architecture decisions, and process improvements: that's the goal.

Handling ambiguity. Junior engineers receive clear tickets. Senior engineers often get vague problems: "Customers are complaining about slowness. Figure out why and fix it." Defining the problem before solving it separates levels.

The path to senior varies considerably based on company culture, how "senior" is defined at each organization, and individual circumstances. While five to eight years is commonly cited in industry discussions, some engineers reach this level faster through exceptional opportunity or performance, while others take longer. And honestly, that's fine if the trajectory stays positive.

The Crossroads: Individual Contributor vs. Management

Somewhere around this level comes a critical decision that shapes the next decade of a career. Choosing between the IC track and engineering management isn't about which path is "better." It's about which path aligns with what actually energizes a person.

Signs the IC track fits:

  • Losing track of time while solving technical problems
  • Managing people sounds exhausting rather than interesting
  • The pull to go deeper into distributed systems, ML infrastructure, or compiler design
  • Measuring satisfaction by technical elegance and impact

Signs management might fit:

  • Getting frustrated watching team dysfunction that can't be fixed from the current position
  • Helping junior engineers grow feels as rewarding as shipping features
  • Thinking about organizational problems: hiring, retention, process
  • A genuine willingness to sacrifice coding time for meetings (really willing, not just tolerating it)

For those wondering how to become a tech lead from software engineer, that role offers a middle ground. Tech leads maintain technical involvement while taking on coordination and mentorship responsibilities. It's a useful testing ground before committing to full management.

Staff Engineer and Beyond: The IC Ladder

Companies increasingly recognize that forcing engineers into management to advance loses technical talent. Staff, principal, and distinguished engineer roles provide alternative progression.

At these levels, work changes fundamentally:

Scope expands dramatically. Staff engineers work across teams, sometimes across entire organizations. Technical decisions affect dozens of engineers and millions of users.

Influence replaces authority. Mandating adoption of architectural proposals isn't possible. Building consensus, documenting persuasively, and demonstrating value through results becomes essential. It's a different skill set entirely.

Communication becomes core to the job. Writing design documents, presenting to leadership, explaining complex considerations to non-technical stakeholders: this takes as much time as coding. Maybe more.

Here's an alternative answer to "When should I switch to management?": stay technical, but expand scope and influence instead. Not every company supports this path equally, so evaluate the IC ladder carefully before committing.

Engineering Management: A Different Career

Let me be clear about something. Management isn't a promotion from senior engineer. It's a career change that happens to share some vocabulary with what came before.

New engineering managers often struggle because they apply engineering mindsets to human problems. I learned this the hard way when I tried to "debug" why a strong performer suddenly seemed disengaged. Turned out she was dealing with a family crisis and needed flexibility, not a performance improvement plan. People don't respond to systematic troubleshooting the way code does. (Took me a while to really get that.)

Effective engineering managers focus on:

Clearing obstacles. Making teams more productive is the job. That could mean fighting for better tooling, or having difficult conversations with underperformers. Other days it's just shielding the team from organizational chaos.

Career development. Each person on the team has goals. Understanding those goals and creating opportunities to advance them builds loyalty and high-performing teams.

Hiring and retention. A single strong hire or prevented departure affects team output more than most technical decisions made as an IC.

One consideration worth keeping in mind: many engineers who transition to management for extended periods report that returning to hands-on coding requires significant ramp-up time. Technical skills can fade without regular practice.

Building a Personal Roadmap

Generic career advice only goes so far. What's right for one person depends on specific circumstances, company, market, and goals.

Build a roadmap by:

Reverse-engineering desired outcomes. Where do the next five years lead? Work backward. What skills does that role require? What gaps exist? What experiences would fill them?

Seeking feedback aggressively. How a manager perceives performance matters more than self-assessment during promotion discussions. Ask directly: "What would I need to demonstrate to reach the next level?" Then actually listen.

Making strategic job changes. Loyalty has diminishing returns. If a current company doesn't offer needed growth opportunities, leaving isn't disloyal. It's rational.

Promotion timelines vary wildly by company, market conditions, and individual performance. External benchmarks provide useful context, but specific trajectories depend on factors within personal control, and factors that aren't.

Getting from junior to senior is just the beginning. Beyond senior lies a decade or more of potential growth in either technical or management directions.

I've watched engineers transform their careers by making one intentional choice: recognizing when they'd stopped growing and doing something about it. One colleague left a comfortable senior role at a bank to join a chaotic Series A startup. Two years later, she was leading their entire platform team. Another stayed at the same company for twelve years but kept reinventing his role every three, moving from backend to infrastructure to machine learning.

Neither path was wrong. Both were intentional.

Careers involve wrong turns, lucky breaks, and decisions that only make sense in retrospect. Don't aim for a perfect plan. Stay thoughtful about direction, honest about what gets left behind, and willing to adapt when circumstances change.

Start with where things stand now. Define where the destination lies. Then take the next step.

Related Articles

The War Story Tangent That Lost Me a Staff Engineer Offer
technology

The War Story Tangent That Lost Me a Staff Engineer Offer

I've watched senior engineers bomb system design interviews for 2 years. Your production experience might actually be the problem. Here's why.

OHOmar HassanDecember 9, 202510 min read
I Got Rejected for Staff Twice. Here's What Finally Worked.
technology

I Got Rejected for Staff Twice. Here's What Finally Worked.

Got rejected for staff engineer twice before figuring out what committees actually evaluate. Here's the 18-month timeline and packet strategy that worked.

ARAlex RiveraDecember 8, 20259 min read
Why I Switched from Notion to Obsidian (And What I Miss)
technology

Why I Switched from Notion to Obsidian (And What I Miss)

I tested 7 PKM tools for coding work. Obsidian won for its local Markdown files and Git support, but Notion still does one thing better.

LPLisa ParkDecember 7, 202510 min read

Comments (0)

Leave a comment

No comments yet. Be the first to share your thoughts!