What Nobody Teaches You About Engineering (And Why I Started a Free Mentorship Program)
Over the years, I’ve noticed a pattern.
Most engineers don’t struggle because they can’t code. They struggle because of everything around the code.
After nearly 15 years in engineering, I decided to run a free mentorship program for young engineers. Not to teach programming—but to talk about the things that are rarely covered in tutorials, bootcamps, or university courses.
There are already thousands of excellent resources online that teach you how to write code. You don’t need another person explaining loops, frameworks, or syntax.
What you do need is context. Judgment. Perspective.
The kind of knowledge you usually gain only after projects fail, systems break, deadlines slip, and people clash.
That was the gap this mentorship aimed to fill.

The Goal: Knowledge Transfer, Not Skill Training
This mentorship wasn’t about shortcuts or hacks.
It was about knowledge transfer—sharing lessons that normally take years of real-world experience to internalize, and helping young engineers get a small but meaningful head start.
We focused on the invisible parts of engineering: decision-making, trade-offs, communication, and responsibility.
Here’s what we covered, and why it matters.
Project Planning: Why “Perfect Plans” Still Fail
I didn’t teach how to create project plans.
Instead, we talked about why good plans fall apart.
Most projects don’t fail because the plan was poorly written. They fail because:
-
Priorities weren’t aligned
-
Risks were ignored or hidden
-
Stakeholders had different definitions of “done”
-
Delivery pressure overrode reality
We discussed practical tools like the MoSCoW prioritization principle, delivery KPIs, and the importance of internal understanding sessions—making sure everyone involved understands not just what is being built, but why.
Planning isn’t about documents. It’s about alignment.
Database Design: Decisions That Come Back Years Later
Designing a database schema is easy. Designing one that survives change is not.
Yes, you can ask AI to design tables. Anyone can.
What we focused on were the long-term consequences:
-
When normalization helps—and when it creates unnecessary complexity
-
When denormalization is the right trade-off
-
Why over-engineering early can be just as harmful as under-engineering
-
How ETL processes shape your future data strategy
-
Why sharding is often misunderstood and prematurely applied
Database decisions are hard to reverse. We talked about thinking beyond “what works now” and considering “what breaks later.”
APIs, Logging, and Error Handling: The Backbone of Real Systems
Modern systems live and die by their APIs.
If your API returns an error message with a 200 OK status, you already have a serious problem—even if “it works.”
We talked about:
-
Designing APIs that communicate failure clearly
-
Why structured, meaningful logs matter
-
How bad logging turns debugging into guesswork
-
Why good logs can literally save your job during an incident
Logs consume storage, yes. But when something breaks at 3 a.m., proper logs and error handling are the difference between panic and control.
Good error handling isn’t just best practice—it’s peace of mind.
Change Management: The Reality Nobody Prepares You For
Almost no one talks about this—but everyone experiences it.
Requirements change. Business goals shift. Team members leave or join.
And these changes often happen mid-development.
We spent a significant amount of time discussing how to deal with change without:
-
Burning out
-
Breaking trust
-
Sabotaging the project
Change isn’t a failure. Poorly managed change is.
Learning how to adapt without losing momentum is one of the most valuable skills an engineer can develop.
Collaboration, Knowledge Sharing, and Crisis Management
One uncomfortable truth: Ego is one of the biggest problems in engineering.
Smart people clash. Opinions harden. Pressure reveals character.
We talked openly about:
-
Navigating disagreements without escalation
-
Sharing knowledge instead of hoarding it
-
Handling crises without playing the blame game
When things go wrong—and they will—the way you respond matters more than the mistake itself. Engineers who remain calm, collaborative, and accountable during a crisis become the most trusted people in the room.
Testing and Communication: Your Job, Not Someone Else’s
Testing isn’t just the QA team’s responsibility.
Automated tests help. Manual testing helps.
But users will always find ways to break your system that you never imagined—even in your worst-case scenarios.
That’s why engineers must test while writing code.
We also spent time on communication:
-
Talking to teammates without frustration
-
Updating management without defensiveness
-
Communicating issues clearly to stakeholders
Great engineers aren’t just technically strong—they’re understandable, calm, and professional under pressure.
Final Thoughts
This mentorship wasn’t about teaching tools, languages, or frameworks.
It was about judgment, context, and experience—the parts of engineering that don’t show up in documentation but define your career over time.
If you’re early in your engineering journey, seek out these conversations. If you’re experienced, consider sharing what you’ve learned.
Because the most valuable lessons in engineering aren’t written in code—they’re written in experience.