Skip to content
ExponaBLOG
ENGINEERING CRAFT · DAY 058 / 100

Mentoring junior developers: what developers should know

How I help juniors grow faster.

Expona Admin7 min read

Mentoring junior developers is one of the highest-impact things you can do as a mid-level or senior engineer. The return on investment—in productivity, retention, and code quality—far outweighs the time you spend, yet most engineers don't approach it systematically. Over the past 5.5 years building teams across e-commerce, CRM, and SaaS platforms, I've learned that intentional mentoring turns a junior from slow and uncertain into a productive, confident contributor within months.

Pair on real work — Learning happens best on actual tickets

The single most effective learning method I've found is pairing directly on production tickets. Not toy problems, not prepared code samples—actual work that matters. When a junior sits with you while you debug a Kafka consumer issue or refactor a React component, they see the real decision-making process: which tools to reach for, how to read error messages, what to Google, when to ask for help.

I typically start by letting the junior drive. They navigate the codebase, ask questions, try approaches. I watch. When they get stuck, I don't give the answer—I ask a guiding question. "What does that error message tell you?" or "What happens if you log the state here?" This keeps their brain engaged. After they've worked through it, we pair on implementation together. I take the keyboard, narrate what I'm doing and why, and hand off to them for the next chunk.

Here's a concrete example. A junior on my team was assigned a bug: orders in the payment system were missing transaction IDs in certain edge cases. Rather than fix it myself in 20 minutes, I blocked off an hour for us to pair. We:

  1. Reproduced the issue locally together
  2. Traced through the NestJS middleware stack to find where the ID should be attached
  3. Found that a retry handler wasn't preserving the transaction context
  4. Wrote tests to cover the edge case
  5. They wrote the fix while I reviewed

The junior now understands how transaction state flows through their system, knows how to trace similar issues, and has seen the pattern of test-first debugging. That's worth ten times the time I invested.

Pairing also builds psychological safety. They see that you don't know everything either—you look things up, you make mistakes, you refactor—and that normalizes the learning process. I've had juniors tell me that pairing sessions were the first time they felt they could ask a "dumb question" without worry.

Explain the why — Context helps people make good decisions alone next time

Code is the what. Architecture and constraints are the why. A junior who only follows instructions becomes dependent; a junior who understands the constraints becomes autonomous.

When you're reviewing code or teaching a pattern, always surface the trade-offs. If you're showing them how to structure a Redux store or organize a Next.js API route, explain why you're doing it that way and what alternatives you rejected.

For example, I was reviewing a junior's code that was fetching data in a useEffect without a dependency array. Rather than just say "add the dependency array," I said:

"Right now, this effect runs after every render. That's inefficient—we're making an API call every time the component re-renders, even if the data hasn't changed. By adding a dependency array with just the userID, we're telling React: 'only run this when userID changes.' But there's a trap—if we miss a dependency, we get stale data. That's why the linter exists. Let's think about what data this effect actually depends on."

Now the junior understands the mental model, not just the rule. Next time they write an effect, they'll get it right because they know the why.

This applies to architecture too. At one company, we chose PostgreSQL + Redis over a NoSQL-only stack. I spent time with the junior explaining:

  • Why we need strong consistency for financial transactions (the why for Postgres)
  • Why we need Redis for session state and real-time feeds (the why for Redis)
  • What would break if we picked one or the other
  • When to use each in new features

Six months later, that junior designed a new feature and made sound database choices independently. They weren't following a rule; they were applying principles.

Give them ownership — Small features end to end build confidence

Pair programming and code review are essential, but they're not enough. At some point, a junior needs to own something end-to-end. Not a one-liner fix—a real feature: design, implementation, testing, PR, production.

The trick is picking the right scope. Too small and it's not meaningful. Too large and they get lost. I look for features that are:

  • Isolated—won't touch five different systems
  • Clear acceptance criteria—so they know when they're done
  • Moderate complexity—uses patterns they've seen, but challenges them
  • Low risk—if it breaks, it doesn't take down payments

