Job Search Results
2024-06-10
Big news everyone: after almost 9 years at Uber, I've decided to take the next step in my career journey. As a result, I've spent the last couple months doing an intense round of interviews. Now that I've finally decided where I'm headed, it felt natural to sit down and reflect a bit.
Motivation
Without change, something sleeps inside us and seldom awakens. The sleeper must awaken.
-Dune
Nothing in life is static, including companies. As Uber evolved over time, I noticed my role and what I did day-to-day had gradually shifted into something I wasn't satisfied with. This isn't necessarily Uber's fault per se, more a natural progression of the company and my particular place within it. Regardless, there was a lot less of me "doing" and a lot more of me "planning and coordinating". I felt I had lost a lot of my "spark" and I could feel myself loosing my technical edge.
This was something that terrified me.
I consider myself to still be very early on in my career. I plan on working for many more years and can't really afford to be in decline. If anything, I should be getting better, improving, and growing. It became clear it was time for me to find something new. I needed a kind of radical change.
The Interview Process
Before starting, there were a few goals I settled on that guided a lot of my choices:
- I wanted to cast a wide net. This isn't the kind of change that one makes often, so I really wanted to consider all my options such that I could make an optimal choice.
- I wanted to go some place where I was certain I would be actually building/creating. I know this is what makes me feel the most fulfilled.
- I wanted to work with people I had a personal connection with. When I think back to my happiest moments at work, it was when I was working with people I cared about on a personal level.
As a non-goal, I wasn't looking to maximize compensation. If it meant achieving the goals I've outlined above, I'd be willing to take a nominal hit so long as I could maintain my current lifestyle.
I ended up having some form of at least a conversation with 12 different companies. Here are the results of those conversations summed up in a Sankey Diagram:
There are a few things I want to call out here.
First, I dropped out of a lot of the interview processes. Usually it was because I started to realize the company wasn't a good fit. I think this is actually good. It means I was achieving my goal of casting a wide net.
That said, in one case I dropped out because I'd botched an early screen and could tell the process wasn't going to end optimally for me. I already had a couple good offers, so I decided not to continue (even though the company wanted to keep interviewing). There's also one company where I did a full loop but didn't wait around to hear the outcome before telling them I'd accepted an offer elsewhere. That "dropped out" should either be an "offer" or "reject", but I guess I'll never know (I have a feeling it was a "reject").
I talked to a lot of different types of companies as well. Some of them were big, public companies. Other's were three person startups. Again, I like to think this really helped me achieve my goal of casting a wide net. I feel like I got a really good sense of what opportunities were out there.
Lastly, the real story is actually a lot more complicated and less linear than my diagram shows. "Initial discussions" meant a lot of different things depending on the company. Some companies really tried to find a good team fit for me, so I talked to several managers before really starting the interview process. Others (usually the smaller ones) threw me straight into the interview process after an initial chat with a recruiter. Many of these interviews were spread out over long time lines that interwove with one another. Outcomes of interviews and discussions with one company often affected the decision to continue interviewing with another.
Observations, Impressions, and Lessons Learned
Practical Interviews for the Win
In the cases where I did a technical screen and/or full loop, I vastly preferred the interviews that were "practical". For example, several companies crafted coding exercises that were actually representative of the kind of work engineers do in their day-to-day. In contrast, some companies simply did "leet code" style questions. I much preferred the practical interviews, and found that I actually did better on them. I feel like they were a more accurate assessment of my skill.
First, a Vibe Check
This is more specific to the smaller startups I chatted with. After talking to a few of them I realized that the most important thing was going to be whether or not I felt a personal connection with the team. In a small startup, you're going to be spending a lot of time with a very small set of people. You better really like them.
Don't get me wrong, every one of the small startups I talked to had very nice people working there. But I didn't end up feeling a deep personal connection with any of them. If I was going to be in the trenches with these people, if I was going to take a significant risk on something that might not work out, then a cordial group of co-workers wasn't going to cut it. As a friend of mine likes to say: "There are only two options: 'Hell Yes!' and 'No'".
Design and Architecture is Hard
Of all the interview types I did, I struggled the most with "Design and Architecture". As I reached out to friends and colleagues for help, it became clear I wasn't the only one. Pretty much every engineer I talked to mentioned that these were particularly challenging. If you're struggling with these, know that you're not alone.
That said, a former colleague did point me to a relatively helpful resource. This System Design Course from educative.io was actually quite helpful. I don't agree with all of the technical details, but it did give me a useful framework for approaching these kinds of problems.
What About Extended Time Off?
I think a lot of people in my position might consider taking some extended time off (e.g. several months). Unfortunately, this wasn't an option for me. I was particularly concerned with making sure I had health insurance for my two kiddos. That said, it would've been nice to take at least a couple weeks off between gigs. Alas, various things conspired against me and I only got a couple days.
I've Got All Kinds of Time
When interviewing, there are so many things that will pressure you to go faster or to make a decision when you're not yet ready. I had to constantly remind myself that this process was about me and would occur on my timeline. If you're interviewing, remember that this is a huge decision and it's yours to make. Take all the time you need, and don't make a decision until it feels right all the way down to your bones.
People Are Really Concerned About RDBMS Performance
This one is more of a personal gripe.
Apparently people really, really care about the fact that you can do conditional updates in an RDBMS. By that I mean something of the nature:
= 0
=
= `.
By rechecking the STATUS
column in the update, this lets you have two processes in a distributed system race on the same update.
Only one of them will actually claim the id
item.
This is all done without "locking" the database via a transaction (by instead doing, essentially, a Compare-and-Swap).
It's weird because when I think about an RDBMS, one of the first things that comes to mind is transactions. I'm not particularly looking to avoid them as they're a fantastic tool. Yet, I got asked about this particular issue in multiple Design and Architecture interviews (and in previous interviews I've done in years past). Apparently people really care if you know about this trick.
Look, most of the time, MVCC is going to let your transactions run concurrently in a way that doesn't require locking.
You'll be fine.
I suppose in this specific case, where we're doing a full table scan in our select
, it does save you something.
But this feels like a weird trick to get hung up on and to design an interview question around.
Transactions are way easier to reason about in my opinion and I'd actually want an engineer to reach for them first before doing something clever like above.
Shout Out to Anduril
As my job search progressed it became more and more clear what kind of company I was looking for, and what a good set of people felt like. Anduril was one of those companies I could really see myself working at. The people I interviewed with were both sharp and thoughtful. As someone who has become somewhat cynical about work over the years, I found it surprisingly refreshing to meet with people who were sincerely driven by a mission they felt important. You don't go work at a company like Anduril without thinking through a few things first, and these people clearly had. I feel genuinely bad I had to say no to them. If you're in the market for a new job, you should definitely check out Anduril.
Friends and Collegues
Your friends and (former) colleagues are some of your best resources when doing a job search. I got so much help from mine and I really can't thank them enough. They were so kind and generous with their time, advice, and willingness to refer me to open roles. They helped me through so many difficult moments and reason through so many hard decisions. To any of them that may be reading this, please know that from the bottom of my heart I'm so grateful. I feel so lucky.
I'd be remiss if I also didn't mention my partner, Ashley. She was an amazing cheerleader and huge support for me. She made so much space in our crazy, hectic lives for me to focus on this huge change.
What's Next
Without further ado, I'm happy to announce I'm headed to Chronosphere.
As to what led me to Chronosphere, there were a few things. First and foremost, several of my favorite former co-workers happen to be there. I really relish the opportunity to work with them again. Plus it's a really good signal that so many of them have found their way to Chronosphere.
In addition, several things about the interview process really impressed me:
- All of the interviews (including Design and Architecture) were extremely practical and directly related to what an engineer might do day-to-day. One of the interviews even included a review of existing code (and then attempting to improve it). I can't stress enough how cool this was.
- All of the interviewers were incredible. Not only were they sharp, but they were friendly and poised. This put me at ease and really helped me put my best foot forward. I don't think it's any accident that this was my strongest round of interviews.
- All of the interviewers, ever single one of them, reminded of the very same favorite co-workers I already knew at Chronosphere. I don't know how a company can be that consistent in hiring for a particular archetype, but Chronosphere has. And their type of employee is very much the kind prefer to work with.
The Kurtis Theory of Career Development says "Don't look for cool projects, look for cool people. With that, everything else will follow." Today is my first day at Chronosphere and I definitely feel like I've found some extremely cool people. At this stage in my life, it feels rare to be confident on any big decision that I make. And yet in this case I couldn't be more sure that I've landed in the best place possible. I can't wait to dig in.