Guide
Sections
6
Pages
166
Reading time
~6 h
Take first
Nothing

What you will be able to do

  • Describe concretely what is expected at junior, SDE2, SDE3 and staff levels, and map your current work against it.
  • Write code, tests and pull requests that are easy to review and maintain, and give code reviews that improve both code and people.
  • Debug unfamiliar systems methodically and own your services in production.
  • Write a design doc, estimate and plan a multi-week project, and drive it to launch with clear status communication.
  • Work effectively with PMs, designers and other teams, including disagreeing productively.
  • Build a promotion case with evidence, and manage your career deliberately.
  • Prepare for and pass coding, system design and behavioral interviews, and negotiate the offer.

Technical depth gets you hired. Craft, ownership and communication decide whether you get trusted with bigger problems — and whether you get promoted. An SDE2 is someone the team trusts to own a feature end to end without hand-holding. An SDE3 is someone the org trusts to own ambiguous problems and raise the bar for the people around them. This topic is the operating manual for that climb: what each level actually means, how to write and review code others can live with, how to drive projects and collaborate, how promotions really work, and how to interview for the next role.

It sits next to the technical courses in this bible, not under them. You can design a cache and still ship unreviewable PRs. You can recite CAP and still drop the ball on a launch. The pages here are the habits and mental models that turn technical capability into reliable impact.

Who this is for

You are a junior or mid-level engineer aiming at SDE2, or an SDE2 starting to look like SDE3. You write code comfortably. You want concrete expectations — not vague advice to "take ownership" or "be more senior."

Take What the levels mean, Ramping up and Ownership early, even in your first months on a team. Return to craft, project ownership, people skills, promotions and interviewing as those situations appear. You do not need to read every page in order every year; you need the right page when the job changes shape.

If you are brand new to industry engineering, start with levels + ramp + ownership, then maintainable code, testing and code review. If you already ship features but stall on promotion, jump to scope growth, promotion and communication. If you are interviewing soon, use the Interviewing unit with a clock — strategy first, then coding and behavioral practice.

How to study it

Read against real work. After engineering levels, map one recent project onto the four axes (scope, autonomy, complexity, influence) and write what would have to be true for the next level. After code review, change how you open your next three PRs. After design docs, write a one-pager before your next non-trivial change.

Use the Further learning links when you need depth — public ladders, StaffEng essays, interview loops — not as a reading list to finish. Pair interviewing pages with timed practice; pair production-ownership pages with your next on-call shift.

Keep a short private "career log": projects, incidents, design reviews, mentoring moments, with outcomes and your role. That log feeds promotion packets and behavioral stories later; building it continuously costs minutes, rebuilding it from memory before a packet costs weeks.

Unit roadmap

The numbered list is a shorter path. The sections below are every lesson: 166 in all, about 6 hours of reading.

Levels and expectations

What "good" looks like at each stage, and how to get productive in a new environment.

Craft of code

The daily work that builds trust in your diffs.

Owning projects

From idea to production without dropping the thread.

Working with people

Influence, feedback and growth with other humans.

Growing your career

Deliberate scope, promotions and sustainability.

Interviewing

Getting the next role and the offer that matches it.

Course resources

Gergely Orosz's The Software Engineer's Guidebook is the closest single book to these pages — levels, craft, collaboration and career moves in one place.

The Software Engineer's Guidebook (Gergely Orosz)Navigating senior, tech lead, staff and principal positions at tech companies and startups.The Software Engineer

Will Larson's StaffEng site and book are the canonical map of staff-level IC work and archetypes; read them when SDE3 starts to feel close.

StaffEng (Will Larson)Staff Engineer: Leadership beyond the management trackStaff Engineer: Leadership beyond the management track

Edmond Lau's Talks at Google session is the best short treatment of leverage — choosing work that compounds — which underlies ownership and productivity throughout these pages.

The Effective Engineer | Edmond Lau | Talks at GoogleTalks at Google