In a CRM system, I assigned a junior the task: "Add a 'soft delete' feature to contacts—when deleted, they're archived but not removed from the database." Seems simple, but it requires them to:

  • Modify the database schema (migrations)
  • Update the repository queries to exclude soft-deleted records
  • Change the API endpoint to soft-delete instead of hard-delete
  • Write tests at each layer
  • Update related endpoints (like list contacts, get contact)

They had to think through a feature vertically—database → backend → API → frontend. They discovered edge cases (what if you accidentally soft-delete the same record twice? What about foreign keys?). They hit problems, debugged them, and solved them. Most importantly, they felt the full ownership arc: uncertainty at the start, confidence at the end.

I reviewed their PR carefully but didn't rewrite it. Where there were gaps, I asked questions instead of fixing it: "Did you think about the list endpoint? Should soft-deleted contacts show up there?" They went back, thought it through, and fixed it. That's growth.

Regular one-to-ones — Short, consistent check-ins catch problems early

I block 30 minutes weekly with each junior I mentor. Not performance reviews or status updates—genuine one-on-ones where they bring what's on their mind, and I listen.

What I ask about:

  • "What did you learn this week?" (reveals what's clicking and what's not)
  • "What's blocking you or frustrating you?" (catches problems before they turn into resignation)
  • "Is there a pattern or technology you want to dive deeper into?" (shows where they're motivated)
  • "How are you feeling about your pace and progress?" (catches imposter syndrome early)

These conversations have surfaced real issues. A junior once mentioned feeling lost in a massive codebase—they were pairing and reviewing code but didn't have a coherent mental model of the system. We blocked off focused time to document the architecture together. Another junior was frustrated because they were being assigned only bug fixes and wanted to build features. We fixed the assignment strategy. Without the one-on-one, both of these would've festered.

The consistency matters. A 30-minute weekly slot creates psychological safety and predictability. They know there's always a time to ask me anything. I've also found that juniors are more likely to bring real problems when it's a regular rhythm than in ad-hoc "let me know if you need anything" offers.

During these meetings, I also share my own struggles and learning. If I'm stuck on a system design problem or just learned something that humbled me, I tell them. It signals that learning never stops, and uncertainty is normal even for experienced engineers.

Common mistakes

Not letting them fail. Rescuing a junior before they've hit a wall prevents them from building problem-solving muscle. Let them spend time debugging. Let them write code that's not optimal. Let them discover why their approach breaks in testing. Failure is the accelerant.

Mentoring through proximity, not intention. Some teams assume juniors will pick things up by osmosis if they sit near senior engineers. They won't. Mentoring requires time blocked, consistent pairing, explicit teaching, and feedback. Treat it like part of your job, because it is.

Keeping them in the shallow end too long. Fear of slowing down the team makes leads assign juniors only to small, isolated tasks. They plateau. At some point, you have to let them own something that matters and accept the temporary productivity hit. It pays back in months.

Assuming they understand the why. Many junior issues stem from missing context, not missing ability. Don't assume they know why you chose that framework, why that service is separate, or why you refactored in that direction. Spell it out.

Inconsistent availability. Mentoring is like training a muscle—sporadic effort yields sporadic results. If you pair one week and disappear for three weeks, trust erodes and momentum dies. Even 30 minutes weekly is better than chaotic long sessions.

Key takeaways

  • Pair on real production work. It's the fastest way to transfer tacit knowledge and show actual decision-making.
  • Always surface the why—constraints, trade-offs, alternatives. Context is what unlocks autonomous decision-making.
  • Give juniors end-to-end feature ownership early. The psychological win and vertical learning are worth the temporary velocity dip.
  • Schedule regular one-on-ones. Consistency creates safety and catches problems before they compound.
  • Model curiosity and continued learning. Show them that you don't know everything and that's fine.
  • Let them fail in low-risk contexts. Struggle builds the neural patterns for problem-solving.
  • Treat mentoring as a core responsibility, not something you do when you have free time. The ROI on a junior becoming productive and confident is massive.
ShareXLinkedInReddit

Found this useful? Support the writing.

Buy me a coffee
Written by
Expona Admin
Site administrator

Comments

Loading comments…

Leave a comment

Comments are reviewed before they appear. Be kind and stay on topic.

Related articles