5 Lessons I learned the hard way from 10+ years as a software engineer
Guest post by Staff Engineer, Gourav Khanijoe
📣 Get more interviews, offers, and money (Event)
Join me and former Google and Meta executive, Alan Stein, to learn the 6 steps to land a better job quickly, confidently, and with lots more money. You’ll learn how hiring decisions are made from Alan, who has interviewed thousands and hired hundreds of top tech professionals. Bring your questions too! We’ll leave plenty of time for Q&A.
Time to dive into this week’s learning!
Hi fellow High Growth Engineer, Jordan here 👋
Today’s article features a special guest, Gourav Khanijoe, Staff Engineer and author of The Curious Soul’s Corner. Gourav reached Staff Engineer in just 8 years and overcame huge hardships getting there. In this article, you’ll learn 5 must-know lessons Gourav had to learn the hard way.
Without further ado, I’ll pass the mic 🎤 to Gourav 👏
When I was a junior engineer, I asked my cousin, a managing director at a software consultancy firm, “What do you do as a Leader?”
He chuckled and joked, “I schmooze my bosses and keep my organization on their toes.”
“Oh, that sounds like an interesting and fun job, isn’t it?” I replied.
He laughed hard and said, “You’ll come back to me one day and answer that question yourself.”
Indeed, he was right. Software engineering leadership, like any other leadership, can be brutal at times. It will challenge you in all aspects of your personality. But it’s also one of the best ways to discover yourself.
My journey from a naive software engineer to an engineering leader has been tough. I've faced unexpected challenges and learned hard lessons. In this newsletter edition, I'll share a few key lessons. I hope you'll learn from them to confidently elevate your path to leadership.
👋 Hey there, I am Gourav. I write about Engineering, Productivity, Thought Leadership, and the Mysteries of the mind!
1) No one is going to drive your career for you.
When I was a senior engineer working toward my next promotion, my manager told me, “Gourav, I can’t drive your promotion anymore. You have to do it yourself.”
I was puzzled. “What kind of manager is he? Hasn’t he handled staff-level promotions before?”
I was delivering projects, but I wasn’t demonstrating leadership. I complained about frustrations in secret instead of addressing them openly. This took a toll on my mental health.
Then, I did some self-reflection and read “Dare to Lead.” I realized that true leaders don't wait to be saved. They create opportunities for themselves—they provide value, learn, and teach others.
No one cares about your career as much as you do. Your leaders have their own challenges. If you don’t take charge of your growth and sell yourself, no one else will.
What I changed and what you can learn from it:
Beyond just delivering projects, sell yourself and be more visible.
Give talks at the company level to enable yourself to become a leader at a broader scale:
I gave demos of my projects and delivered tech talks showcasing the problems I solved.
I also conducted career growth workshops to help engineers grow in their tech journeys.
Make yourself visible at different leadership levels:
I provided regular project updates using the best practices of clear, upfront communication. The updates are succinct with clear action items.
My Director recognized my contributions when I used to write and review business strategy documents. It also provided me with a unique opportunity to influence the long-term vision of the organization.
I was proactive when operational issues came up and I helped the team automate fixes to recurring issues. For example, I automated reconciliation in our payment workflows. My leadership was thrilled to know that it improved our operational agility by 21%.
2) Trust and clear communication triumph raw intelligence
During a crucial Amazon Prime Day, my code broke, impacting thousands of customers. Yet, leadership still promoted me to senior levels.
Why? Because I consistently met stakeholder expectations and communicated proactively during the project’s execution. The proactive communication showed my team I’ll either always make progress or call out when things aren’t going well, which built trust in me as an engineer.
In contrast, a supposed 10x engineer struggled. He had poor communication in that he would miss explaining project statuses, didn’t engage, and lacked a track record of success. So, he was dismissed.
When there’s no trust, people doubt even good actions. But when people trust you, they see mistakes as chances to learn. For example, if you trust someone, you’ll find reasons to support them when they fail. But without trust, every mistake becomes a reason to criticize.
What I changed and what you can learn from it:
Speak with conviction and drive engagement.
I speak with confidence, leveraging my knowledge base while answering questions from engineers, and join tech discussions while also providing space to others to present their views.
I create different Slack channels to drive meaningful engagement and address ongoing concerns on the project that ultimately drives progress on the projects.
Be transparent about hiccups.
I keep my team and leadership in the loop on the newer issues as they pop up.
I don't make the mistake of notifying my manager or stakeholders at the last minute if something won't be delivered.
All these smaller efforts make it easy for others to trust and work seamlessly with you. Transparency and engaging communication builds trust; silence erodes it.
3) No one gives a f**k about who you are
At my previous company, I was the go-to person for everything, with a reputation for knowing the ins and outs of the business and software. My opinions were highly valued, and I felt like the king of my domain.
But, when I joined a new company as a staff engineer, I was shocked to find that no one seemed to care about my suggestions. I assumed my new colleagues would respect my expertise. But, titles and past achievements didn’t matter. No one really cared about my title or opinions until I proved my worth through tangible impact and adjusted to the company’s culture.
What I changed and what you can learn from it:
For quite some time, work at a level below the one you are hired for.
When I onboarded to my last company, I kept my mind open to adapting to a new culture and learning from my juniors as if I’m working at their level. This allowed them to be comfortable working with me.
I allowed myself to be a noob and asked a lot of questions after doing meaningful groundwork. This helped me unlearn old practices while giving me space to acquire new knowledge
Build trust by consistently delivering results.
I remind myself that I have to lead these engineers one day and that can’t be done without earning their trust first.
Remember, it’s a reset when you join a new company. To build trust, I focused on delivering high-quality, bug-free code and took ownership of the projects end to end. This helped me establish credibility and gain loyalty as a leader among other team members.
4) Being consistent is hard; still do it.
Oh, you’re excited about that high-impact project? Great! But you better keep that excitement going for the long haul.
I've had phases where the early excitement of building a team, planning projects, and leading engineers faded after the MVP.
Life happened. I got busy with my family, I bought a new house, I had to get in shape because my blood report wasn't great. At work, priorities shifted. Requirements changed. Engineers got pulled off. Deadlines creeped up. Still, I needed to field tough questions from leadership and answer credibly.
Being consistent shows you’re reliable, which opens doors for future opportunities.
For example, when I had to switch companies, my ex-leaders remembered my perseverance at work and reached out to me for the opportunities they had in their organizations.
How I made consistency a habit:
Consistency is all about making things easier to work with. When you operate with smart tactics that help you make progress, you naturally become consistent.
When things get bumpy, tackle challenges one step at a time.
When I was responsible for every aspect of the project, I found that dividing complex projects into milestones, then further dividing those into small, meaningful tasks helped. It enabled me to communicate different delivery phases to the leadership.
Document every key discussion
Our brains are made for creating ideas, not for remembering. I started documenting every decision made in each phase. This helped me pull references to older discussions whenever questions were asked.
This also helped drive autonomy in the team when I was on vacation.
I kept reminding myself that progress and delivery come first. Excellence and precision follow. There is no long-term without short-term. This helped me make pragmatic decisions like cutting unnecessary scope and prioritizing customer experience over internal tooling
5) Telling others (especially leadership) that they are wrong is harder but worth it
Let me take you to a time I had to speak up in a high-stakes leadership meeting. The Principal Engineer and Senior Manager in my org proposed a design decision in a 6-page document elaborating a long-haul re-architecture of a complex product serving millions of customers in production. In my view, it was heading in the wrong direction due to the overly complex solutions mentioned in the document.
It wasn't easy, but I knew I had to step up and tell them they were wrong.
My palms were sweaty, my heart raced, but I gathered my courage and did it. It was a tough crowd, and the stakes were high, but the alternative—watching the project fail—wasn’t an option.
I spoke up with the details of how I experimented with a different, yet efficient solution that could solve the problem much faster. In my case, instead of being confrontational, I informed them politely:
“I think refactoring this payment orchestration system using a new gateway will have incompatibility with our funding partners. Can I show you the prototype I built, which has details of the stuck workflows?”
To my surprise, everyone appreciated my input and gave me the opportunity to lead the project. I learned that when you need to challenge a decision, do it with humility, and a genuine desire to find the best solution by providing strong data points.
📖 TL;DR
No one is going to drive your career for you
Make yourself visible at different leadership levels–your team, director level, and org-level. You can review or help write docs at each of these levels.
Demo projects, deliver tech talks, conduct workshops.
Trust and clear communication triumph over raw intelligence
Transparency and engaging communication builds trust; silence erodes it.
Know your shit and use it to speak with confidence when answering questions, or be honest when you don’t know.
Share issues early when they pop up. Don’t surprise your manager with bad news at the last minute. Tell them almost right away.
No one gives a f**ck about who you are
When joining a new team or company, behave like the noob and seek to understand the systems deeply. Don’t expect your new company to adapt to you.
Give good first impressions by focusing on quality and impact early rather than speed.
Ask your team their problems and work to solve those, not your own.
Being consistent is hard; still do it
Divide all work into chunks. Then divide it more. Each step will feel like progress and you won’t lose consistency.
For long projects, document every key decision because they will come up again.
Telling others (especially leaders) that they’re wrong is hard but worth it
Approach the discussion with a genuine desire to find the best solution.
Use data and prototypes to back up your claims when the stakes are high.
🙏 Thank you to Gourav
Jordan here again 👋
Thank you to Gourav for sharing these hard-earned lessons. I loved being put in Gourav’s shoes each time and the actionable tips that went with each one. To learn more from Gourav, check out his newsletter, The Curious Soul’s Corner.
👏 Shout-outs of the week
My Strategy Against Distractions as an Engineer on
— 10 practical strategies to avoid distractions and get more done.How to deliver with high-quality at work on
— Tons of small tweaks you can make in your day-to-day work that make a huge difference in qualityMid-level To Staff In Two Years By Job Hopping on
— Real-world example, story, and lessons on getting promoted through job hopping.
Thank you for being a continued supporter, reader, and for your help in growing to 78k+ subscribers 🙏
Next week, I’ll share communication frameworks and mindset shifts you can use as an engineer to build your presence and influence—with real-world examples.
You can also hit the like ❤️ button at the bottom of this email to help support me or share this with a friend to get referral rewards. It helps me a ton!
All 5 lessons from Gourav resonated with me.
People don't care about your title or about your past, but they care about what you show them you can do. Remembering that prevents you from feeling entitled, so you always do your best work.
Thanks for the mention to my article, Jordan, I appreciate it!
I really found your insights valuable and can totally relate! As software engineers, we often forget how important it is to share updates and provide visibility into our work. We sometimes think our code will speak for itself, but effective communication not only keeps everyone aligned but also shows confidence. Thanks Gourav for sharing your experience—it's a great reminder for all of us!