I saw this post about senior vs junior lawyers a while ago and it sparked some thoughts about the senior/junior divide. I have also seen companies interested in hiring only senior developers. This is not a post hating on junior developers–the only path to a senior developer is starting as a junior developer.
Anyway, I think that senior developers will help you in a number of ways:
- Senior developers have made their mistakes on someone else’s dime. We all make mistakes. One time I took 4 hours to figure out that the reason I couldn’t connect to an Amazon RDS instance was because the security group was too locked down. But people integrate their mistakes into their experience and don’t make the same mistake twice. When you hire a senior developer, you’re getting all their previous experience as well as their current effort.
- Senior developers can own a larger portion of a project than junior can. This can include non coding tasks like system setup, estimation, requirements definition and customer interaction. This gives you leverage.
- They are able to understand interactions between various pieces of your system.
- They have an intuitive feel for performance impacts, again, probably because of previous mistakes.
- They map your current solutions and problems into their existing knowledge: “Oh, this is how we handled caching at my <$JOB – 2>.”
- They bring best practices from other companies (and can comment on worst practices).
- They can get up to speed more quickly.
- They can mentor other developers in areas of expertise.
- They know the power of automation and knowledge sharing.
- They have previously been confronted with difficult, complex problems and have an idea of how to attack new, difficult complex problems.
- They understand that almost all problems are people problems, and that communication is a key part of any project’s success.
Junior developers, in my experience, bring value for the money as well.
- They have more malleable viewpoints, especially with respect to tooling and technology.
- They are typically very eager to learn.
- When you are explaining systems to them, they can’t leverage existing knowledge. This forces you to speak from first principles and may highlight erroneous assumptions.
- Because they don’t have the knowledge of existing systems, they question why things are done a certain way. Systems and processes evolve, but sometimes tasks are done only because they’ve “always been done that way” which isn’t necessarily the most efficient. It’s hard to see that without the “eyes of a beginner”.
- They are less cynical.
All good developers in my mind are:
- Eager to learn.
- Unwilling to say “that’s not my job”.
- Accept ownership of the success of the project and the business.
If I had to sum up the differences between junior and senior developers in one word, it is would be “scope”. A senior developer should be able to handle a wider scope of projects, responsibilities and problems than a junior developer. How wide that scope is depends on the developer, their experience, and the problem space, but there are certain aspects of scope that are the same across domains (non coding tasks).