The time finally came.
Full. Time. Job. Search.
Over the last 5 years, I’ve accumulated over 2.5 years of paid software engineering experience. I’ve also accumulated a fair amount of self-directed experience.
But, I’ve never accepted a full-time job…
Sorry, I have more school to finish.
Sorry, I want to work in a different city.
Sorry, I want to travel and focus on my own projects.
Sorry, I want to attend the Recurse Center.
On Monday, I accepted a full-time offer with Squarespace 🎉.
Job hunting was far from the seamless process I imagined it would be. Here’s a review of my 2 months interviewing in tech.
The first step of my journey was interview prep.
In December I was finishing a batch at the Recurse Center. During the final weeks I switched gears towards interview prep.
I highly recommend taking a week or two to prep. Most of the time between mid-December to early-January was just switching my brain to interview mode.
During this time, I made the mistake of scheduling a phone interview before I was fully ready. I failed pretty spectacularly and ruined a really great opportunity… not good 😢.
I updated my resume before starting applications and a few times throughout the process. Some things I tried to do:
- One page: Companies get tons of resumes and they have limited time to read each one.
- Use bullets: They are easier to skim and help separate discreet accomplishments.
- Show, don’t tell: Let experiences speak for themselves. Building something with a 10/10 rating is better than saying “my project was popular”.
- Less is more: At the start I thought more things meant more impressive. Later on I realized that each item has diminishing returns. Too much just creates clutter.
- Consistency: I tried to be consistent with how I mention technologies and structure items.
With each update I shared my resume with a bunch of people for feedback. Here’s a .gif of all the iterations it went through.
It changed quite a bit over the course of the 2 months. Looking back, I feel a tad gross having sent out the original version 😅.
Over the course of my 2 month search, I applied to 43 companies.
Here are the stats*:
|Type of application||# Interested||% Interested|
|Online||4 / 22||18.2 %|
|Referral||12 / 21||57.1 %|
|Total||16 / 43||37.2 %|
* Interested means I was contacted for some type of interview.
Something to note: Referrals were 3x more likely to get a response.
I found referrals via:
- Working with the jobs team at the Recurse Center.
- Contacting past coworkers.
- Broadcasting my job hunt on Facebook.
- Joining online tech communities (eg. a slack group for technologists in Toronto).
- Talking to independent recruiters.
I would highly recommend reaching out to your networks. Referrals are so much more reliable.
Of the places that weren’t interested, it generally fell into the category of “looking for senior engineers” or “looking for US based engineers” (I’m Canadian 🇨🇦).
Extra thanks to the Recurse Center. They were incredibly helpful during my job hunt.
Before working with them, I assumed recruiting was just a means to an end.
“We don’t run the Recurse Center so we can recruit, we recruit so we can run the Recurse Center.”
- RC User Manual
After working with them, I’m super grateful they recruit. It was another amazing perk of attending.
Of the 43 companies I applied to, 16 went forward with some type of interview.
The process generally followed:
- Coding test (sometimes)
- Phone interview
- Technical phone interview #1
- Technical phone interview #2 (sometimes)
- Onsite interviews
- Hiring decision
When I accepted my job offer, I was in the middle of a few other processes. I ended up having to withdraw my applications (not enough time to finish 😥). When I was applying, I tried to avoid this as much as possible by spacing out my interviews.
Here’s how I progressed through my interviews:
Interviewing was a bunch of ups and downs.
Some days I’d be applying all over and feeling super excited about my chances.
Other days I’d be freaking out because weeks had gone by without any responses.
Some days I’d be scheduling interviews non-stop.
Other days I was looking back on rejections and feeling defeated by all the failures.
Some days I felt bad about my interviews but then got forwarded along.
Other days I felt great about my interviews and then got rejected.
It’s also a well known fact that interviewing is not an exact science.
After my first couple of rejections, I started getting really frustrated with technical interviews.
These coding problems are so arbitrary! If I ever needed to know this, I could easily Google it.
I’m not allowed to run the code? How is this testing my actual abilities?
Yikes! I’ve been doing nothing but algorithm prep for a month and this is a CSS question…
I wished people would just ask me about my past projects and how I work with other people.
Then I had some really laid back interviews that did just that - those left me concerned.
That was all conversational… what if they just hire random people who can talk but can’t code?!
He didn’t write any notes. What’s he going off of other than just gut instinct?
This is too easy…
By the end I had a new appreciation for how hard it is to interview.
- You can keep things really conversational, but how does that show if someone can actually code?
- You can assign a project, but how can you know if the person will have time to do a good job?
- You can dive into quick algorithm problems, but how much does that actually tell you about the person?
All the while you have a growing stack of applicants just waiting for an interview. 😩
I wonder if any companies let candidates choose their interview style. Give a few different options and let the candidate pick the path that works best for them. I’d like to see how that type of system would work out.
Luckily, not all my interviews left me banging my head against a wall. Some were really fun!
- Simple Website: One company asked me to build a simple website in 4 hours. I enjoyed being able to focus on a project without having an interviewer breathing down my neck. The followup was working with some team members to add features to the site. Since it was my code, the choice of what to work on was completely open ended. The focus was on working as a team instead of finishing a list of tasks.
- Life Story: Two companies had me tell my life story. Where I grew up, how I got into programming and all the steps that led me to my job hunt. I love asking people to tell me their Origin Story, and have spent a decent amount of time thinking about my own. It makes me happy when people have a self-awareness about their past and are willing to share. I liked that the company valued those things as well.
- Independent Coding Problems: At one onsite, I was given a sheet of questions and an hour to program solutions. Once again, I enjoyed being able to focus all my attention on the problems. It also gave a break from talking, talking, talking. That was nice.
- Pass The Tests: One interview asked me to implement a function to pass a suite of tests. I loved that! As someone who does a lot of TDD, I find it really helpful to have a set of test cases I can work through. It helps me concentrate when I can tackle the problem bit by bit.
- Pairing: I did a few interviews where I was allowed to use the internet and ask questions. They were described as pairing interviews, but didn’t feel like it. They usually involved an interviewer sitting across from me looking at their own laptop… not much different than sitting across from me as I write on a whiteboard. I had one really awesome pairing interview though. We both sat at the same workstation and faced the problem together. As a result, it was much easier to point at things and collaborate. That small change made a big difference.
- Team Lunch: Most companies with full-day onsites will schedule in some sort of lunch interview. It’s supposed to be a chance to relax and ask questions to an engineer. At one company, the lunch was with my entire prospective team. Having everyone meant I could just shut up and see how people interacted regularly. I also got to feel what it was like to spend time with my potential future colleagues.
Besides the interviews themselves, I also had some really good recruiters. People who were super attentive and eager to move things along at whatever pace I felt comfortable.
Interviewing was tedious, so every supportive recruiter and well thought out interview was much appreciated ❤️.
Learning I had offers was really stressful.
Do I take it or finish interviewing with these other companies?
Is this my market value? Should I negotiate?
Company A is really cool, but I’ll have to move so far. Company B is smaller, but in a better city. How do I choose??
I don’t plan on moving again for a while, so it was a big decision. The factors that led me to choose Squarespace:
- Well established company with a good reputation.
- Team with a bunch of friendly people and interesting projects.
- Being close to the Recurse Center and the awesome communities in New York.
- At the same time, being close enough to Toronto that I can visit easily.
Places in Vancouver were a close second. I met a bunch of wonderful people there during my time at Mobify. Still sad that I won’t be as close to them as I would like 😢.
Some notes for past me
Now that it’s all over, what tips would I have for past me?
- Prepare early: Interviews are a whole other skill-set - you can’t just wing it.
- Clean up your resume: Squishing a year’s worth of activities into one item is confusing. It’s better to break things up properly and skip some details.
- Focus on referrals: It might be easier to upload your resume everywhere, but your chances are way higher with referrals.
- Research the companies: Interviews are much more interesting if you can go in knowing what they’re working on and why you want to contribute.
- Write more code by hand: Interviewing involves a ton of communication. How you work through the problem is just as important as coding the final solution. Practice that thought process.
- Focus on interviewing resources: Things like HackerRank are fun because you get to write code and test it out. But working code isn’t everything. Resources like “Cracking The Coding Interview” give in depth explanations of all the other things interviewers are looking for. Did you realize there’s a faster solution that uses more memory? Or that assuming a sorted input lets you cut the runtime in half?
- Accept the circumstances: Some interviews are frustrating. Others are great. Analyzing the problems with one over the other never helps. The system isn’t perfect, but it’s what you have to work with. Do the best that you can with it.
- Calm. Down.: Stop worrying about the pros and cons of job A vs. B. Chances are they’re both equally amazing for completely different reasons. Flip a coin. Make a choice. The second you do, you’ll move on and be excited for what lies ahead.
I couldn’t end without sending out some appreciation…
To everyone who helped me prep.
To everyone who read over my resume.
To everyone who forwarded me along to their HR department.
To everyone who listened to me rejoice after a good interview.
To everyone who listened to me vent after a bad rejection.
To everyone who gave guidance and advice along the way.
It’s been a hectic 2 months, and I’m so excited that it’s over.
Let the Squarespace adventure begin! 🙌