I've spent the last 10 years working as a professional programmer and these are some of the lessons I have learned along the way.

Career Growth

  • If you want to grow in your career, don't stay in your comfort zone for too long. Changing companies can expose you to new environments, new challenges, new people, and new ways of thinking.
  • It's good to be smart, but if you ever become the smartest person in the room, it may be time to look for another opportunity.
  • Work with smart engineers. They will make you a better programmer.
  • Work with smart non-technical people too. They will make you a better engineer.
  • Make good money, but save it too.
  • Time is finite, so spend it carefully. Play with your wife and kids, talk to your friends, watch a good movie, read a book, work out, pray, or take a long walk. Work is not everything.

Engineering Fundamentals

  • It doesn't matter what tech stack is popular right now. Get good at the fundamentals and the rest will follow.
  • When I was a junior engineer, I cared about knowing the next big thing. These days, I care more about understanding the basics deeply.
  • Learn databases, especially SQL. It is one of those skills that will save you in many situations.
  • Invest in networking, databases, system design, data engineering, computer science concepts, and distributed systems.
  • Want to understand operating systems better? Learn Linux and use it as your everyday OS. You will need that knowledge more than you think.
  • Tech keeps changing, so keep yourself updated through good sources like Hacker News.
  • Adapt to current tech trends, but don't blindly chase everything. Sometimes you need exposure to different parts of the software development cycle.

Code And Craft

  • The best code is often the code you don't have to write. Remove complexity before adding more code.
  • A good engineer knows best practices. A great engineer knows when to break them.
  • Don't worry about writing bad code sometimes. Everyone does it. Myself included.
  • The older I get, the more I appreciate strongly typed languages. At the very least, I try to bring some of that discipline into dynamic languages too.
  • Version your code. If you don't know how to use version control, learn it. If you choose not to, stop and fix that first.
  • Document what you do. I learned this the hard way. Good documentation, shared with the team, can save you from unnecessary calls, interruptions, and spoiled vacations.
  • I've never been a strict TDD person, but these days I try to write more tests. Good tests are useful when they protect behavior that matters.
  • I'm not a security expert, but I know enough to take security seriously. Security is not a joke.
  • Don't rely too much on Claude, ChatGPT, or any other AI model. They are useful tools, but they should not replace your own thinking.

People And Teams

  • I have made good, lifelong relationships at companies I have worked with. I try to keep work relationships professional, but we are human, and sometimes real friendships happen.
  • Stay away from office politics. Don't insert yourself into other people's business. It will save you from a lot of trouble.
  • Be honest and transparent with your line manager and management. You can decide how much to share, but being authentic usually goes a long way.
  • A good manager shares many qualities with a good engineer: clarity, consistency, judgment, and the ability to unblock people.
  • Be kind and helpful to your team whenever you get the chance. It goes a long way, and sometimes someone will help you when you are stuck too.
  • Work with like-minded people, especially in software engineering. It makes the work better.
  • Don't judge engineers only by title or years of experience. Watch how they debug, read unfamiliar code, and reason through trade-offs.

Work Environment

  • It is okay to deal with emergencies and late-night operations occasionally. If it becomes normal and starts harming your mental health, stop and find something that works better for you.
  • I am not a fan of working from home full-time. I prefer keeping work separate from home because it keeps things organized for me.
  • Don't work on bad hardware if you can avoid it. Every developer deserves good tools.
  • Full-stack developers deserve more respect. They are expected to understand frontend, backend, databases, networking, browsers, caching, mobile behavior, and more.
  • Keep healthy boundaries at work. No one needs access to your full personal life or your most private self.

Life Outside Work

  • If you have time, work on side projects. Tinker, build things you care about, and stay curious.
  • I got into tech and programming because it was my hobby. Sometimes your work can be the same as your hobby, and sometimes work can ruin the hobby for you. Learn new hobbies whenever you can.
  • Mental health is important. If you are constantly working late nights and committing to unreasonable timelines, pu sh back. If that does not work, find something better for you.

That's the list for now. I will probably disagree with parts of it in a few years, and that is part of the job too.