Public ladders beat tribal folklore. Bookmark Dropbox's Engineering Career Framework, the collection at progression.fyi, and levels.fyi for cross-company title mapping when you change jobs or negotiate.

Levels and expectations

The four leveling axes

Scope, autonomy, technical complexity and influence — the four questions every engineering ladder is really asking.

What the levels mean

Junior, SDE2, SDE3 and staff: scope, autonomy, impact and influence at each level.

Junior and SDE2

Juniors finish well-scoped work cleanly. SDE2s own features end to end without someone breaking the work into steps.

Senior and staff

Senior owns ambiguous multi-quarter problems and multiplies the team. Staff is a different job shape, not a louder senior.

Mapping titles across companies

Senior at a startup may be mid-level at big tech. Map with scope, autonomy, complexity and influence — not vanity strings.

Leveling self-assessment

Pick a public ladder, score three recent pieces of work on the four axes, and mark what you show consistently versus once.

The first 90 days

Agree 30/60/90 outcomes with your manager so ramp is visible, not a vibe.

Reading an unfamiliar codebase

Trace one request from an entry point. Tests and git history beat reading src/ top to bottom.

Asking good questions

Show what you tried, time-box being stuck, and batch questions so help is cheap to give.

Ship something small in week one

A tiny production change teaches the real workflow. A tutorial app on your laptop teaches none of it.

Ramping up on a new team and codebase

Your first 90 days: read code by tracing paths, ask well, ship early, and map people as well as systems.

Closing loops

Stay with the outcome, not the ticket. Every commitment ends done, cancelled, or deferred with an owner and a date.

Reliability as reputation

Do what you said, by when you said, or renegotiate before the deadline. Quiet misses train people to discount you.

Done means verified

Tests, monitoring, a rollback path, and a check in production are part of done — not polish if there is time.

Proactive ownership

Find problems before they are tickets, package them in risk language, and make yourself replaceable on purpose.

Ownership

Acting like an owner: close loops, care about outcomes, and be the person things do not fall through with.

Craft of code

Software complexity

Complexity shows up as change amplification, cognitive load and unknown unknowns. The next stranger's change is the cost that matters.

Deep modules

A deep module hides a lot of complexity behind a small interface. Shallow pass-through layers add names without adding leverage.

Writing code others can maintain

Managing complexity with deep modules, clear naming, honest comments, consistent style, and error strategies that shrink the blast radius of change.

Naming and comments

Names encode role and units. Functions do one thing at one level. Comments explain why, not what.

Error handling and illegal states

Fail fast, make errors explicit, and redesign so some failures cannot happen. Swallowing errors turns production into archaeology.

Duplication vs the wrong abstraction

DRY is about knowledge, not text. Prefer duplication over a shared helper you cannot name. YAGNI for imaginary second use cases.

Interfaces that age well

Design the interface for the caller's job. Take the smallest inputs, make illegal states hard, and keep one obvious way to do each thing.

Test levels

Unit, integration, contract, and end-to-end tests buy different confidence per minute. Pick with cost, not habit.

Test doubles

A stub returns canned data. A fake is a small working stand-in. A mock also checks how it was called. Prefer fakes and real dependencies.

Testing behavior

Assert inputs and outputs the next engineer cares about. Do not lock tests to private call graphs, logs, or getters.

Testing strategy

What to test, at which level, and how to keep a suite fast, reliable, and worth the maintenance — from pyramid trade-offs to production safety nets.

Flaky test policy

A flake fails without a code change and trains the team to ignore red CI. Quarantine it the same day; fix or delete it within days.

Testing in production

Pre-prod tests never see every config, data shape, or traffic pattern. Flags, canaries, and synthetics catch what the suite cannot invent.

Reviewable pull requests

Small diffs, a stranger-readable description, and a self-review before you ask anyone else.

What to look at in a review

Design, then correctness, then tests, then readability, then nits. LGTM means you would own the merge.

Review tone

Questions and labeled nits beat commands. Explain why. Specific praise teaches what to repeat.

Code review

Author small, reviewable PRs and give reviews that improve both the code and the author — design first, tone that teaches, turnaround that unblocks.

