Starting A New Job
I’m pleased to announce that on March 1st, I started a new software engineering job, working generally in the field of “IT infrastructure lifecycle management.” This is a pretty big, life-changing sort of job for me.
I’m pleased to announce that on March 1st, I started a new software engineering job, working generally in the field of “IT infrastructure lifecycle management.” This is a pretty big, life-changing sort of job for me.
Relevant, annoying clichés:
- “Good things come to those who wait.”
- “It’s better to be lucky than good.”
- “When opportunity knocks, open the door.”
Sometime in December I received an email from an old online friend from my Quake-playing days. To make a long story short, it turned out he works at Salesforce and they were hiring remote software engineers, and I happened to be in need of a job.
It wasn’t the kind of job I thought I could get, though. Most of my recent experience is in the Microsoft .NET enterprise world, and this is an extremely non-Microsoft company. But they look for what he called “technologists,” people who understand core software engineering concepts and can use or adapt to whatever platform, languages, or tools are required to complete the work. It’s the kind of thing you want to hear from people who hire programmers, but you rarely ever do. That alone was pretty impressive.
So I polished up my resume and applied. I didn’t think I had much of a chance, because this is a big company, far bigger than anywhere I’d worked before; a global company in the top 200 of the Fortune 500 list, somewhere around 5th on the list of “big cloud providers,” depending on which list you look at. [UPDATE: They’re actually more of a service provider than a cloud provider.]
Would I fit in with that kind of “west coast big tech” culture? To say nothing of the scale of projects they work on, which is many orders of magnitude bigger than any of my previous experience. It’s a big jump from enterprise applications on a handful of servers to distributed computing at a worldwide scale.
But I needed a job, the work sounded really interesting, and this opportunity fell squarely into the once-in-a-lifetime “dream job” category. Something I didn’t believe actually existed in real life. “Big tech company” jobs like this generally don’t appear in my neck of the woods on the East Coast. (Although recently a Facebook data center opened pretty close to my house.)
And did I mention it’s a remote position? Pretty important in “these difficult times.” (There’s a vaccine now but if I’m not mistaken there’s at least three new COVID-19 mutations out there, so nature might still be slightly ahead of science on points for a while.) It would have been idiotic not to give this opportunity a shot.
I felt woefully unprepared, so I started studying. There was a grueling period of preparation, through January and February. Combing through one’s career experience to pick out relevant examples and stories that demonstrate an ability to adapt to a completely new type of work isn’t very easy. (Especially when I tend to forget the past quite quickly.) Trying to learn enough about distributed computing and its associated theories and terminology in a few weeks, to show at least a minimal level of understanding of the core concerns and pitfalls to avoid, isn’t very easy.
To make matters worse, I’ve been out of the daily programming racket for three years. That’s plenty of time to forget a lot of stuff. On top of that, the last real job interview I had was in about 2005, and the barrier for entry there was pretty low. This was a thousand times more difficult.
I had to work out my own daily curriculum to drill it all into my head so I could recite it from memory, all in a span of a handful of weeks. I used copious notes, flash cards, audio and video, reading and writing, again and again. I walked around the house saying random factoids about my work history to the dog all day every day for a while.
I did five interviews with five different people, including a coding interview. I’ve never done a coding interview before. The closest experience I’ve ever had was one Visual Basic job interview where they set me in front of a laptop with some code on it and asked me to find and fix the bugs, but they left me alone to do it. (That was around 2002, and it was actually kind of fun.) I thought a coding interview would be similar, and perhaps the easiest part of the interview process for me, but I was so, so wrong.
A modern coding interview is a lot harder and more abstract, because you have to code a contrived algorithm (or pseudocode, or write it on a piece of paper or whiteboard) in real time while the interviewer is staring at you, and explain what you’re doing out loud at the same time. (In pandemic times, you have to do it in a video meeting.) It incorporates a lot of foundational knowledge of data structures and algorithms, but it will probably be a problem you’ve never encountered before in your entire life, and probably will never see again in a practical situation. It’s … not normal. And God help you if you’re prone to performance anxiety (like, say, me!).
In the end, my preparations paid off, because I got the job, and I’m very thankful for it. It’s probably going to change my life. I’m rather hopeful I won’t need to get another one before my retirement days.
I have to admit I’m a little embarrassed about it, given the general state of the economy right now. In some ways, this was a gift right out of the blue, like winning a lottery. There’s a pang of guilt about having a good job opportunity when many people don’t. Having been without a job for some three years, I’m more keenly aware than ever before of how different daily American life is with and without big company employer benefits. It’s hard to process.
Speaking of processing, there’s always a lot to take in when you start a new job, but this is a whole new level. With a company this size (50,000+ employees worldwide), it’s a massive firehose of institutional information. I had about a hundred new emails in my inbox on the first day. I attended roughly ten separate video meetings in the first two days; onboarding lectures, team meetings, manager check-ins, etc. (There were 170 other new hires starting their first day in my “orientation” Zoom meeting! Insane.)
It’ll even out eventually but it’s going to take some time to adjust. It’s fascinating, but tiring. (I was skeptical when I first heard about it, but “Zoom fatigue” is definitely a real thing.) I’d like to write some journals on these new technologies I’m learning as I go, like that Golang post I did. Perhaps some perspectives on moving from a Microsoft world to a non-Microsoft world, or what it’s like scaling beyond a corporate enterprise. But writing time is pretty scarce at the moment.
So that’s my 2021 so far.
P.S. Here are a couple of resources that were very helpful to me in preparing for the coding interview. If anyone thinks they might do one in their future, I recommend starting to prepare early!
- Cracking the Coding Interview, by Gayle Laakmann McDowell. A huge tome in a teeny tiny font, covering a lot of software engineering topics you might see in an interview, as well as a massive list of practice problems.
- Leetcode.com. A handy website where you can practice coding interview-style problems, and just programming “outside the box” in general. I think there are other sites like it, too. There’s a whole cottage industry around “coding interview problems” that I never knew about before.
P.P.S. Weirdly, recording game videos for a while proved to be a useful hobby in getting and working in this new job. It’s good practice for video meetings, if nothing else. If you’re the kind of person who isn’t very comfortable with verbal communication (like me), recording game videos now and then might be a relatively low-impact way to practice while doing something fun.