62. 7 Hard-Earned Lessons About Software Engineering Careers
From Tech Debt to Team Growth: A Guide to the Real World of Software Engineering
Introduction
No machine learning system design today! :)
You can enjoy a more “meta” newsletter article about career.
I came across [1] and it resonated with me.
1. Early in your career, you can learn 10x more in a supportive team in 1 year, than coding on your own
This means you should be optimizing for learning opportunities in the early stages of your career. You have a long road ahead where you will be compensated for your skills.
2. Every company has problems, every company has technical debt.
Yeah. Stop glamourising FAANG companies. Every company has its own set of cons and tech debt. I’d even argue that a company that has no tech debt is not pushing hard enough. A good balance between dev productivity, speed and tech debt is super important but hard to get right.
3. Many conference talks cover proof of concepts rather than real-world scenarios.
That’s right. Not much to say here. The day to day work at tech company is often not so glamorous. It’s extremely rare to get a chance to build a product from 0 to 1.
4. Dealing with legacy is completely normal
Think about it. I work at Google: a 25 years old company (!!!!). Can you imagine the amount of legacy code that has not been cleaned up, despite all best efforts?
Again, that’s just how software systems are.
5. Architecture is more important than nitpicking
A solid architectural foundation is essential for building scalable and maintainable software systems. Don't get bogged down in minor details at the expense of the overall system design.
Focus on creating a well-structured architecture that can adapt to changing requirements and grow with the project.
6. Focusing on automation over documentation where appropriate
Prioritize automation whenever possible to improve efficiency and reduce manual effort. While documentation is important, automate repetitive tasks to free up time for more strategic work. Use tools and scripts to streamline processes and ensure consistency.
7. Senior engineers must develop many skills besides programming.
You cannot be a code monkey all your life if you want to advance your career. (unless you are jeff dean)
As you progress in your career, expand your skill set beyond programming. Senior engineers are often responsible for technical leadership, mentoring, project management, and strategic decision-making. Develop skills in communication, problem-solving, and collaboration to effectively contribute to your team and organization.
[Bonus one] We’re all still junior in some areas.
It's okay to admit that we're still learning and growing, even as experienced engineers. There will always be new technologies, frameworks, and challenges to explore. Maintain a growth mindset and embrace opportunities to learn and develop your skills throughout your career.
Did you like this meta article? You will like these articles!
[Special edition] Scaling Your Impact: Lessons learned from 1,000 Pull Requests and 100,000 Lines of Code
I have just crossed 100k line of code changes at Google (added, removed and edited) with about more than 1000 change lists (CLs ~= Pull requests) in just a bit more than 2 years. (Yes, that’s around 2 per day for every working day, woah!)
Closing thoughts
Hope you liked the change of pace.
Let me know what you think! Your feedback is suuuper important :).