Up until very recently, I had only done a handful of live coding interviews in my career. All of them were a disaster. I think I still have PTSD from the first one I ever did.
I was in my early 20s and I applied to work at Mixpanel, a hot SF based startup doing exciting things in the analytics space. I liked the product and used it on Burnreel to track user interactions. A friend of mine had interviewed there for a role on the business/sales side and I decided to reach out myself for a “Solutions Architect” role. It was marketing/sales focused, but still a very technical position.
I took a shot in the dark and sent a cold email to co-founder, Tim Trefren. Surprisingly I got a response and we arranged an interview quickly. The intro went well and I seemed like a good fit with my affiliate marketing background, but Tim wanted to code together. A few days later, I joined a video call and followed a link to access a live collaboration document. It wasn’t a text editor or IDE, but a live word processor. My heart was pounding.
“Okay, let’s write a function in JavaScript that takes a string and reverses it”, Tim casually prompted me. “Uhhh, okay, well…” I froze. “Well, umm, I guess you’d… uhhh”. I couldn’t think straight. There was a giant wall in my mind’s eye. My heart was in my throat. I couldn’t breathe.
After 10 minutes of moving my cursor around a mostly blank screen, I gave up. I apologized and told Tim I couldn’t continue the interview. I was mortified and embarrassed.
function reverse(str) {
// uhhh....
}
I actually found the email I sent to Tim afterwards:
Hey Tim,
Sorry about this evening! Didn’t mean to waste your time.
While I’m sure I’d be a good fit for the role, I think this shows I need to get a little more confident with my programming skills.
Thanks again, and best of luck with everything.
Ross
The wording of my email is interesting. I said I needed to get more “more confident with my programming skills”. Skills and confidence about said skills, I learned, are two separate things. I was a fairly green developer in those early days, but I was capable. I knew how to reverse a string. What made me freak out?
After the call, once I’d calmed down, I reconstructed what Tim was testing me on. He probably wanted to see me write something like this to demonstrate I had some JavaScript knowledge:
function reverse(str) {
return str.split('').reverse().join('');
}
Basic competency check: ✅
After which he might have said something like: “Okay, what about if we don’t use any built-in JS functions. How would you change your implementation?” Had I not panicked, I’d have probably written something like this:
function reverse(str) {
const arr = str.split('');
const result = [];
// Start at the end of the list and push onto new list
for (let i = arr.length -1; i >= 0; i--) {
result.push(arr[i]);
}
return result.join('');
}
Basic loop knowledge check: ✅
Now, if he had asked me the time/space complexity about this implementation, I’d have probably said, “Huh?”, which also might have ended my interview right there. But who knows? Algorithmic knowledge may or may not have mattered to him for a business/customer focused developer position.
Had Tim then asked if we could reverse the array inline, without a loop, I’d have said I didn’t know how. I would not have known about this approach, for example:
function reverse(str) {
const arr = str.split('');
let left = 0; // Start of array
let right = arr.length - 1; // End of array
while (left < right) {
// Swap corresponding items inline
[arr[left], arr[right]] = [arr[right], arr[left]];
// Move left pointer -->
left++;
// Move right pointer <--
right--;
}
return arr.join('');
}
Deeper algorithm knowledge check: ❌
As a self-taught developer, my knowledge of algorithms was very limited at the time. The idea of pointers, time and memory optimization, linked lists, sorting strategies and so on simply weren’t on my radar. LeetCode wasn’t a thing back then, so I had no idea how to prepare for interviews of this kind. I actually think something like the basic reverse string function above could yield some decent signal about a candidate’s fundamental ability. It’s not obscure or overly tricky like some interview exercises.
Fair or not, the memory of freezing on a live coding exercise is forever etched in my memory. I can feel the tension in my body. I remember doing a live coding interview some years later in Ruby and I froze again. Everything I knew about Ruby fell out of my brain and I bombed the interview. What is it about having someone else’s eyes on your screen? Is it a skill you can practice?
Technical interviews after those two failures involved a take home assignment, in-person coding (but working privately) or system design type questions. I’ve been mostly successful with those. Because I’ve never applied to FAANG-level companies, this limitation of mine hasn’t had a significant impact on my career. I’ve been writing software for 15 years and rightly or wrongly, I’ve never invested any real time on interview prep.
This all changed last month. I did my third ever live coding exercise and I froze again! It was a frontend exercise and I suddenly forgot how to write CSS and then later got confused over some basic state while adding a feature to a list component. It was horrible. I felt like an imposter. I had to fix this. So I did.
Ross Noble is a software developer, ultrarunner, podcaster and former van-dweller with a passion for the outdoors. He writes about running, cinema and anything else that interest him.
Montreal, QC