LinkedIn was kind enough to send me an email with some suggestions about people I might know. In that collection was a young fellow with whom I interact infrequently. He graduated from university in 2009 at which point he started working for the company he remains with to this day. About a year and a half after he stated with the company he became a senior developer.
So this fellow 18 months out of school, who has worked with one company on one project in one language is a senior developer.
If this fellow works for another 40 years Iâ€™m not sure what title he will end up with Â Ultra-super Megatron Developer? 8th Degree Developer Black Belt? Or something truly silly like Archtect?
The real issue, though, is that companies pay people by title. I would guess that this fellow deserved a raise and that to get that raise his manager had to bump his title. The whole system devalues the concept of experience which is very important.
As an industry we still has bent quite figured out the career path for people who like to program. We shove them into management roles because that is what we have always done with other disciplines. There are countless blogs and articles about that problem. By moving experienced developers to manager roles weâ€™re losing years of great experience and young developers have to relearn the lessons of the past.
We are never going to be able to change business titles, there is too much momentum behind job titles. We need to borrow an idea from â€œThe Naming of Catsâ€, the T S Eliot poem. Each cat has 3 different names one of which is the catâ€™s secret name, the name which no human will ever know. Equally developers need to have names that business doesnâ€™t know. Iâ€™m reminded of those Geek Codes from the days of slashdot. These were a way of identifying just what sort of a geek you were.
We should have a way of talking about our abilities and skills which is distinct from job titles. This is somewhat similar to the ideas of software craftsmanship which Uncle Bob uses. I think that the craftsmanship movement is a bit too narrow and focused on complying with one way of thinking. So I would suggest that a senior developer should have
- Worked for a number of companies
- Developed on a number of different platforms
- Worked with several different programming paradigms (OO, procedural, functional,â€¦)
- Shipped new software
- Supported existing software
- Improved the culture at a company (introduced source control, introduced builds, moved a team to agile,â€¦)
- An understanding of scale, databases and caching
In addition a senior software developer should be able to have reasonable discussions about almost anything in computers. They should have strong opinions on most technology and they should be willing to change these ideas when faced with new and better ones. A senior developer should watch emerging trends, understand them and take advantage of them.
In short a senior developer should be awesome. Iâ€™ve only known a handful of people who are sufficiently awesome to be senior software developers. I wouldnâ€™t count myself among them, but Iâ€™m working on it. You should too.