Interview with Architect Susan J Flower, San Fransisco
First, why architecture?
Let’s talk a little bit about why knowing something about the architecture of distributed systems is important. Chances are, unless you work at an extremely small startup, anything you work on runs on top of (and as part of) a large distributed system composed of many servers all communicating with each other over a network, and held together by a somewhat hacky yet sophisticated set of so-called “middleware” that lies between the bare servers and the top-level applications. If you’re a software developer, you’re going to have a difficult time writing really good code and building good applications if you don’t know how the system works (at a very abstract and high level). If you’re an infrastructure engineer, knowing the architecture in greater detail is essential. If you’re in DevOps or SRE, there’s no escaping the architecture. Basically, knowing the architecture of what goes on underneath the hood is critical for doing your job well.
Because of this, most companies have an architecture portion in their interviews, regardless of the specific role a candidate is being interview for. The big problem is that most people don’t learn these skills in school, in bootcamps, etc., – more often than not, these skills have to be learned on the job, and there aren’t very many resources online (or in textbooks) to learn from. This is partly due to the fact that distributed systems architecture has changed dramatically in the past fifteen years, it has been completely driven by industry, and academia hasn’t quite caught up yet. So, how the heck do you learn all of this, and, when you have to give an architecture interview, how on earth do you do it?
If you don’t have any experience in architecture yet, to learn what you need to know, you have to learn on the job. There’s no way around it. Find out everything that you can about the architecture of the various systems you work on, and don’t stop until you can stand in front of a whiteboard and architect each system off the top of your head. Ask experienced developers, ops engineers, and architects for reading materials (they can point you to good videos, talks, blog posts, and papers) and how they’ve architected their own systems. If your engineering organization runs architecture reviews, try to attend any that you can. Pay close attention when there are discussions about architecture in meeting or in talks. Once you get to know the terminology, you’ll be able to learn more on your own. For example, if you hear someone talk about “pubsub messaging”, spend some time googling it, ask more experienced devs, look through your own systems to see what kind of messaging (if any) they use, and why they do or don’t use pubsub messaging (and also why they should or shouldn’t!). If you have the opportunity to build a new application, service, or system from scratch, try to apply what you’ve learned, and have experienced engineers review your new application, service, or system. Eventually you’ll get the hang of it – it’s just like everything else in software engineering, the more you do it, the better you’ll get.
How to evaluate candidates based on their experience and the way they work through the architecture interview.
Junior candidates (especially those straight out of college or bootcamp) usually don’t have any architecture experience, nor should they be expected to have any. I firmly believe that junior candidates shouldn’t be interviewed on architecture at all. If you are asked to run an architecture interview for a junior candidate, make sure you remember how little you knew about architecture when you were a junior candidate, recognize that this will probably be a big learning experience for them, walk them through it very carefully, and design the question so that all of the relevant information is given to them (no guesswork!).
Candidates with over a year and less than four years of industry experience should be able to do moderately well on an architecture interview. They might not be able to scale the system very well (which is to be expected, because knowing how to do that requires a lot of hands-on, real-world, high-responsibility experience), but they should ace the first half. They might not know many different technologies, but they should know the basics of at least one relevant technology for each part of the stack (for example, they might not know the intricacies of every major database, but they should know one specific type of database very, very well). If a mid-level candidate can build the first simple system in the first half, and explain their decisions, the tradeoffs, etc., then they’ve done quite well.
Senior candidates should be able to ace both portions of the interview, building the first simple system quickly, and then scaling it up with ease. They should be able to easily discuss the pros and cons of each design decision, and should be able to see common problems and potential failure scenarios. With really experienced candidates, you should walk out of the interview feeling like you’ve learned something from them.
When interviewing senior candidates, be on the lookout for deep understanding of components of the system – especially if they come from a company where most of the infrastructure has been automated and abstracted away from developers. Some engineers (even with many years of experience) fall into the trap of never learning about the architecture of the overall system(s) they work with because they never had to. The easiest way to check for this is to ask them how something works – experienced candidates who don’t know much about architecture will know all of the names and terms for things, but they won’t be able to explain how these things actually work. If a candidate says something like “well, I never had to do that because we did that with automated-thing-at-previous-or-current-company,” ask them how they would build automated-thing-at-previous-or-current-company from scratch.
That’s how I think about architecture interviews, in a nutshell! I’d love if you’d comment with your thoughts and things you’ve learned about architecture interviews, both from the interviewer and candidate perspectives.
Source: The Architecture Interview