Review turnaround

Slow review is a delivery bug. First response within a business day; silence is worse than a redirect.

Block vs approve

Block what is wrong, unsafe or expensive to undo. Approve improvements and track leftover polish.

Ops and security in review

Authz, secrets, PII, migrations, flags and load. You do not need to be a security engineer to ask who can call this.

The scientific debugging loop

Observe a concrete failure, form a killable hypothesis, change one variable, narrow, repeat. Write it down.

Reproduce and minimize

The smallest steps, inputs and environment that make the bug happen reliably. Without a repro you are guessing.

Bisecting bugs

Binary search the search space — code path, commits, input, config, cluster. git bisect is log2(N) builds.

Debugging

A scientific loop for finding bugs fast — reproduce, hypothesize, bisect, instrument — from local failures to production incidents without making things worse.

Reading debug evidence

Stacks, logs, metrics and traces. The exception escaped somewhere; the mistake may be a frame earlier.

Production debugging

Correlate, stabilize, capture evidence. Do not thrash. Separate mitigation from the root-cause fix.

Closing the debug loop

A fix without a regression test is temporary. Write what you saw, what was true, and how it cannot silently return.

Characterization tests

Pin what legacy code does today before you clean it, so a refactor cannot drift in silence.

Seams and dependency breaking

A seam is a place you can change behavior without editing the hard spot. Create one before you rewrite the algorithm.

Tiny refactor steps

One structural change, tests green, commit. Then change behavior in a different PR.

Refactoring and legacy code

Change code you did not write without breaking it. Start here for characterization, seams, tiny steps, and incremental migrations.

Incremental migrations

Replace a system the way a strangler fig replaces a host — route by route, with expand/contract and parallel run, never a six-month freeze.

Selling tech debt

Fund cleanup with incident rate, speed, and risk — not "this code is messy" — and show progress on a dashboard.

AI coding modes

Autocomplete completes patterns you already understand. Chat drafts and explains. Agents edit many files against a pass/fail signal.

Agent verify loops

An agent only helps when it can fail a test, a typecheck, or a repro script. You define done. You still review the merge.

Working effectively with AI coding tools

Use autocomplete, chat, and coding agents to go faster without shipping code you do not understand — context, verify loops, and protecting your skill growth.

Prompting AI coding tools

Load a goal, an example, constraints, and non-goals. Point at the files that matter. Keep project instruction files short and true.

Reviewing AI-generated code

Review AI output with the rigor of a new-hire PR. Characteristic failures are invented APIs, skipped auth, and tests that assert mocks.

Learning with AI tools

Seniors multiply with AI. Juniors risk never building the mental models that make them SDE2. Protect growth on purpose.

Owning projects

When to write a design doc

Skip the doc for small reversible work. Write one when the blast radius is large, the approach is unclear, or you need buy-in.

Design docs and RFCs

Writing design docs that get to a good decision quickly — structure, alternatives, review, and when a one-pager is enough.

Design doc template

Context, goals and non-goals, the proposed design, real alternatives, then risks and rollout. Cut empty sections.

Writing design docs for reviewers

Lead with the decision on the first screen. Support it with diagrams and numbers. Ask for scrutiny, not applause.

Running a design review

Pick reviewers on purpose, go async first, meet only for stuck threads, and record the decision so code review does not re-litigate it.

Estimate vs commitment

An estimate is a range under uncertainty. A commitment is a date you agree to hit, usually by cutting scope. Do not give one when asked for the other.

Work breakdown and spikes

Split work until each leaf is about one or two focused days. Time-box unknowns as spikes before you pretend to know their cost.

Estimation and planning

Breaking work into small tasks, estimating with ranges, de-risking early, and communicating slips before they become surprises.

Estimate ranges and padding

Quote a range and a confidence, then multiply the raw sum out loud for unfamiliarity. Hidden padding is how trust dies.

De-risking and milestones

Pull the scary integration forward, then ship user-value slices. Easy UI first feels like progress and hides the landmine.

