Progressing as a Software Engineer
Just had some quick thoughts on career progression this morning that I wanted to share.
When I was younger, I used to play a Korean MMORPG called Ragnarok. In it, everyone starts off as a novice, then at level 10 you choose a tier 1 class, like swordsman, then at a certain level you choose a tier 2 class, like knight, and it goes up to tier 4 or something now (it ended at tier 2 when I played, but they've added on since then). So why do I bring it up? Well I think most people think of a software engineer's career path in terms of these kinds of tiers.
At first, everyone starts off as a novice, then most people will begin to specialize in one or a couple of different things (tier 1/senior engineer), then you come to the first major fork in the road at tier 2 (every tier 1 class has a choice of picking between two different tier 2 classes) where you basically decide if you transition to management or technical progression (the former meaning becoming team lead or equivalent and the latter meaning becoming the go-to technical problem solver, which I don't know the title of). You can extrapolate for the rest of the tiers, and of course people can switch between them, but it's just a metaphor so it's not perfect.
Maybe this way of thinking of it is wrong though. My whole professional career is unconventional, so I can't really relate to the metaphor. Instead, I've found that it's more appropriate to think of it in terms of what kind code you're writing and your productive output measured in human power (HP), where one human power is one mostly fluent engineer working on something.
First you write code to just stay above water and to do what you need it to do. Productive output, below 1 HP.
Then some time passes and for one reason or another you have to get back into this old code you wrote, and you realize that you really need to be writing code for your future self and others. Productive output, 1 HP.
Then you're not really writing that much computer code anymore, but instead writing code for humans so that they write better computer code. Productive output, 1 HP x some factor which is correlated to the number of people following your code and how much faster it's taking them from being below 1 HP to >=1 HP.
Then you're writing meta human code, so that other people mostly writing human code, write better human code, for people mostly writing computer code, to write better computer code. Productive output, same formula as above, but multiplied by the number of people directly below you.
I've kind of waved my hands on how to calculate the productive output, but the general formulas are made up of very measurable statistics. You could even number these levels on a log scale of your calculated productive output. However, I'd imagine there would be issues with defining what exactly 1 HP means.
Maybe this is how companies already do it, I don't know. I'd be interested in hearing about it if you do know.