Summary
Software is an apprenticeship industry. The amount of prerequisite knowledge and experience you must have before you can enter the industry swells. A CS degree typically prepares you better for a life of computing research than life as a workaday software engineer. A more practical path into the industry may be a good coding bootcamp.
It takes a solid seven-plus years to forge a competent software engineer. Being a senior engineer is not primarily a function of your ability to write code. It has more to do with your ability. to understand, maintain, explain, and manage a large body of software.
A junior engineer begins by learning how to write and debug lines, functions, and snippets of code. As you practice and progress towards being a senior engineer, you learn to compose systems out of software. By not hiring and training up junior engineers, we are cannibalizing our own future.
Generated code will not follow your coding practices or conventions. It is not going to refactor or come up with intelligent abstractions for you. The more important, difficult or meaningful a piece of code is, the less likely you are to generate a usable artifact using AI.
When it comes to hiring, we tend to valorize senior engineers almost as much as we underestimate junior engineers. Adding a person who writes code to your team is nothing like autogenerating code. Your effort is worth more when it is invested into someone else's apprenticeship.
Hiring and training new engineers is a costly endeavor, no matter what level they are. Some of the most productive engineers I’ve ever known have been intermediate engineers. Having junior and intermediate engineers on a team is a shockingly good inoculation against overengineering and premature complexity.
If hiring engineers was about picking the “best people’, it would make sense to hire the most senior, experienced individual. But the productivity of each individual is not what we should be optimizing for. A good team is composed of a range of skills and levels.
The best teams are ones where no one is bored, because every person is working on something that challenges them and pushes their boundaries. The bottleneck we face now is not our ability to train up new junior engineers and give them skills. The only way to grow them is by fixing the funnel.
I would counsel junior engineers to seek out office jobs if at all possible. I also advise companies not to start by hiring a single junior engineer. If you’re going to hire one, hire two or three. Give them a cohort of peers, so it’s a little less intimidating and isolating.