Recently I’ve been through a few different recruitment processes. And many times I was asked about the definition of a Senior Software Engineer, for good developer traits, what kind of developers I like to work with, and a few other variations of this question.
The most common answers emphasize technical skills. Skills like working autonomously, understanding the business side besides the technical details, and mentoring other colleagues. My answer to these questions focus on what I consider other key traits which we often forget:
- Being able to evaluate and accept trade-offs;
- Being able to discuss and being reasonable during eventual discussions.
And I also believe these traits directly influence the very important capability of constant learning in our area. These traits keep our minds open for new learnings.
Evaluating and accepting trade-offs
Take a moment and look around the current codebase you are working on. You’ll start understanding that decisions were made in every line of code. Should we extract a given set of methods to a new class or keep it as it is? Should we use inheritance or composition? Should we use JSON or XML?
Each decision we have while coding is made after evaluating the pros and cons of each potential solution. Some potential solutions are simply bad and don’t make it to the final decision round. A few others are equally acceptable given the known constraints. In the light of a future requirement they turn out to be not so good and you end with technical debt. And sometimes you wittingly choose the not-so-good solution despite having better solutions at hand. Why? Often due to time constraints.
Think about it. We build things. And we want to build them nicely. But what’s the value of building something correctly if it’s only ready too late? Maybe we should stick with the not-so-good and temporary solution in order to build on time. Whether due to business needs, go-to-market strategy, or whatever strong reason there may be, sometimes we must accept we need to build an imperfect solution.
If your amazing Halloween costume is only going to be ready in December, is it worth?
Being reasonable
This trait is related to the previous topic. If you work in a team you’ll have many (hopefully healthy) discussions. And while some subjects are more fact-based, some depend on personal opinions only. Remember the mythical tabs vs spaces discussion?
Keep in mind there are multiple correct answers, even if you have a personal preference. Sometimes the most productive thing to do is to be ok with other approaches.
We should also be ready to make some small concessions. We should not spend half an hour discussing minor details like what time your daily stand-up should start. If it’s 9.45 AM instead of 10 AM, is that such a difference? Probably not. Probably it isn’t worth the 30 minutes the team has spent discussing it.
Let’s just be reasonable and focus on things that really matter.