I’ve posted previously why I don’t like the term ‘junior developer’ as it usually just means you are saying a developer is younger than you, and is often used to be demeaning for no good reason.
<digression> There are times when being demeaning is arguably the right thing to do, but it generally isn’t a good thing to do. It should usually be reserved for when dealing with senior management, though I don’t recommend you practice it unless you really know what you are doing. Being demeaning to people who don’t have an opportunity to be better just makes you a dick. And not a good kind of dick, just a dick.</digression>
I think there are basically two things that actually make it reasonable to call someone a ‘Senior’ developer:
- A Senior developer is someone who can learn a system without any documentation in a ‘reasonable’ amount of time. What counts as reasonable here is, like much in life, largely contextual. In the last decade, there have been numerous times in which I was asked to learn System X which currently does Y and needed to do Z. On approximately zero of those cases, I’ve had any significant amount of assistance, either from documentation or current developers, to learn what System X was, what Y currently does, or what Z is.
- Keeping names out of it, the best example came from a particular large organization. The current developer who would have been the best resource to learn X,Y and Z from was working 60 hours a week on a very important release, the previous release of which had been a disaster. He was swamped, to say the least. He was very intelligent, and happened to be one of the people I interviewed with to get the job. When I asked him what Y was (I knew enough to know what X was) and how it worked, he looked at me and said (only slightly paraphrasing), “I don’t have time to tell you. We hired you because you seemed vaguely intelligent. Fucking figure it out. Please.”
- He turned out to be one of the best developers I ever worked with, and though I had maybe 30 seconds of being pissed off at his initial response, it quickly dissipated. He really did not have time to work with me. He really did expect/hope I could just fucking figure it out. That really is why he recommended that I should be hired.
- Being able to ‘fucking figure stuff out’ is a largely non-teachable skill. You have it or you don’t, for the most part. Younger developers show this ability directly, which is why a ‘junior’ developer is often more valuable than a ‘senior’ developer.
- As a side note, if you are in management and you find these younger developers with these skills, it is imperative that you protect and foster them. I don’t think I can emphasize that enough. These are resources that are more valuable to you than just about any other.
- A Senior developer is able to be self-directed.
- A regular reader of this blog will know that I’m kind of a prick (“what do you mean kind of?”…I heard that). Part of that ‘skillset’ involves being able to take charge and tell people (including especially senior management) when they are wrong. This does generally take some experience, or a complete lack of tact, or both.
- If you can talk the talk and walk the walk, senior management actually doesn’t mind this, but it can be ‘scary’ if you’ve never done it before. Looking a senior manager in the eye and telling them they don’t know what they are talking about is risky.
I reserve the right to add to this list, but, to be honest, those are the two things that really make the difference.
One of the the things that should be noted about this is that the ability to write really good code is sort of besides the point. Obviously, it isn’t entirely besides the point. But, you can be a good developer in the sense of following all the shit that ‘Craftsmen’ say you should follow, and yet not be a senior developer, no matter how long you’ve been slinging it.