Depth takes time

You cannot be a senior engineer if you haven't spent at least 3 years on one product. This is a hill I will die on.

Yes, early career advancement promotes job hopping. The quicker you can broaden your experience and see how different companies work, the better. Nice pay bump with every hop too.

But that approach hits a wall.

Later career advancement promotes depth. You need to be seen as an expert. The person who can come in and teach us how to do X.

When a middle manager is hiring, they need hands. People who can do the work in a workmanlike manner. The manager will tell you what to do.

When a business owner is hiring, they need brains. People who have been there done that, can own the outcome, and tell their boss/client what to do.

The only way to get there is time. Because software engineering is programming over time.

Why 3 years? That's about how long it takes to experience the consequences of your own decisions. For your beautiful ideas to turn into that awful crap you have to maintain.

And it doesn't work without skin in the game. If your ideas aren't running in production making real money, you're just navel gazing.

Without the business part, you're missing the most important part of engineering – constraints. It doesn't matter what's your best idea, show me what worked when customers were banging down your door, running afoul of your beautiful construction, and you had 5 other things to get done that week.

Domain modeling not so easy when users insist on putting triangles through a square hole is it? I love that meme

You can't get this experience without feeling the pain of change. Yes you can learn lots by jumping into an old codebase and maintaining it. Yes plenty to learn by seeing how different products approach similar problems.

But it's the awful grinding pain of reality bending your code to its will over time that's the real teacher.

It's easy to build a beautiful greenfield project. It's even easy to come in like a wrecking ball and say "wow everyone before me was a dumbass this project is a mess".

The hard part is keeping your code beautiful after years of wear and tear. The changing requirements, the scope creep, the flux in user expectations. That's the true art of software engineering – adapting your code over time.

If you can do that, I trust that you're senior.

Cheers,
~Swizec

PS: the most dangerous engineers have 5 years of experience. All the knowledge and chutzpah, none of the wisdom.