Skip to main content

Command Palette

Search for a command to run...

The Mentor Who Taught Me to Think Like Senior Dev

Learn: The Mentor Who Taught Me to Think Like Senior Dev

Updated
9 min readView as Markdown
T

Welcome to TopperBlog! 👋

I'm a tech content creator passionate about helping developers level up their careers and master cutting-edge technologies.

🎯 What I Write About: • AI/ML Engineering & LLMs • Web3 & Blockchain Development
• System Design & Architecture • Interview Preparation (FAANG) • Freelancing & Remote Work • Modern Tech Stacks (Next.js, React, Rust, TypeScript) • Performance Optimization & Best Practices

💼 Mission: Sharing practical, actionable insights that accelerate your tech career and maximize your earning potential.

📚 15+ In-Depth Guides covering everything from earning $10k/month as a freelancer to cracking FAANG interviews.

🌐 Let's connect and grow together in this amazing tech journey!

#TechBlogger #SoftwareEngineering #CareerGrowth #WebDevelopment #AIEngineering

The Mentor Who Taught Me to Think Like a Senior Dev

I still remember the exact moment I realized I was a terrible developer.

It was 2:47 AM on a Tuesday. I'd been debugging the same feature for eleven hours straight. My code worked—technically—but it was held together with duct tape, prayers, and seventeen nested if-statements. When my pull request finally went up, my mentor Alex left a single comment: "This solves the problem. But does it solve the right problem?"

I wanted to throw my laptop out the window.

That comment changed everything.

The Developer I Used to Be

Six months into my first real engineering job, I thought I had it figured out. I could write code. I could Google error messages. I could ship features. What else was there?

My approach was simple: someone gives me a ticket, I write code until the ticket is done. Feature requests came in, features went out. I was a code vending machine, and I was proud of my velocity.

Then Alex became my mentor, and my comfortable little world imploded.

The First Lesson: Stop Coding So Fast

Our first one-on-one, Alex asked me to walk through a feature I'd just shipped. I pulled up my code, ready to showcase my elegant solution.

"Before the code," Alex interrupted. "Tell me about the problem."

I blinked. "The ticket said to add a filter to the dashboard—"

"No. The problem. Why did someone request this filter?"

I had no idea. I'd never asked.

Alex pulled up Slack and showed me the original conversation. A customer success manager mentioned that three enterprise clients were manually exporting data to Excel just to filter by date range. They were spending hours on a task that should take seconds. One client was considering switching to a competitor.

"You built a filter," Alex said. "But the problem was that we were losing customers because our dashboard wasn't meeting their workflow needs. Different problem, different solution."

We spent the next hour whiteboarding. Not code—just understanding. What were these clients actually trying to accomplish? Why Excel? What other pain points existed in their workflow?

By the end, we'd sketched out a solution that wasn't just a filter. It was a saved views system that let users create, name, and share custom dashboard configurations. It took three days longer to build, but it solved the actual problem.

Two months later, that feature became our most-used dashboard capability. One of those at-risk clients upgraded their plan.

The lesson: Senior developers don't just write code faster. They spend more time understanding problems so they write less code that matters more.

The Second Lesson: Your Code is a Liability

I used to measure my productivity in lines of code written. More code = more work = more value. Right?

Alex destroyed this illusion during a code review. I'd built an elaborate caching system with multiple layers, invalidation strategies, and a custom configuration DSL. I was so proud.

"This is impressive," Alex said. "Now delete it."

"What?"

"How many users will notice if we remove this?"

I did the math. Maybe 200 users would see page loads drop from 1.2 seconds to 1.8 seconds. The rest wouldn't notice at all.

"And how many hours did this take you?"

"About forty."

"And how many hours will it take the next person to understand this system when something breaks?"

I hadn't thought about that.

Alex showed me an alternative: a simple Redis cache with a 5-minute TTL. Twenty lines of code. It handled 95% of the performance improvement with 5% of the complexity.

"Every line of code you write is a liability," Alex explained. "It's something that can break. Something that needs to be maintained. Something the next developer has to understand. Senior developers minimize liabilities while maximizing impact."

We deleted my elaborate system. I felt like I'd wasted a week.

"You didn't waste anything," Alex said. "You learned that the best code is often the code you don't write. That's worth more than any feature."

The lesson: Code isn't an asset—it's a liability. The best solution is usually the simplest one that solves the problem.

The Third Lesson: Think in Systems, Not Features

Three months in, I was feeling confident. I understood the codebase. I was asking better questions. I was writing simpler code.

Then Alex assigned me a "simple" ticket: add email notifications when a report finishes processing.

I built it in a day. Users got emails. Ticket closed.

Alex reopened it with a wall of questions:

  • What happens when we have 10,000 users generating reports simultaneously?
  • How do we handle email delivery failures?
  • What if a user generates 50 reports in an hour?
  • How do we test this without spamming real email addresses?
  • What happens when we want to add Slack notifications next quarter?
  • How do we let users control notification preferences?
  • What's our email sending cost at scale?

