8 Things I Wish I Understood Earlier In My Career

Our lives and careers are journeys, so we should expect that we’ll be learning for the duration we’re on this planet. As long as we’re moving forward in life, we have experiences to learn from. When I reflect on my career, there are a lot of lessons that I wish I could have taught myself early on. While I can’t talk to my younger self, I can share these with you!

If you enjoy this kind of content, I often write about it in my weekly newsletter. You can subscribe to it for free:

What’s In This Article:

1 – Keep Building

Keep building things. It doesn’t matter if they’re not million-dollar product ideas. Build things to learn about how they work.

The goal when we’re building things, especially early in our software engineering journeys, is not to get-rich-quick. The goal is to practice and learn.

There’s no shortcut to mastery except for understanding sooner that there’s no shortcut. We need to practice — so build software.

2 – Reinvent The Wheel

We’re always told to not reinvent the wheel. There’s no point doing it if someone else has already done it.

But this isn’t always good advice.

Reinventing the wheel is one of the best ways to understand how something works and the complexity behind it. It might not be the best thing to chase in a production environment with paying customers, but it’s great for learning.

If you’re ever curious about how things work or interested in the complexities of a system or technology — try building it yourself. You’re almost guaranteed to learn something about what you’re diving into. I’d be shocked if you didn’t!

3 – Learn In Public

Document your journey so others can learn alongside you. This can help reinforce learning in so many ways because you need to find ways to explain the concepts that you think you’re now understanding.

However, don’t masquerade as an expert. Be humble and acknowledge that you’re new and learning. Others will be more willing to help.

Remember that everyone has different opinions. Some people are more loud but it doesn’t make them more correct. In fact, the louder people unwilling to listen to other perspectives are more often than not going to be less helpful. So don’t be discouraged.

If people correct your mistakes, this is a great chance for you to take lessons learned and improve!

4 – We Build Software In Teams

In the large majority of cases, software is built in teams. This means that you need to focus on communication skills, collaboration skills, and ALL of the other skills that aren’t just technical.

When it comes to technical direction, you need to consider that it’s not just your choices.

This is a good thing — because the different backgrounds, experiences, and perspectives will allow you to build better software as a group.

5 – Composition > Inheritance

Inheritance gets pushed a LOT when teaching programming but if you gravitate towards using composition early then you’ll “shortcut” a few years of really crappy code.

Seriously. I’m guilty of writing mountains of code with ridiculously long inheritance hierarchies. I can’t blame this entirely on WinForms and the Controls paradigm that was used… I should have taken some responsibility!

I’d spend a good portion of my early career rewriting a lot of overly complex inheritance code because it became too complex.

6 – Don’t Fear Learning

Don’t be afraid to learn new things. Building expertise can feel great, but don’t let it make you feel so safe that new things feel scary.

You’re going to suck at new things but it’s very temporary. You’ll prove to yourself repeatedly that you eventually get working knowledge and feel very comfortable.

In my career, my best growth opportunities were when I was forced into something new and uncomfortable. Every time I came out on top.

Discomfort led to incredible learning experiences.

7 – Own Your Career Development

Nobody is as interested in your career progression as you are. Great managers will indeed help encourage you and give you opportunities to move things along.

But we can’t just sit back and wait for this. We won’t always have amazing managers.

The sooner you realize that being passive is not a good strategy for progression, the sooner you can take action.

8 – Remember To Have Fun

You’re in this for the long haul, spending many hours of your life building software. You better enjoy it.

Not every day is going to be easy. Not every day will be interesting. Not every day will exciting.

But overall, you need to find ways to enjoy what you’re doing. It will help you learn. It will help you be engaged. It will help you be motivated to push through interesting challenges.

Software engineering is very mentally demanding and it’s often hard to find a good work-life balance… So keep this one in mind throughout your career.

What would you add or change? If you found this insightful and you’re looking for more learning opportunities, consider subscribing to my free weekly software engineering newsletter and check out my free videos on YouTube! Meet other like-minded software engineers and join my Discord community!


These are products & services that I trust, use, and love. I get a kickback if you decide to use my links. There’s no pressure, but I only promote things that I like to use!

      • RackNerd: Cheap VPS hosting options that I love for low-resource usage!
      • Contabo: Alternative VPS hosting options with very affordable prices!
      • ConvertKit: This is the platform that I use for my newsletter!
      • SparkLoop: This service helps me add different value to my newsletter!
      • Opus Clip: This is what I use for help creating my short-form videos!
      • Newegg: For all sorts of computer components!
      • Bulk Supplements: For an enormous selection of health supplements!
      • Quora: I try to answer questions on Quora when folks request them of me!

    author avatar
    Nick Cosentino Principal Software Engineering Manager
    Principal Software Engineering Manager at Microsoft. Views are my own.

    Leave a Reply