This morning I was reading through some of the comments on an article at Hacker News, and stumbled across this one:
The key is to hire rockstars—they produce more value in four days than a mediocre employee does given weeks. If you gave the typical person free food and time off. They’d stuff themselves until they got diabetes and spend the rest of their time watching reruns of ‘Room Raiders’ on MTV.
I am perfectly willing to acknowledge that not all of us excel at the same things, but I’m coming to believe more and more firmly that this whole “typical person” entity is a myth. I’ve never met a typical person. There are only people who are passionate about what they do, and people who aren’t. When the latter become the former, they become “atypical”, because suddenly they are self-motivated, insightful, excited, optimistic, and happy.
That's a pretty powerful statement. Computer programming is a job where study after study has shown that the best people on your team do 20+ times the work of the worst people, and bulletin board after bulletin board is full of new programmers asking, "so how do I become one of those best people?"
There's Jamis Buck's answer. I believe it, mostly. I've known many, many good people that were crippled by not giving a damn, and you can't program well if you don't give a damn. Which leads me to some of my past jobs...
I've worked for a lot of companies. I've got a resume from a year ago up, the one I updated when Peakstream got sold to Google and I went back to Access, nee Palm. Palm's the one company I worked at for more than two years. Yeah, the computer industry is like that. Yeah, startups are like that. But some of those were bad choices on my part that I gave a year and then jumped ship, or places where I hated what I did, sucked a lot, and burned my bridges.
I'm doing pretty well now at Access. My review at work was very good, and that hasn't always been true. It was almost never true at big companies -- again, not since Palm. I rocked at Palm. I had good project managers that kicked my ass when I needed it, and I turned out lots of work, with plenty of spare time on the side. I was a new, young, good hotshot of a programmer, and I played the role appropriately. I liked it a lot. And NOW Solutions, before that, wasn't a good cultural fit but I still did great work for them.
After awhile, when Palm's culture changed in unfortunate ways, I jumped ship to Broadcom. And unexpectely, I was sucking. Computer programming is a weird, weird job -- if you don't love it, you can barely do it. If you're used to loving it, you suddenly feel paralyzed when you don't any more. You know those dreams where you can try to run as hard as you want and your legs don't move? It's like that. And believe me, you don't see it coming until you're in a situation where it happens.
Looking back, Broadcom was a terrible choice. I picked it more or less out of a hat. It was a terrible environment I never should have been in. I pity my old manager, Shannon Posniewski, who could tell I was extremely competent and still couldn't get anything useful out of me. Okay, so I'd pity him except he seems to have made it big in the games industry -- he's a good, solid manager, and I'm glad to see he did well. He saw a lot of potential in me, and I'm sorry he didn't get to use more of it.
I left Broadcom for NVidia. They're a fine, solid company that runs its people absolutely into the ground. I hope my old coworkers there do well for themselves. NVidia takes some of the best specialist programmers I've worked with and runs them hard for ten- or twelve-hour days for five to seven days a week, constantly, for years. Those are guys who really, really deserve to be rich, and I wouldn't trade places with them for anything.
I sometimes talk about how I wrote myself out of job at NVidia. What I mean is that I couldn't deal with the team I was on so I tried to transfer elsewhere within the company. My last step in that process was the one where I wrote to my manager to say I thought I wasn't a good fit for his team and I'd like to transfer. The new guy changed his mind, leaving me in the position of having written an essay to my manager, "why I shouldn't have my job, by me." Oops, I guess. But to be fair, I was sucking in the position I had. I was unmotivated, I hated it, and to look even halfway decent I was going to have to compare well to guys who pretty much burned themselves alive for the job. I don't miss it, I wouldn't want it back... But they have every reason to treat me like a bad guy for the job, because I really didn't do well by them.
After I was asked to leave NVidia, I headed to Tapwave. I did some good work for them, and I did some questionable work for them, and I did some serious procrastinating at the end. I blamed a lot of the non-productivity on getting seriously injured. That was when I had the bad motorcycle crash that left me in a wheelchair for a bit. And some of it was from being injured, and the physical ramifications of that, and the isolation. Some of it was that I was doing a project with a hardware accelerator, and finicky hardware projects are the worst for me. I change something, it doesn't work. I change something else, it still doesn't work. I keep doing that, and I take longer to make each change in turn, and I have no idea if the problem is me or the hardware, or if I'm making any progress.
But to be fair, a lot of me sucking wasn't any of those things. It was the fact that after sucking for a year at Broadcom and sucking for a year at NVidia, and sucking for several months at Tapwave, I was just getting convinced that my early career was a fluke.
More than two years of not doing good work is hard. I did some good programming in my off-time. But I meet a *lot* of programmers who can do good work if they get to choose it but suck when working professionally. They are simply not good professional programmers, even if there are circumstances where they can write good code. Those aren't the guys you want to work with. And after 2.5 years of sucking, it looked like I was one of those guys. Even to me it looked like that.
The turning point, oddly enough, was Sharpcast. Some of you probably remember me whining about them -- they were the startup where I totally kicked ass for five months and then they fired me. I've described them in various ways, so let me try for a broader, somewhat fairer view of them here.
I was jazzed to be working at a startup, as full-time programmer number three no less. It was just the founder, one other guy and me on the programming team when I got hired. More showed up by the time things got really underway, but I was something like employee number twelve overall. Definitely early. And I liked the product, a photo sharing-and-editing infrastructure for both desktop and mobile. I still do like it. I think it's a great idea, and they may yet do very well for themselves. I'll get nothing from it if they do.
Sharpcast was a place I really worked my ass off for. I worked long hours, sometimes on stuff I hated, I set up infrastructure where it was needed, and I generally acted like it was "my" company. In a business sense it wasn't -- I stood to own about 0.2% of the company, and that's prior to lots of dilution from funding rounds. I understand all that better now, but at the time I was just jazzed to have a piece of a nice early startup, as much for the startup experience as anything else. I was constantly exhausted. I was entranced with the startup experience. I was happily obsessed with fun technology. And for the first time in a number of years, I was doing good work.
In that five months, one other guy and I built an excellent Desktop Windows client and an excellent Windows Mobile client, and I got to design a lot of the infrastructure for image loading and scaling, and we were working on stuff with no hardware acceleration so I got to use all that old bitmap graphics stuff I knew way too much about, and, and, and... It was good. Technically, it was some of the best work I've ever done. It was excellent leverage to get a product off the ground. It was mostly very solid code. It was done in excellent cooperation with the QA folks and UI folks.... If I ever convince myself to start a company, Sharpcast will be the reason I'll believe I can do it.
Of course, the other Sharpcast folks never liked me much. They were mostly clean-cut, fresh-out-of-Stanford kids and a couple of founders who were both terrified of communication. My abrasive "look, this is what's broken, what are we doing to fix it?" style bothered them intensely. It doesn't help that when I'm really geeking hard I neglect things like my tone of voice, shaving regularly and (yeah, okay, I admit it) sometimes even showering. I was one of only two programmers with any significant number of years of software development. The other one was one of the founders, a guy who had to be in pain to be willing to talk about anything. I was a big old lump of culture clash in a field of clean-cut Stanford grads being optimistic and having fun and letting other people worry about the details and just having a grand old time that their little Palo Alto startup.
My project manager liked me. He also believed in problems and worries and paying attention to stuff that wasn't happening on time. So he *loved* me. How often does a project manager pull software in *ahead* of schedule? But he also fretted, like I did, about some of the questionable-looking scheduling we were doing. Which meant that I asked the same awkward questions he would have had to ask. Better yet, I worked hard so his milestones looked good. He liked me, and is still one of the best project managers I've worked with. He hated the way they got rid of me. Looked sick about it. Hey, AJ -- linkedin says you're back at Microsoft and I hope they're treating you well. You deserve it.
So five months later, we had gorgeous client programs to show off and were doing great demos and Sharpcast was in line for eighteen million in funding. And that meant they could get rid of me. I may have played commando building them their software, but I suspect I sometimes smelled funny. I often said awkward things in meetings, like, "so, when are *you* going to be done with that so that we can finally build the stuff that depends on it?", and... Well, they already *had* client software good enough for their release. Vijay and I had built it, prettily and maintainably and way ahead of schedule. So they didn't really *need* to put up with me any more, did they?
I've always felt weird about Sharpcast. They told me on a Thursday afternoon that I had just finished my last day there. I went from five months of constant, hard obsession about the product, the product, the product... to being told it wasn't my product any more, and I could go home now. They gave me two weeks of severance, which is standard. And cast me adrift. I wanted to be bitter. I had reasons to be bitter. But I couldn't shake the feeling that it was karma. I had taken two and a half years of other people's money and given them too little useful work in return. That at Sharpcast, I worked at well-below-market wages for five months, building years' worth of good stuff and I got nothing for it but the door hitting my ass on the way out. It suddenly felt like closure. For the first time in years, I felt like I had paid my dues and I could go and do something worth doing without that feeling of debt. After about a month of shell-shock and World of Warcraft, I got back to work feeling... clean.
It's been two more years since then. I've been doing good, solid work for two and a half years now. And I've wanted to just *say* a lot of this for all that time. So today, it's all written down. And today I can lift that weight off my shoulders, because I don't need to write it any more.