Evidence-based scheduling

Track estimate versus actual on small tasks, then multiply new work by your personal factor instead of summing hopeful guesses.

Communicating slips

Say the assumptions with the number. When they break, renegotiate early with options — cut scope, move the date, or (rarely) add people.

DRI and kickoff

One named owner, a short kickoff, and a definition of shipped that is more than code on main.

Green, yellow, red status

Status is a forecast of launch, not a diary of tasks. Yellow on Tuesday beats red the day before.

Dependencies and unblocking

Other teams will not feel your deadline. Ticket, follow up, escalate with options — and parallelize while you wait.

Launch readiness

Merged to main is not launched. Walk monitoring, rollout, rollback, docs, and a named owner before the flag goes to 100%.

Driving projects to launch

Kickoffs, status, dependencies, unblocking, launch checklists, and a finish decision-makers recognize as shipped.

Discovery and delivery

Discovery figures out what to build. Delivery builds and ships it. Engineers belong in both, as peers of PM and design — not a ticket factory.

Cheaper product cuts

Start from the user problem and success metric, then offer an MVP with a cost and a risk — not a yes or a no.

Working with product managers and designers

Product sense for engineers — shaping scope, trade-off conversations, feasibility spikes, and building the right thing with PMs and designers.

Feasibility spikes

Surface a hard constraint before design is locked. Time-box a spike and come back with a recommendation and residual risk.

Working with designers

Designers are partners on empty, error, and permission states — not pixel people you implement after the fact.

Product-minded habits

Curiosity about the user, interest in metrics, and ownership after launch — not a PM title.

Shipping with observability

A feature is not done when the happy path works locally. Done means someone half-asleep can tell whether it is healthy.

Handling a page

Acknowledge, assess blast radius, mitigate first, escalate when needed, communicate. Diagnose after users are safe.

Runbooks and toil

Write the checklist you wish existed at 2 a.m., then spend the next days making that page never happen the same way.

Owning your code in production

On-call, alerts, runbooks, and the loop that makes you trustworthy — and better at building systems that survive users.

Production postmortems

Blameless writeups so the system learns. Your job is timeline facts, contributing factors, and action items you actually finish.

Working with people

Bottom line up front

Put the decision, ask or outcome in the first sentence. Context comes after.

Writing for skimmers

Assume a tired reader on a phone. Headings that say something, one idea per paragraph, links instead of dumps.

Status and decision updates

Shared templates for status, incidents and decision requests so readers know where to look.

Async etiquette

Chat is a shared inbox. Put the full ask in message one, use threads, and match the medium to the urgency.

Written and verbal communication

Lead with the point, write for skimmers, and adjust depth for engineers, PMs and executives.

Audience altitude

Same facts, different height. Mechanism for engineers, impact for PMs, decision and ask for executives.

Meetings and demos

Open with the purpose, show the user path, and leave with a decision, an owner and a date.

Building trust before you need it

Trust is credit you earn in quiet weeks. Keep small commitments, share context early, make others look accurate.

Disagreeing well

Critique the proposal, not the person. Bring facts, options and a recommendation, then disagree-and-commit.

Influence without authority

Shrink the ask, do their first draft, name shared upside, and escalate with options rather than a complaint.

Collaboration and disagreement

Build trust before you need it, disagree with data and options, and make cross-team asks easy to grant.

Cross-team asks

Other teams have roadmaps and review queues. Make saying yes the path of least resistance.

Glue work

The connective tissue that lands projects — and stalls careers if it leaves no artifact. Do it, name it, time-box it.

Psychological safety

People can ask a dumb question, admit a miss, or challenge a plan without being punished. That is not low standards.

Mentors, coaches and sponsors

Mentors advise, coaches question, sponsors put reputation on the line. You need a mix, not one perfect person.

Mentorship: getting it and giving it

Distinguish mentors, coaches and sponsors — then ask well, mentor juniors and grow others as an SDE2.

Asking for mentorship

Ask with a bounded cadence, an agenda and a specific question tied to an artifact. Vague "be my mentor" contracts get declined.