I'd solved the feature. I hadn't thought about the system.

We spent two days redesigning. We built a notification queue. We added rate limiting. We created a notification preferences system. We abstracted the delivery mechanism so adding Slack would be trivial. We added proper monitoring and alerting.

The "simple" feature became a robust notification system that we used for the next three years.

"Junior developers think in features," Alex told me. "Senior developers think in systems. Every feature you build is part of a larger system. It needs to scale, fail gracefully, and evolve over time."

The lesson: Every feature exists within a system. Consider scalability, failure modes, future requirements, and maintenance burden.

The Fourth Lesson: Your Job Isn't Writing Code

Six months into our mentorship, Alex stopped reviewing my code.

"You don't need me anymore for that," Alex said. "You're writing good code. But you're still not thinking like a senior developer."

I was confused. What else was there?

Alex started asking different questions:

  • "Who else needs to know about this change?"
  • "How will you communicate this to the team?"
  • "What documentation needs updating?"
  • "How will you measure if this actually solved the problem?"
  • "What did you learn that would help other developers?"

I realized I'd been operating in a bubble. I wrote code, submitted PRs, and moved on. I never thought about the ripple effects.

Alex taught me that senior developers are force multipliers. They:

  • Document decisions so others don't have to rediscover the same insights
  • Share knowledge through tech talks, wikis, and pairing sessions
  • Mentor others because growing the team's capability matters more than individual output
  • Communicate proactively so stakeholders aren't surprised
  • Think about the team's velocity, not just their own

I started writing design docs before building features. I gave a brown bag talk about the notification system. I paired with junior developers on complex tasks. I updated our team wiki religiously.

My individual code output dropped. But the team's output increased.

The lesson: Senior developers multiply the effectiveness of everyone around them. Impact matters more than output.

The Fifth Lesson: Embrace Uncertainty

A year into our mentorship, I brought Alex a problem I couldn't solve. We were building a new analytics pipeline, and I couldn't decide between three different architectural approaches. I'd spent days researching, prototyping, and analyzing.

"Which one should I choose?" I asked.

"I don't know," Alex said.

I waited for more. Nothing came.

"You... don't know?"

"Nope. Each approach has tradeoffs. The 'right' answer depends on constraints we won't fully understand until we're six months into using it."

This was not the wisdom I was expecting.

"So what do I do?"

"Make a decision. Document why you made it. Build in flexibility to change it later. And don't beat yourself up when you discover it wasn't perfect."

Alex explained that senior developers don't have all the answers. They're just better at making decisions with incomplete information.

"Junior developers wait for certainty," Alex said. "Senior developers act despite uncertainty. They make the best decision they can with the information available, and they build systems that can adapt when they're wrong."

I picked an approach. It wasn't perfect. We refactored parts of it eight months later. But we shipped, we learned, and we adapted.

The lesson: You'll never have perfect information. Make the best decision you can, document your reasoning, and build in flexibility.

The Transformation

Two years after that 2:47 AM debugging session, I found myself mentoring a new junior developer. She submitted a PR with seventeen nested if-statements.

I left a comment: "This solves the problem. But does it solve the right problem?"

She looked confused. We scheduled a one-on-one.

I realized then how much I'd changed. I wasn't just writing better code—I was thinking differently. I was asking better questions. I was considering systems, not just features. I was multiplying the team's effectiveness, not just my own.

Alex had taught me that becoming a senior developer isn't about mastering syntax or memorizing design patterns. It's about developing a different mindset:

  • Problem-first thinking: Understand the why before the how
  • Simplicity bias: The best code is the code you don't write
  • Systems thinking: Every feature is part of a larger whole
  • Force multiplication: Your impact is measured by the team's success
  • Comfortable uncertainty: Make decisions despite incomplete information

The Real Gift

The most valuable thing Alex taught me wasn't technical. It was this: mentorship isn't about having all the answers. It's about asking the right questions.

Alex never told me what to do. Alex asked questions that made me think differently. Questions that challenged my assumptions. Questions that expanded my perspective.

Now, when I mentor others, I try to do the same. I don't give answers—I ask questions:

  • What problem are we really solving?
  • What's the simplest solution that could work?
  • How does this fit into the larger system?
  • Who else needs to know about this?
  • What will you do when you're wrong?

Because that's what mentorship is: not transferring knowledge, but transforming how someone thinks.


That 2:47 AM debugging session feels like a lifetime ago. I'm still not a perfect developer—I still write bugs, make wrong decisions, and occasionally nest too many if-statements.

But I think differently now. And that makes all the difference.

If you're lucky enough to find a mentor like Alex, cherish it. If you're experienced enough to be someone's Alex, do it. The impact ripples further than you'll ever know.

And if you're that developer at 2:47 AM, staring at seventeen nested if-statements, wondering if you'll ever figure this out—you will. Not by writing more code, but by learning to think differently.

The right mentor doesn't teach you to code better. They teach you to think like a senior developer.

That's the gift that keeps giving.