How I got a job at Stack Overflow
I just got a job at Stack Exchange. The experience was interesting enough and I learned a few things that could be valuable to others.
We are still hiring another developer if you are interested after reading.
My previous job was good. Some interesting work, some boring work, and a potentially awesome project coming down the pipeline. I was making internal web apps for the firmware department of a hard drive company, and had opportunities to do anything I wanted (stay, work on firmware or other cool stuff). However, the town I was living in (Longmont, CO) was downright boring for a single person, and I wanted to leave as soon as possible just to get out.
I visited a friend who lives in New York City over Thanksgiving. I visited Top of the Rock, which is an observation deck on top of one of the taller buildings right in the middle of the city. You can see almost all of Manhattan up there, and it's mesmerizing. While I was there I decided that New York was the place for me. The next few weeks I became more and more convinced that that was where I wanted to live. I decided to start applying for jobs at the start of the new year. And I had to get out of my city.
(This is not a plug)
Being a programmer, I use Stack Overflow. I had thus seen the displays for the careers site. Hey, why not use that to find a job? Ok. I made a profile, which I got to do because of my github activity, and started applying for jobs. (Yes, I ended up finding a job on the same site I am currently employed to work on. I thought it was the best way to find an awesome job, and it was. So, this isn't a plug, it's just the truth.)
I applied for around 7 jobs near the first of the year. Two said to take an online test, two never replied or disappeared, and one scheduled a phone interview. The phone interview went horribly. The guy asked me one of the questions verbatim from Joel's article and I had no idea what to say. No callback. I started studying Programming Pearls.
I did one of the online code tests and got a phone interview a while later from that company. After a second phone interview (both were writing code on a shared document) they flew me out for a few days. Thursday was interviews (coding on a laptop, really hard and fun problems) all day. They asked me to return Friday to work on their product like a normal developer. I thought this was brilliant. A way to see how a candidate actually does the job. I liked them a lot because of how rigorous the interviews were. I wanted to work at a place that was highly demanding of everyone who worked there. They said they'd get in touch in a day or two. Two weeks later (about a month total) they declined to make an offer, and I was still stuck in a city I hated.
I had suspected I wasn't going to get an offer, so I applied (early February) to four more companies. Lots of phone interviews later and I have two onsite interviews scheduled for the same weekend. Of note is that neither of these two companies had had me write any code. I know that not everyone likes code writing interviews, but I do. They're difficult. I want to work with people who can do that kind of difficult thing. The first company is a very small startup. They had me do some thinking out loud, database, and design questions. Cool product; I liked them, and they seemed to like me. Second company is more established. They just finished their new office. They had me do an hour-long written test which covered a wide range of stuff. I met with people from various organizations. They were nice, and I was okay, but not thrilled, with their product. Each said they'd get back to me very soon. Two weeks later, both declined. At this point I was ready to just up and move to New York I wanted to leave so badly.
First round of lessons
The count at this point was around 10 applications, phone screens with 7 companies, on site interviews with 3, and 0 offers. What was I doing wrong? I honestly wasn't sure. Why did they all take two weeks to figure out they didn't want me? Is it that hard?
My guess is that there was a culture mismatch. I think I did well in the interviews and was technically qualified for all three jobs. But something about our interaction didn't convince them that I was "the guy". I think they had a two week process of saying back and forth to themselves: "He's qualified: hire him." "But he won't love working here: no hire." "So? He'll still do good work." "But not awesome work." After two weeks, they either got bored or found someone else who was a better fit. My internal dialogue, however, was going like this: "I thought I knew how to program good." "No, clearly you don't." "But look at all the typing I did on github!" "Even cats can type." ":(".
Proof of concept
At this point I was crazy to move to New York. But during the double interview weekend, Stack Exchange asked for a phone interview. I was shocked. I have read all of Joel's articles, and I know how hard it seems to get a job there. I figured getting a job at Stack Exchange is at least as difficult at getting a job at Google (to which I did not apply, because I thought I wasn't smart enough).
Phone interview went, well, pretty much like their article describes. Fizzbuzz-like question. Easy pass. Harder, fun, thoughtful question with coding. Pass. Same thing with another guy. Pass. Fly out for interviews and meet Joel. Cool. Things were happening.
On site interviews also went exactly like their articles describe. No written schedule, just one interview after the next, all coding and experience questions. Lunch downstairs with the Fog Creek guys. Gape and drool at their office space a little, but pretend like I'm used to it. Joel was sick that day, so I spoke with Michael Pryor. I'm not sure whether I should be happy with myself or not, but he asked a question that he has been asking for years, and I came up with a solution that he has never seen. I had to stop at points to carefully explain something I thought was obvious that was apparently not. Again, I'm not sure to interpret this as a good or a bad thing. (Maybe all the smart guys come up with the same smart solution. Maybe I'm so untrained that I just made something up that really isn't that great.)
Apparently it was good enough. I walked out of their offices feeling good, used the restroom, and went to the elevator to catch the car back to the airport. During the one minute that I was waiting for the elevator, the VP of Engineering came out and told me that they were going to make me an offer, which I accepted a week later. I was living in New York less than two weeks after that. (I resigned and decided to move before I had a job offer. I really wanted to leave.)
Let's compare: the first three declined offers took two weeks to respond to me. Stack Exchange took two minutes. Culture mismatch? Not in the slightest. Love the company and the product? Definitely. I get to work on something that helps developers find better jobs. Something I desperately needed and got.
I am thrilled that those first three companies didn't hire me. I am happier here than I would have been there. Technical ability is important, but not everything.
Most important lesson
But the most important lesson I got from all of this? Anyone can work for a dream company. I say this because I do not feel that I'm some rockstar programmer. I've just worked and learned like everyone else. I studied writings from some smart programmers, learned a few languages and systems, and in the end got a job at a place that I had been dreaming of working at for over 10 years, when I first heard of them (that is, any company run by Joel and Michael).
Want a job at a dream company? Work and study, and it's possible. Not getting offers? Maybe it's not evidence that you aren't that great, it's just that you would fit better somewhere else.