The JavaScript Engineer Interview Process at Automattic

I graduated from college a few weeks ago with my CS degree in tow. I was working remotely as the lead engineer at Zonder Studios, a tiny startup building a geolocation app. I got a ton of experience there, but Zonder was still working towards funding. With plenty of debt after college (and getting married, and moving cross-country), I needed to find a job which offered a salary rather than shares. I applied to around 30 jobs, starting in the fall of 2018.

Since I knew I’d be moving cross-country, I looked into a lot of remote jobs. One company which stood out was Automattic, the company behind WordPress. They have a relatively small team (less than 1000 employees at the time of writing), but have built a product which powers a third of all websites while being a completely distributed company. That’s right, there is no central office. I ended up applying for the JavaScript Engineer position pretty quickly.

(Day 0) Applied: October 28, 2018

The application process is pretty simple. You send them an email with your resume attached describing why you want to work there. (This is great, because you don’t have to waste your life submitting a custom application which has you duplicate all the content from your resume.) And then wait. A while. They will respond no matter the outcome, but it could take a few months. In my case, it took 2 months and 10 days.

(+71) Responded: January 7, 2019

The first stage of the interview process is the “screening” chat, which happens on Slack.

(+2) Slack Chat: January 9, 2019

This chat is basically a get-to-know you. I think the goal at this point is to see if:

  • You can communicate well on Slack (Automattic’s primary form of communication)
  • You are a good culture fit (See Automattic’s creed here)
  • You actually know something about coding
  • You can describe programming concepts in simple language over text (i.e. “how would you explain x concept to a beginner?”

In our chat, we talked about the future of WordPress, why I got into programming, and some of my questions about Automattic. This is a really broad discussion and seems to act as a basic conversation to see if you’ll be a good fit for the company. It’s really tailored to the individual you’re talking with and the questions you ask. We talked about some basic JS event loop concepts, for example, but we didn’t go super in depth with programming questions. I think they want to make sure you aren’t faking a programming background, but it is not at all an intense interview. It’s really relaxed. At the end of our Slack chat, which lasted a bit over an hour, my interviewer said that the next step would be a short tech challenge.

(+0) Tech Challenge: January 9-21, 2019

This was essentially “here’s a WordPress plugin with some bugs, can you fix them?” You have about a week to do the challenge, but expect to submit pull requests to the GitHub repo (which is specifically made for your challenge) and to go through a few rounds of feedback. I’d try to get your first PR open quickly because it can take a few days for them to review it. IMO, it’s really important to show improvement if you mess up. For example, I had a few classic commit messages such as Fix a thing and Try again and Please work now. My reviewer called me out on that in the first PR and sent me some resources on how to write better commit messages. I tried to really closely follow his feedback for my next few commits.

I also didn’t quite hit the nail on the head as we were talking about the event loop in the Slack chat. But part of the tech challenge had a bit where you were supposed to fix an animation bug related to the event loop (and to explain it). So I spent extra time there making sure I was explaining everything very clearly. My reviewer had also given me a resource on the event loop which was very interesting, so I tried to incorporate concepts from that into the bug fix.

The key is that I messed up, but I tried my hardest to improve and to not make similar mistakes. This is an important part of the Automattic creed: responding positively to critique and showing a willingness to learn.

After a bit more than a week, my reviewer approved me for the next stage of the process, the trial.

(+12) Accepted For Trial: January 21, 2019

At this point, a few things happen

  • You fill out some paperwork (contract, w-9) (may be different for people outside the US)
  • You get access to the Automattic proxy
  • You get access to more internal blogs and slack channels (previously you were a single channel guest)
  • You answer some basic questions (e.g. you have to be able to travel a few weeks out of the year)
  • You start getting paid for your efforts ($25/hr for all positions on trial)

After going through this administrative stuff, you get added to the repo for your trial.

(+4) The Trial: January 25, 2019

The trial is the hardest part of the interview process. They say it typically takes about 40 hours total to complete – I spent around 80 hours on it all told over two months. That is my own fault, more on that later!

This is a recent change, but for JavaScript Engineers in particular this is essentially an extended tech challenge. Previously, you would work alongside an actual team on real features, but I think this became very difficult to scale. (Though, I do think some positions still operate like this.) Automattic is really trying to grow the dev teams right now, so having a lot of people working “on trial” could pretty easily bog down teams which need to be moving fast. Even onboarding a new hire can take a while – what if you aren’t even sure if you’ll hire them yet? During my trial, I know of at least one or two other people also working on the exact same project as myself. Here’s a list of things that I had to do for the project:

  • Complete two features for a web app built as a WordPress plugin. This is a pre-existing app, so you’re trying to work on a lot of
  • Submit a lot of PRs and get a lot of feedback on GitHub.
  • Answer a lot of questions about why you made particular choices.
  • Make sure the tests pass, and write new tests for new functionality. (Hint: start by looking through the tests. You can get your bearings for how a lot of stuff works together!)
  • Handle a lot of “why don’t we make a new PR for this other little enhancement” (i.e. setting up a linter to run on every commit)
  • Respond to a lot of feedback on improving your code quality, like suggestions for using JS more efficiently.
  • Write blog posts to update the reviewers on your progress.
  • Write down all of the tasks which come up throughout the trial and put them somewhere.
  • Incorporate modern WordPress concepts into the app (like the data connectors and components which come with Gutenberg).

Note that last one – really try to incorporate modern Gutenberg and WP concepts into the app even if you’re rewriting some existing parts of the codebase. That’s likely what you’ll be working with full time at Automattic, so it’s good to show that you can pick it up.

I ended up spending a lot of time on rabbit trails during the trial process. I think I could have spent less time overall on the project if I had not fixed every linter error in the codebase, or if I had skipped adding a PHP debugger for VS Code, or if I had skipped really tiny things which were tangential to the overall goal. The thing is that every PR I submitted was good because it improved the quality of the code, but I ended up doing a lot of refactoring and switching things around. Granted, my reviewer did also ask about them, but I also did not solely focus on getting those features in ASAP. I thought something like “fix this little bug which we noticed in the last PR” would be good, but then that’s another PR submitted, and more feedback, and perhaps even more tangential bugs caught, at which point I ended up spending more time on tangential features, fixes, refactors, and improvements than on the original two feature requests. (Though much of the refactoring did help me implement those in the end.)

What this meant is that it took me more than two months to complete the trial. I was spending more than 10 hours per week on it, on top of 17 credits of senior year CS classes, my part time job at Zonder, and stressing about not having a job yet. All told, it would not have been worth the money if I had not been hired. It was a really difficult and stressful period for me, and I know that it can be for many people. The thing is, a job at Automattic is well worth it – there are incredible benefits and the culture is amazing. I also learned a ton during the tech challenge which is always great. But if I hadn’t gotten an offer afterwards, I would have sunk a lot of time into a project and would not have been any closer to a job post-graduation, which was really my primary goal at the time.

I was actually talking to one of my CS advisors about that near the end of the trial. He was really encouraging – he said this sort of opportunity is incredible for young developers. (And that he’d love it his kids could have this sort of opportunity.) Since they’re paying well for it, he said that if nothing else, it’s really good as a learning experience, if nothing else. Only a couple days after that, my reviewers recommended me for hire (even though we were still in the middle of a few PRs).

(+61) The Trial Ends: March 27, 2019

At this point, HR gets in touch to schedule a quick chat. Previously, this was the “Matt Chat” stage, where you’d talk to the CEO. Based on other articles I’d read, I thought that would also be the case for me. I think they also struggled to scale that (which makes a lot of sense), so it’s now an HR chat, at least for the JavaScript Engineer position.

(+2) HR Chat & Offer: March 29, 2019

We scheduled a time pretty quickly for the chat. The initial conversation was pretty casual and lasted about 20 minutes. (And was on Slack, as always.) We mostly talked about my experience with the trial, what I thought about the hiring process, and if I had a good feel for the company. We also went over some of the questions I had been asked a few times before (like if I was ok traveling for 2-3 weeks of the year). I think they really want to make sure you’ll be comfortable with the travel commitment before you start!

Then, the HR rep confirmed that I wanted to work at Automattic, and asked what my start date and salary expectations would be. Salary is always a tough conversation because you don’t know how either party feels about it. I basically decided to “aim high” but to also be very polite and agreeable about it. I also asked if they had any expectations before I gave number (I had read something about this before), but they basically just said that they try to pay competitively and fairly (i.e. people with similar skills in the company should be paid similar wages.) So I stated a fairly high number for the position ($100k) to start the conversation. I figured it wasn’t high enough for software developers that it would stop the conversation right away. But I was still pretty nervous about it!

At that point, the HR rep said that they would take a step back and come back to me with a formal offer later that day. Around 4 hours later, they pinged back with an offer in the range of $80k to $90k. I was definitely super happy with that, but I’ve read some articles talking about how important it is to negotiate your offer. So I asked if there was wiggle room around the number, to which they said no, they don’t negotiate starting salaries in order to be fair to everyone (i.e. not everyone tries to negotiate.) I think Automattic really makes an effort to make sure everyone is paid fairly based on contribution to the company, so they give regular raises based off of how much value you’re bringing to the company. I still would have appreciated a bit more transparency around the topic since it is such a stressful conversation to begin with. It was also very new to me, since this was the first full-time offer I had.

The initial offer stated that I had 3 days to accept, but the HR rep was very happy to let me have a week. I had another interview coming up and wanted to see how it went, and also wanted to be sure that it was the right choice for me.

(+6) Accepted Offer: April 4, 2019

I’m starting the position on June 24th, and I can’t wait. I’ve been able to see my team’s communication and work so far, and it’s especially exciting to see my name on the team list for some of the big projects in the works at Automattic.

Finally, I want to mention how willing everyone was to work with my schedule throughout the process. During the trial, there were a couple of weeks where I was too busy with other commitments, but they let me take a break from the project. They also worked with me for my start date. In March, I said that I wanted to start on June 24th. That’s a long time. But they understood that I had graduation, a wedding, and a cross-country move before I started.

Automattic seems to be the sort of company that really cares about employee well being. Their distributed workforce has a ton of very talented individuals. For some companies, high stress comes with high-talent roles. Automattic, on the other hand, strives to create a very healthy workplace. I’m excited to join it.

Discover more from Noah Allen

Subscribe now to keep reading and get access to the full archive.

Continue reading