I have a few friends who periodically ask me, “Why don’t you work at Google?” To non-developers, Google seems like a programmer’s paradise – smart people, free food, scooters! and interesting projects to work on. Google does indeed have all of these things.
It’s not enough.
On Being Smart
Google likes to hire engineers based on how smart they are. Their interviews are full of interesting algorithmic questions and puzzles. If you’re into that stuff, it’s actually kind of fun. They and Microsoft in particular are famous for interviewing this way, but smaller companies do it too. I get several recruiter emails each week for startups where I could work with “a really smart team!!! engineers with ivy league degrees!!!”
I’ve always been “smart” (instead of athletic or popular), and I grew up reassured by adults that in their world, “smart” was the crucial component of success. Imagine my shock when I discovered that it was not, in fact, sufficient.
It isn’t sufficient for software development, either.
What’s Missing Here?
My first job out of college was at Microsoft. The people I worked with were, individually, very, very bright. As a team, though, we could never get traction. The effect was subtle. At the time, it felt like we were making progress. We had a lot of really detailed discussions about different implementation options, and everyone had interesting input. We wrote a good bit of code.
But we never actually finished anything, and eventually, it turned incredibly frustrating. I had been programming for maybe four years total at that point, and never at a real company before, but I already knew I hated writing software no one used.
For a long time after I left that team, I couldn’t put my finger on what went wrong. Clearly, we were all smart. Somehow as a group, though, we were dumb.
“Gets Shit Done”
There were a lot of factors in my frustrating experience – Microsoft’s waterfall process, the ongoing antitrust litigation, and political machinations around the project, just for starters. But I think the same group of engineers in a perfect modern environment would still flounder. There were too many people on the team who, individually, couldn’t finish anything. There was always a good reason why – some new requirement that necessitated a rewrite, or some piece that turned out to be more complex than anyone thought.
As a junior member of the team, I took these explanations at face value. With the benefit of ten more years of experience, though, I know that while it’s important to write quality software, it’s equally important to just fucking finish it.
There are a lot of smart engineers who understand this, and, sadly, a lot of smart engineers who don’t. Microsoft’s hiring process didn’t distinguish, and neither does Google’s. If I were to take a job there, I might be on a team where everyone is smart and can get shit done. There are certainly plenty of those at Google, as their products attest. But I might be on my Microsoft team again, only this time with free food and scooters.
That’s about as appealing as another winter in Redmond.