Mentoring juniors

Onboard with a first-week win, teach through reviews, and coach with hints unless the cost of delay is a sev.

Building a mentor bench

Several partial relationships beat one oversubscribed senior. Split craft, career, domain and peer. Cap how many people you mentor deeply.

Sponsorship and growing others

Promotion committees look for people you raised, not Slack answers. Track mentee outcomes the way you track projects.

Running your 1:1s

A 1:1 is not a status meeting. Bring an agenda, rotate themes, and write down the decisions.

Asking and receiving feedback

Specific prompts soon after the work beat "any feedback?" Receive by summarizing first. Evaluate truth later.

Giving feedback with SBI

Situation, Behavior, Impact. Observable events, not character. Praise in public when it will not embarrass; correct in private.

Brag documents

A living note of what you did, the impact, links, and kudos. Review cycle you then compile, not invent.

One-on-ones, feedback and performance reviews

Run your 1:1s, ask for and act on feedback, and keep a brag document through review cycles.

Performance review cycles

Self-review, peers, calibration. Make the true story easy to find, and never let a serious concern appear for the first time on the form.

Growing your career

The scope ladder

Titles track the size of problem you can be trusted with — task, feature, project, then a multi-team problem.

High-leverage work

Impact per hour hides in on-call themes, stuck metrics, roadmap gaps, and daily team friction — not in tickets labeled "promo project."

Growing your scope

From tasks to features to projects to problems: finding and taking on higher-leverage work.

Volunteering for scope

Finish before you expand. Volunteer for the gap your next level requires, with an explicit metric, time box, and non-goals.

Making impact visible

Calibration cannot see work you never wrote down, measured, or demoed. Leave artifacts on purpose.

Promotion is lagging recognition

You get the title after you have already been operating at the next level, usually for more than one cycle.

Building a promo packet

Map two or three linked examples to each next-level criterion. Cut anything that only proves your current level.

Working with your manager on promo

Make the goal explicit, share the brag doc early, and ask for scope that fills gaps — not only adjectives.

How promotion works

Evidence, packets, calibration and the manager conversations that turn next-level work into a title.

Promo blockers and when to move

Most stuck cases are missing scope, invisible impact, or a team with no next-level problems. Sometimes leaving is the plan.

Engineering leverage

Impact divided by time. Ask what the next hour is worth, not whether you looked busy.

Protecting focus time

Hard engineering needs uninterrupted stretches. Treat focus blocks like meetings with a critical stakeholder — you.

Tooling and automation

Time spent learning your editor, shell, and a boring automation threshold compounds for years.

Saying no

Every yes is a no to something else. Seniors allocate help on purpose, with timed yes, partial yes, or an explicit tradeoff.

Productivity, focus and sustainability

Leverage, deep work, saying no, and a pace you can still think clearly at in year five.

Sustainable pace

Burnout is a prolonged mismatch between demand and recovery. Treat the warning signs like a production alert.

Company stage

Big tech, growth-stage and early startup trade learning, scope, pay and risk. Pick the trade for this season.

Choosing teams

Over a two-year window, manager plus business importance plus technical growth usually beats the company logo.

T-shaped skills

Depth in one stem the market pays for, plus a crossbar of literacy so you can collaborate and switch.

Career strategy

Choosing companies, teams and specialties deliberately: big tech vs startups, generalist vs specialist.

Evaluating startup offers

Separate cash, equity, runway and scope. A large option grant is a probability distribution, not a salary.

When to switch jobs

Switch when growth is structurally blocked. Stay when a scope jump or rare exposure is coming. Leave with reputation intact.

A light public profile

Discoverability and proof, not an influencer side hustle. Short posts, one talk, small PRs, factual LinkedIn.

Owning ambiguity

Senior work starts when the problem statement is incomplete. You write down the goals, constraints, and success metrics for others.

Technical leadership without management

You do not need reports to lead. Use design reviews, standards, short strategy, and reviews that teach — and keep coding enough to stay credible.

