Being hired at Automattic

I started working for Automattic as a senior back-end software engineer in June. It’s an amazing place to work, the culture and processes are really distinctive – which I’ll explain more about another time. For the uninitiated, Automattic are the people who make WordPress.com, tumblr, Pocket Casts and much more besides.

When I was considering whether to apply I consumed blog posts from people explaining what it is like to work here, including the hiring process. This is my addition to the distributed canon. My experience was slightly different to some of the other accounts I read, and I expect that my account is slightly different to the current experience – the hiring experience is continually iterated on.

Edit 25/01/22: the current process is much the same and is clearly documented on one page.

Pre-application

I came across Gutenberg when reviewing web-based HTML editors for a project at my previous job. I had a look at the Automattic website then and admired the creed but I wasn’t ready to change jobs. Months later I saw an advert for jobs at Automattic and by this time I was in a different place – for one, I’d been working remotely due to covid for months and had enjoyed it. Now I was tempted.

I visited the page so often it changed one of it’s messages to say something like “Howdy, you’ve looked at this vacancy a lot, why not give applying a shot?” So, over the christmas break I did.

Application

I applied via the Automattic website. I answered 6-7 questions, supplied my CV and wrote a covering letter.

The questions were short, but allowed for long answers. I’m not sure if long answers were expected but some of mine were fairly lengthy. I was asked to describe my experience with PHP, Javascript and legacy code, as well as describing a complex bug I’ve encountered and how I handled it. The final question was to describe a project at work that didn’t go so well – what did I do and how would I act differently next time.

The covering letter explained why I thought I was a good fit for the role, i.e. my technical background and why I thought I was a good fit for Automattic – mainly about my thoughts on the creed.

I submitted the application on the 28th of December and waited anxiously to hear back. I spent ages waiting to get a response, I knew I’d applied over the Christmas break so assumed a response would be delayed but I felt slightly anxious nonetheless. Finally, on the 7th of Jan I got an email confirming they’d like to interview me.

Interview

Photo by Tima Miroshnichenko on Pexels.com

The email confirming I’d made it to interview included a bit of information about the interview and a link to book myself an interview slot – Automattic has a lot of people all around the world so there were plenty of slots at a time to suit me.

After booking an interview slot I soon received an invite to a slack channel named after me (#hi-dean-sas). The reason for the slack channel and one of the very distinctive things about Automattic, is that the interview takes place solely by slack messages. This slack channel then stayed with me throughout the application and onboarding process to give me a point of contact with the relevant people for the current stage of the hiring process.

When the interview came around, I spent about two hours talking with a developer about myself and about Automattic. It was very friendly and informal, we spoke about how I got into coding, and discussed some specific experiences I’ve had during my career. With it being text based I felt more at ease taking a minute to think before responding and I quickly felt comfortable.

The interview wrapped up with my interviewer saying they’d go and have a chat with the rest of the hiring team and would get back to me within a couple of days. I wasn’t sure what to think, I’d had an enjoyable chat and I felt like I’d answered the questions mostly well but I didn’t feel certain of the outcome.

I heard back the very next day that I had been successful and agreed to move on to the next step.

Coding challenge

The next step was a coding challenge. It was all set-up for me within hours of agreeing to take part. Helpfully I was part of an experiment where I was supplied with a web based VS Code hooked up to a container, so I didn’t have to spend any time getting an environment set-up. Just visit a webpage, write the code and hit save.

The coding challenge was a homework exercise where I was given a half-built WordPress plugin and was asked to audit it for security issues, implement some functionality, perform and document some optimisation, issue some general recommendations and answer one theoretical question.

I wasn’t (and am still not) a WordPress plug-in expert. I’d messed around building a very simple short-code plug-in just prior to my interview and had briefly dabbled some fifteen years ago. On the plus side WordPress is very well documented on the web, I’ve buckets of experience reading PHP and I had written the secure coding guidelines at my then-current job.

I was told I could take as long as I liked but to keep people informed. My plan was to work on it over the weekend, but I couldn’t resist taking a look at the tasks and glancing over the code that night.

Over the weekend I completed the coding challenge, spending a few hours each on Saturday and Sunday. I just had the recommendations left to give. I was really enjoying it, it felt refreshing to be working on something new. I decided not to rush and spent a little while longer to implement another (more minor) performance optimisation I’d spotted and beef up a security mitigation I’d put in place.

Once I was ready I used slack to say so, and within 24 hours someone had reviewed the pull requests I’d made, the written questions I’d answered and given me some feedback. I’d missed a security issue, and my code hadn’t always followed coding & documentation standards but importantly, enough went right that I was through to the next stage!

Trial

The last part of the selection process is the trial. This is where you are given a synthetic project to complete to basically pretend you’re already working at Automattic. It takes 30-40 hours to do, though you can spread this out over as many weeks as you require. I spent just over thirty hours, mostly over three weekends but also the odd hour on a week night, particularly towards the end.

Without giving too much away, I was asked to implement a REST API inside a WordPress plugin, which used another WordPress plugin, pulled data from another web API and did some things. Then I was encouraged to optimise it. Besides the several hundred lines of code this took, I also wrote several blog posts explaining what I was doing, what I’d tried and what alternative approaches I’d considered. This all takes place using github, P2 and local docker images.

My assigned trial buddy answered questions, reviewed pull requests and asked questions. As I was working on it at weekends he had days in which to answer questions and review code. This was a good introduction to working at Automattic because a lot of communication is written and asynchronous.

I still had two work-in-progress pull requests that needed polishing up, when I got a message saying my trial buddy had seen enough and was recommending me to be hired.

As in the coding test, I enjoyed working on something different and I also relished being challenged to optimise my work further. The actual technical difficulty was probably on a similar level to the coding test, there was just more of it.

As a bonus, taking part in the trial also gives you a tiny bit more access into internal systems – specifically I could read the fieldguide – or company handbook and get a better idea of what life was like at Automattic.

DevEx chat

This was a video call, the first time I’d actually spoken with someone from Automattic! It took place the day after finding out I was successful. The aim was to find out a little bit more about me in order to match me up with a particular team. We spoke about my experience, my technical interests and preferred working times as well as my thoughts on the hiring process. A few days later I was contacted by slack with the details of a team and access to their team blog. It sounded like a really good match so I quickly agreed.

HR chat

Photo by Andrea Piacquadio on Pexels.com

A few days after my team was agreed HR (or The Human League in automattic-speak) got in touch to arrange the final step in the process, a synchronous slack chat. We spoke about my thoughts on the hiring experience, checked I was happy with the travel commitments (3-4 weeks per year) and had no conflicts of interest to declare, and then on to talk about the details around starting – notice periods, start dates and the salary discussion.

I had a three month notice period to serve at my last job but the thought of unplugging one work laptop on a Friday and plugging in a new work laptop on a Monday sounded unhealthy – I wanted to create some distance between the two. So I asked if arranging a start date 3.25 months away would be ok and it wasn’t an issue at all, it was fine to move it backwards or forwards to suit me.

The salary discussion was the most awkward part of the process for me. The question was “What are your salary expectations?”, I’m English, you can’t just go around asking questions like that without awkwardness! I was switching jobs for culture not money so that took some of the stress out. I mumbled how terribly sorry I am for being English, explained my current salary and said I expected to be treated reasonably. Happily I was.

Ten minutes after the chat I had a contract in my hand, which I quickly signed and sent back.

From application to signing a contract took 2.5 months, which seems slow, but the process was thorough and I felt confident that by signing it, I was making the right decision.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s