Software startups, once their engineering organizations reach a certain size, put together a career ladder for their engineers. It usually comes at a point where there’s enough diversity in abilities that a distinction is useful, for straight-forward things like compensation and team assignments but also for skill development and career advancement. Seeing this implemented at now multiple tech companies, most end up mapping to a version of the Radford leveling scale.
So I’m familiar with the criteria for evaluation between junior, mid-level, and senior software engineers1. In particular, one characteristic of senior folk is their ability to articulate solutions to ill-defined problems: their autonomy is both a function of their comfort with the technology and ability to work beyond the code.
Which is why this article on getting a coding job is misleading:
What should you learn to get a [better] coding job
It’s telling people who want to get into the field of software development that they have to go find solutions to peoples’ problems. Of course, this is a desirable and welcome skill, but terribly unrealistic for someone learning how to program. Finding the right solution — or even just a good answer — to a problem requires having a solid, familiar and comfortable toolset (e.g., language, framework, design patterns, project management tools and philosophies, etc.). Even if the some of the tools are unfamiliar, past experience helps in drawing parallels while learning something new.
Those lacking that extensive experience in coding shouldn’t be expected to figure that out along with all the surrounding aspects of software development on the fly. It’d be discouraging and demotivating, and for some reason folks who are already software engineers keep on setting this high barrier of entry for those wanting to enter the field, projecting their own career paths and abilities onto newcomers prematurely.
Really, it’s okay for inexperienced developers to learn and work as if they’re figuring out software development. And if you’re angling to become a senior dev or you’re already one yourself, one skill to hone is the ability to empathize and mentor the junior folk. In fact, that’s just as important as simply being the solutions expert.
Levels above senior are rare enough that they’re usually treated as special cases by the company, though there’s common ground around wider impact and visibility both internally and externally.↩