This is a very opinionated post, dealing mostly with what I think makes a senior developer, the main focus will be Ruby because that is my main language today, but most of the things I’m commenting here are completely independent of programming language.
Probably lots of people have a different idea of what is a senior developer, so if you do not agree with something I’ll write bellow, please leave a comment!
But if you follow what I’ll write bellow, I’m pretty sure you can be a Senior Developer and not a Señor Developer 😀
1) The ability to develop quickly
First things first, to be a senior developer means you are able to write software that works and deliver it to your client working, and since you call yourself senior, it is expected that you do things faster and better than a junior developer.
I know this is mainly a simplistic comment, people also expect you to have the ability to write and deliver solutions that are a lot more complex than what they expect from someone that is starting in the career.
I also expect that any senior that is working with me is able to understand the problem we are writing the software to solve, understand the client needs, and that will require understanding the client business.
Also, to write software better and faster is write software that will be maintainable later, so it will require writing clear code, with tests, and code that people can understand.
Tests will allow you to refactor the code, because no one writes it perfect in the first time, or the second… And if you want to learn about refactoring, the book Refactoring: Improving the Design of Existing Code (2nd Edition) is perfect in my opinion.
Also, what is clear code is widely open to debate, but it is important to follow the standards defined in the company, in your team, or in the project, try not to reinvent the wheel all the time, and if you need directions on what is clear code by lack of standards on any of these levels, maybe you need to define these standards… And if you need help, this book is a great option in my opinion Clean Code: A Handbook of Agile Software Craftsmanship
Of no one can learn everything in books, you are a senior developer because you had experience working in real life projects, solving problems that appeared to you, or sometimes deciding that a problem was not worth solving.
The ability to teach others and help others grow
Once you had lots of experiences, you learnt how to work around many things, and that is most of the times because other people that are more experienced than you helped, or suggested a solution, or talked to you, so now it is your turn.
Of course you’ll never know everything, but you know plenty to help that junior developer in the company or the new intern to overcome their first problems, you have tips that can make them grow in their career, and it is expected of you to help who is starting.
There are many ways to do this, most of them are just the way you threat other people in your day to day, but you can try some games and activities like organizing a “Desconference” in your company, it is like a meeting where everyone that attend the meeting need to do a 5 minute presentation about whatever they want, when one 5 minute presentation ends, the next one starts. If you will do this try to keep the maximum number of attendees between 6 and 12 to keep the meeting between 30 minutes and 1h. This is a great way for people start getting confidence to do public speeches and start sharing what they know. Remember that in a Desconference you do not set the subject, each person talks about whatever they want, from the thing they are working this week, to their favorite weekend activity.
Another cool thing to do is to organize some Coding Dojos to help people learn specific skills like Testing, Refactoring, some new library, any other thing you want them to learn. And coding dojos are also a great way to practice pair programming (I have to assume I’m not really comfortable with pair programming all the time, I use it only on specific moments, but nobody is perfect 😛 )
The ability to find the ideal solution
Finding the ideal solution is something that is both impossible and very subjective, anything that you propose today you’ll probably think that can be really improved tomorrow.
Also you do not know all the available technologies in the world, but you need the ability to propose a good solution that will solve your client needs, within an acceptable time frame and that fits the client budget.
This usually means that not everything will be done using your favorite programming language, many projects need pieces in more than one language, in more than one technology.
For example, if you need data mining, big data processing, data science, Ruby is not great at it, it is probably better to go with Python, but you’ll have to integrate the python code that is being created with the existing or new solution in Ruby, that might have a piece running in Node, another piece implemented in Kotlin or Swift.
The important thing is solving the client problem, sometimes proposing a solution very different from your client’s first request.
And to do that, you need the ability to understand the client business, and sometimes find out that he is telling you how he solves the problem today, not what the real problem is.
Summary
- The ability to develop quickly
- Know your languages (no Senior developer knows only one programming language)
- Understand the client business
- Write clear code, meaning code that other people can read and maintain
- Write tested and testable code
- Refactor your code to improve it
- The ability to teach others and help others grow
- Day to day people skills
- Desconferences
- Coding Dojo
- Internal company presentations
- The ability to find the ideal solution
- Understand your client business
- Know how to integrate systems
- Know how to “extract” information from your client
- Understand the difference between how the client solves the problem today, and what is the problem being solved