Tech interviews
Junior vs Middle vs Senior Interviews: What Each Level Expects
How junior, middle and senior developer interviews differ: the same question at three depths, system design and behavioral expectations, and how to pick your level.
Contents
- What the Levels Mean in Practice
- Comparison Table
- The Same Concept at Three Levels
- System Design Expectations
- Behavioral Expectations per Level
- Red Flags Interviewers Notice
- How to Self-Assess Your Level Honestly
- How to Answer When You Don't Know
- Moving from Junior to Middle
- Moving from Middle to Senior
- Summary
Most interview loops for junior, middle and senior developers cover the same topics: React, databases, caching, APIs. What changes is how deep the questions go, and what the interviewer is actually trying to find out. If you know what each level is graded on, you can prepare for the right interview and apply for the level you can actually defend.
What the Levels Mean in Practice
Job titles vary a lot between companies, but most hiring managers mean roughly this:
- Junior: Can finish a well-defined task with guidance. Someone else breaks down the work, reviews the approach and catches the edge cases. The main signal is learning speed.
- Middle (mid-level): Owns a feature from start to finish without close supervision. Turns a vague ticket into concrete tasks, makes sensible local decisions and asks for help at the right moment, not too early and not too late. The main signal is reliable delivery.
- Senior: Owns outcomes rather than tasks. Shapes the technical direction of a system or a team, spots risks before they turn into incidents, makes other engineers more effective, and can explain trade-offs to non-engineers. The main signal is judgment and impact beyond their own code.
The cleanest way to tell the levels apart is the size of the ambiguity you can handle alone. A junior handles a clear task, a middle handles a feature, and a senior handles a problem nobody has framed yet.
Comparison Table
| Dimension | Junior | Middle | Senior |
|---|---|---|---|
| Scope | Single task or bug | Feature or small service | System, team or cross-team problem |
| Autonomy | Needs regular guidance | Works independently, escalates wisely | Defines the work for others |
| Ownership | Code they wrote | Feature in production | Outcomes, reliability, long-term cost |
| Typical question | "What is X?" | "How would you use X here?" | "Should we use X at all, and what breaks?" |
| System design | Rarely asked, or very basic | One service with a database and a cache | Distributed system, failure modes, evolution |
| Behavioral focus | Learning, receiving feedback | Delivery, collaboration, conflict | Influence, mentoring, decisions under uncertainty |
| Biggest red flag | Memorized answers with no understanding | Can't justify their choices | Hand-waving trade-offs, no real ownership stories |
The Same Concept at Three Levels
This is where the levels show most clearly. Interviewers often ask about the same topic and simply keep pushing until they find where your understanding stops.
React re-rendering
- Junior: "When does a React component re-render?" A good answer: when its state changes, when its parent re-renders, or when a context it consumes changes. Bonus points for knowing that a parent re-render triggers a child re-render even if the props haven't changed.
- Middle: "A list of 2,000 rows lags every time the user types in a search box above it. What do you do?" They want you to diagnose before you optimize. Use the React Profiler, move state closer to where it's used, memoize the rows with
React.memoand stable callbacks, and consider virtualization oruseDeferredValue. - Senior: "Our dashboard is slow and the team keeps adding
useMemoeverywhere. How do you approach it?" Now the question is about strategy: measure first, decide where state should live (server cache vs. client state), see where memoization costs more than it saves, set up performance budgets, and keep the fix maintainable for the whole team.
Practice this progression: React junior, React middle, React senior.
Database indexes
- Junior: "What is an index and why does it make queries faster?" A data structure (usually a B-tree) that lets the database find rows without scanning the whole table.
- Middle: "This query filters by
user_idand sorts bycreated_at, and it's slow. What index would you add?" A composite index on(user_id, created_at). You should explain why the column order matters and how to confirm the fix withEXPLAIN. - Senior: "Writes on our main table got slower after we added several indexes, and replicas are lagging. What now?" Talk about write amplification, unused or redundant indexes, how to build an index online without locking the table, read/write separation, and when the real fix is changing the data model or partitioning instead of adding another index.
-- Middle-level answer, verified rather than guessed
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at DESC);
EXPLAIN ANALYZE
SELECT * FROM orders WHERE user_id = 42 ORDER BY created_at DESC LIMIT 20;
Test yourself: Databases middle, Databases senior.
Caching
- Junior: "What is a cache?" Fast storage that holds results you'd otherwise have to recompute or refetch. Know what a hit and a miss are, and what TTL means.
- Middle: "Add a Redis cache in front of the product details endpoint." Cache-aside pattern, picking keys, choosing a TTL, and invalidating on update. Mention what users see while the data is stale.
- Senior: "A popular cache key expires and the database falls over. Design the fix." Cache stampede and thundering herd, request coalescing, jittered TTLs, stale-while-revalidate, the cache as a single point of failure, and what happens when Redis itself goes down.
Practice: Caching senior.
System Design Expectations
- Junior: Often skipped. If it does come up, expect "how does a web request travel from the browser to the database and back?" Interviewers want a correct mental model of client, server, database and HTTP.
- Middle: Design one service, for example a URL shortener or a notifications API. Expected: a clear API, a sensible schema, one caching layer, basic scaling (stateless app servers behind a load balancer) and some sense of the bottlenecks.
- Senior: You drive the conversation. Clarify requirements and the numbers (traffic, data size, read/write ratio), propose a design, then stress it yourself: what fails, how it degrades, how you'd roll it out, what it costs, and how it changes at 10x traffic. Interviewers care much more about the reasoning than about the final diagram.
Good preparation: Scalability middle and the real-world case studies at senior level.
Behavioral Expectations per Level
The behavioral questions are often the same at every level ("tell me about a conflict"). What changes is the scope of the story they expect to hear.
- Junior: A time you got stuck and how you got unstuck, how you handled critical code review, something you learned on your own. Honesty and curiosity count for more than impressive results.
- Middle: A feature you delivered with unclear requirements, a disagreement with a teammate or a product manager, a bug you caused and how you fixed it. Interviewers listen for "I" and concrete actions, not "we".
- Senior: A technical decision you pushed for and later regretted, how you raised the level of a weaker teammate, how you said no to a deadline, an incident you led. They expect trade-offs, numbers and second-order effects ("the migration cost us two sprints, but cut on-call pages by 60%").
Use a simple structure: the situation, your specific action, the measurable result, and what you'd do differently next time.
Red Flags Interviewers Notice
Junior
- Reciting definitions but falling apart at the first "why?"
- Pretending to know instead of thinking out loud.
- No evidence of building anything outside tutorials.
Middle
- Choosing a tool because "it's best practice" without being able to explain why.
- Jumping straight into coding without clarifying requirements or edge cases.
- Ignoring testing, error handling or how to verify the fix.
Senior
- Saying "it depends" and stopping there. Seniors say what it depends on and then pick an option.
- Over-engineering: microservices and Kafka for a problem that needs one Postgres table.
- Stories with no personal ownership, no failures, and no impact on other people.
- Never asking about constraints, the team or the business context.
How to Self-Assess Your Level Honestly
Years of experience are a weak signal. Five years of repeating the same year doesn't make someone senior. Ask yourself these instead:
- Ticket test: Given a vague one-line ticket, can you produce a plan, an estimate and a list of risks without help? If yes, you're at least middle.
- Production test: Have you owned something running in production, been paged for it, debugged it and prevented the same problem from happening again?
- "Why not" test: For your last three technical decisions, can you name the alternatives and explain why you rejected them?
- Multiplier test: Has another engineer become noticeably better because of your reviews, docs or mentoring? This is the clearest senior signal.
- Quiz test: Take the junior, middle and senior quizzes on topics you use every day, for example JavaScript middle. If you consistently score well at one level but guess at the next, that gap tells you more than your job title does.
If you're between two levels, apply for the lower one at a strong company or the higher one at a company where you clearly match the stack. Being placed slightly below your level and then promoted is much better than being placed above it and struggling.
How to Answer When You Don't Know
At every level, "I don't know" with nothing after it is a weak answer, and a confident bluff is worse. A strong pattern:
- Say it plainly: "I haven't used that directly."
- Reason from what you do know: "But if it works like X, I'd expect..."
- Explain how you'd find out: docs, a small experiment, profiling, asking the owner.
For seniors, interviewers deliberately push you past the edge of your knowledge. How calmly and structurally you reason there is the test.
Moving from Junior to Middle
- Stop waiting for perfectly specified tasks. Break down your own tickets and write the plan before you code.
- Learn to debug without help: read stack traces, use the debugger and profiler, read library source code.
- Own a feature all the way to production, including tests, monitoring and the follow-up bug fixes.
- Go deep on fundamentals: the event loop, closures, HTTP, SQL. Practice with JavaScript junior until the answers feel obvious.
Moving from Middle to Senior
- Shift from "how do I build this?" to "should we build this, and what will it cost us in a year?"
- Write design docs and invite criticism. Document what you rejected and why.
- Take on the unglamorous work: incidents, migrations, flaky tests, onboarding. That's where ownership shows.
- Mentor on purpose. Review code to teach, not just to approve.
- Learn distributed systems properly: consistency, replication, queues, failure modes.
Summary
The topics hardly change between levels, but the depth does: juniors explain what, middles apply it to a scenario, and seniors weigh trade-offs and failure modes. Prepare for the level you can honestly defend under follow-up questions. Then find your gaps by testing yourself on the same topics at all three levels on DevTier.
Practice these topics
More articles
System Design Interview: A Step-by-Step Guide to Passing
Prepare for your system design interview with a proven 45-minute framework, estimation examples, core building blocks, a URL shortener walkthrough, and a study plan.
Backend Interview Guide: Node.js, APIs, Databases & More
A complete backend interview guide: Node.js event loop, API design, SQL and NoSQL, Redis caching, auth, message queues, a 4-week plan and level expectations.
Frontend Interview Guide: How to Prepare, Step by Step
A complete frontend interview guide: interview stages, Junior vs Senior expectations, the most asked HTML, JavaScript, React and Next.js questions, and a 4-week plan.