18F Engineering Team interview process

Details on 18F's engineering interview process

If you’re a developer applying to our engineering team, our interview process will have two parts: a short take-home assignment, and a series of interviews. Here’s some details on what to expect:

Technical take-home assignment

We know that the best way to tell if someone’s a good engineer is to actually look at their code, so we’ll want to see your work in action. You’ll be given two options:

  1. Complete a short programming assignment. This’ll be a realistic sort of task that someone in the role you’re interviewing might face at work. For example, you might be given a messy data file and asked to produce a script that parses the data and produces some report. This exercise should take less than three hours. We prefer that you use Python, Ruby, JavaScript or Go for this exercise, but if you don’t feel confidant in any of those languages we can probably accommodate another choice.

  2. Submit a code sample you’ve written elsewhere to share with us and discuss. This is subject to a few conditions:

    • You must be allowed to share this code with us (so, nothing you’ve produced under NDA, etc.). Open source is best.
    • It should be in Python, Ruby, JavaScript or Go – if it’s not, again we can probably accommodate you, but check with us first.
    • It should be short, no longer than around 1,000 lines, and mostly stand-alone (i.e. shouldn’t require any dependencies that aren’t common in the language you’ve used).
    • Ideally, it should be code we could easily run ourselves.

Either option is totally fine, so choose the one you think will be easiest and will present yourself in the best light.

You’ll be asked to submit your work at least 24 hours before your review session, so that we’ve got a chance to review your code before we talk to you about it.

Interviews

You’ll have four interviews, ranging 30 to 60 minutes each. Each interview will cover different topics (see below for details), with a different member of 18F’s staff. Most of your interviewers will be your potential colleagues on the Engineering team, though some might be folks from other parts of 18F we work with frequently (Design, Product, etc.). You’ll interview with one person at a time (no panel interviews).

We prefer to do our interviews over video chat, but we can accommodate other options if that doesn’t work for you.

Our interviews are all behavioral and experiential, which means we’ll ask questions about your experience, situations you’ve seen in your career, and what you did. None of our questions have right answers; we’re interested in hearing about your experience and talking through what you’ve done in detail. We want you to be specific: tell us about what you’ve accomplished, how you did it, and please feel free to get really deep into the technical details. We love it when candidates tell us detailed stories about cool things they’ve built!

We don’t use brainteaser questions, ask you to code on a whiteboard, or try to stump you.

Take-home review

(30 minutes)

Your interviewer will ask you technical questions about your code sample, for example:

  • “How does this part work?”
  • “Why did you choose library x here?”
  • “Can you think of other ways you might implement this bit?”

Technical Interview

(1 hour)

Your interviewer will ask you questions about your technical experience and your previous work, questions about coding tools and practices you’ve used, and architectural questions about code or system design. For example, you might get asked questions like one of these:

  • “Imagine you’re designing a dashboard to show the spread of a virus outbreak. Talk me through the high-level design. What technical issues do you anticipate?”
  • “Tell me about a time you needed to learn a new piece of technology to solve a problem. What was the problem? How did you learn the new thing? Was it a good solution?”
  • “Tell me about your approach to software testing. Why is it important and when have you done it? Where does it belong in the process?””

You’ll also have about 10 minutes at the end of the interview to ask your interviewer any questions you have about their job, working at 18F, etc.

Core Values Interview

(1 hour)

Working at 18F is a bit different than working at your typical tech company. We’ll want to make sure that you share the core values that are important to 18F, so this session will focus on your personal and professional values. Your interviewer will ask questions about how you work with teammates and partners, how you manage bureaucracy, and similar topics. For example, you might get questions like:

  • “Tell me about a time you worked directly with a particularly difficult client. What was the difficulty? How did you manage the relationship?”
  • “What has been your experience with agile/iterative software development?”
  • “Please describe a time or situation in which you saw or noted something that wasn’t working well and advocated for an improvement.”
  • “Have you ever worked with a remote/distributed team before? If so, what worked, and what could have gone better? If not, what challenges do you anticipate about being part of a remote team?”

Again, you’ll have about 10 minutes at the end to ask your own questions.

Wrap-up Interview

(1 hour)

This final interview covers both technical and core values topics (so, similar questions as above). This gives us the chance to compare notes from several interviews, and gives you the chance to give us, collectively, a broader look into your experience. This interview will usually be with a more senior member of 18F Engineering, or someone in a leadership role, so it’s also an opportunity to ask questions of someone with a broader view of the organization.

As with the other interviews, you’ll have a chance at the end to ask your own questions.