The path to SDE3 and beyond

What senior engineers do differently: technical leadership, multiplying others and owning ambiguity.

Navigating organizations

Technical excellence that ignores organizations dies in a ditch. Alignment is getting the right people to agree, then keeping that agreement alive.

Staff archetypes

Tech lead, architect, solver, right hand — and the IC vs manager fork. Pick a game on purpose. Do not become a manager because promo is blocked.

A plan from SDE2 to SDE3

A 12–24 month template with explicit gaps, one senior-shaped project, wider influence, and anti-patterns that feel like progress.

Interviewing

How interview loops work

Recruiter screen, coding, onsite, debrief, level, team match, offer. Each round is an independent hire/no-hire that a committee stacks.

What interview rounds measure

Coding scores process under time. Design scores decomposition and trade-offs. Behavioral scores ownership. The debrief scores your level from all three.

Interview preparation strategy

How loops work, what each round measures, and a 6–10 week prep plan that keeps coding, system design and behavioral on track.

Interview prep timeline

A 6–10 week plan with overlapping tracks — coding first, design overlapping, behavioral from day one, mocks last.

Mock interviews

Mocks and recordings fix communication failures that silent grinding never surfaces. Grade process, not vibes.

Batching applications

Apply in a 2–3 week window so offers overlap. Do not open the pipeline before you can clear a timed coding screen.

Startup vs big-tech interviews

Big tech wants patterns, design frameworks and STAR stories. Startups want practical coding, take-homes and product conversation.

The interview problem-solving process

Clarify, work examples, state a brute force, then optimize, code, test and analyze. Interviewers grade the path.

Interview patterns

Learn the trigger, not a code dump. Two pointers, windows, hashing, graphs and a few more cover most mediums.

Communicating while you code

Narrate intent, not keystrokes. Use hints, pick one language, and recover from bugs out loud.

Coding interviews

Patterns, problem-solving process and communication for algorithm interviews — plus how practical coding rounds differ.

Practical coding rounds

Some loops ask you to build, debug or review in a toy repo. Clarity, tests and trade-off talk beat clever asymptotics.

How to practice coding interviews

Curated lists and spaced re-solves beat random volume. Readiness is an unseen medium in about 25 minutes.

Coding interview mistakes

Coding immediately, going silent, and waiting for the optimal solution are the usual fails. Name the miss and recover.

What behavioral rounds assess

Ownership, conflict, ambiguity, impact, mentorship and learning. Past behavior is the predictor they use.

STAR answers

Situation, Task, Action, Result, plus Learning. Spend half the time on what you did.

Building a story bank

Eight to ten deep stories, each mapped to two or three themes. Rehearse out loud. Update after launches.

Behavioral interviews

Story banks, STAR(L), and signaling the level you want — ownership, conflict, ambiguity and impact with numbers.

Signaling level with stories

The same incident can sound junior or senior. Emphasize scope, autonomy and influence for the level you want.

Failure and conflict stories

Honest miss, bounded blast radius, systemic fix. Disagreement with data, then commit. Never trash people.

Handling behavioral deep dives

Interruptions are interest. Prepare alternatives, one metric, one miss inside the success, and who else was involved.

Compensation components

Compare total compensation across base, bonus, sign-on and equity with real vest math — not base alone.

Level vs compensation

At leveled companies, jumping a level usually moves TC more than squeezing the top of a lower band.

Offers and negotiation

Comp components, why level beats base, market data, negotiation scripts and evaluating startup equity without wishful math.

Negotiating an offer

Do not name the first number. Get the offer in writing, then ask with enthusiasm and a specific, market-grounded target.

Evaluating startup equity

Translate percentages into scenarios. Price startup equity as a risk asset, not a promised TC line on levels.fyi.

Juggling multiple offers

Spreadsheet year 1 and years 2–4, score non-comp, then tell your first choice what would make accepting easy. Use deadlines honestly.

Accepting and declining offers

Confirm the package in writing, withdraw other processes promptly, and decline briefly with the door open. Reneging damages reputations.