Hiring people in the software industry has become quite a huge business these days. Of course you have tons of work to be done, but you also have a lot of engineers coming these days. You have engineers of all shapes and sizes, junior, intermediate, senior. I have been through these various stages myself during my 12 year long career and it has been quite the ride and experience looking at these experiences. Now, what I will speak about would mostly be with respect to the senior, but touch upon a very little about the rest of the two since they are a topic for another day.
There are some good questions which could be asked here, as to what exactly is this being called the senior software engineer, what exactly qualifies the like to be one, is it just a piling of years of experience or is it just the title on paper. Here’s my take on what a senior software engineer is all about. The senior software engineer is the one who has tons of experience working in their engineering role. They have worked across multiple workplaces or projects and have experienced multiple management people. They have gained experience not only with code but also design quite intuitively, it could also have been learnt by them. The senior software engineer is not only about engineering practices, but also a problem solver, the out of the box thinker. They look not only about the problem at hand, but also the long term evolution of the solution. They are the ones the rest of the company looks up to in terms of establishing and following the engineering culture within. They are the ones who are able to mentor junior or intermediates patiently by understanding the character of the individuals they work with. They are the ones who can fearlessly make engineering decisions or even decisions regarding their reporting teammates while being able to justify them.
When you look at all of the above, it looks like quite a feat to be able to get a true blue senior software engineer into their organization. If we look at many of the companies these days, they continue to hire by the same old usual technique of giving a take home test that is all about writing code, tests, documentation and improving them followed by a team interview where they would rigorously interview the candidate and ask them to defend their solutions. From my experience, this is a good method to potentially interview a candidate who is either a junior or an intermediate since it is quite necessary to understand to what level they can actually code and discuss the solution they present.
But, when looking to interview a senior software engineer is not all the same. Typically senior software engineers wouldn’t even have the time to work on a take home coding test, it’s just too much of a hassle. They have already been put through it over the years, and it is counter-productive in terms of their time and their knowledge. They could churn out code, and possibly give not one but multiple solutions. But if you really know a senior software engineer, they are not only about a small piece of code, but about the big picture, the ones who can actually advise you in terms of performance, technical debt, quality, possibilities, out of the box solutions etc, and giving them a coding interview is only going to put them in a mode of assumptions and over working through the code and possibly even giving up at times, because these are the generals during wars, who give up when they sense the need to give up.
From what I have seen so far, the best way to interview and hire a senior software engineer is to have a heart to heart talk with each other to see if they first fit your culture, or is capable of fitting in regardless of the limitations. The next one is to actually discuss real world problems faced in engineering, it could be an actual problem you might be facing or faced in your company. Get your best engineers and your average engineers to work on it together with them if you need to and get a feel as to what point they are willing to take it to. Senior software engineers savour these challenges and are able to and willing to rise to the occasion of doing so. Ask them to review code that has already been written and understand their style. You would be able to see their past experience and the battles they have faced by actually doing this. They would be willing to spend hours with you to get themselves truly known to you. Talk about various possible approaches they are willing to take with respect to various real world problems that you have or have faced earlier. These scenarios will actually test the mettle of the true senior software engineer.
Remember that coding and software can be easily learnt; but people and experiences not as easy, people are complex and not the same, experiences are individual to people.