Log in

No account? Create an account
07 March 2008 @ 02:57 pm
This has been building awhile...  
I was reading a geeky blog and this, written by Jamis Buck, hit me in the face:

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.
(Deleted comment)
KJBcapnkjb on March 7th, 2008 11:30 pm (UTC)
hello nonsequitor
Wait, you played World of Warcraft?
Noahangelbob on March 7th, 2008 11:37 pm (UTC)
Re: hello nonsequitor
Yeah. I had a troll hunter for awhile on Khaz Modan. Allow me to recommend never playing Horde on Khaz Modan.
The Onion Girltshuma on March 8th, 2008 03:08 pm (UTC)
Re: hello nonsequitor
Why? Is it a PvP server with an underpopulation of Horde?
Noahangelbob on March 8th, 2008 04:36 pm (UTC)
Re: hello nonsequitor
Nope. It's a PvE server with an underpopulation of Horde that has had a very strong Alliance guild or two active since the server started (transfer from Proudmoore). As a result, the Horde population stays low, there are few on the Horde side running instances, and in general it's a bad place to find a pick-up group and an even worse place to find a solid guild. Plus, with very little money and few good items Horde-side, the auction house sucks.
IANALqueen_elvis on March 7th, 2008 11:49 pm (UTC)
IME, the environment makes or breaks any job. The older I get, the more I realize that a lot of people in management don't really understand how their actions affect the people who work for them. If people are leaving the company in droves, or if there's obvious favoritism, or if nobody ever says freaking "thank you," of course nobody's going to give 100%.

Of course, it took quitting a high-stress job and working a job I didn't give a shit about to understand all that. Too bad nobody teaches you this stuff in school.
griffjongriffjon on March 8th, 2008 04:11 pm (UTC)
Very true; I'm currently in a job with a (well, formerly) great co-worker environment, but the management has made some asinine decisions that locked me into a horrible situation -- leading to me writing blog posts and reading goats.com from 3-5pm most days.
r_transpose_pr_transpose_p on March 8th, 2008 01:01 am (UTC)
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.

Fuck dude, you should've worked for CommonPoint instead.

They are no longer a startup, so I wouldn't recommend switching now, but we had a couple "look, this is broken, fix it!" types (one became team lead, the other was clearly our best programmer, but not as smooth with people, so he only led teams that needed a strong programmer as a lead), and I definitely fit your neglect patterns while I was there.

In fact, I can't imagine a startup environment where frank discussions of "This is broke, fixit!" don't come up!
Noahangelbob on March 8th, 2008 01:16 am (UTC)
I can't imagine a startup environment where frank discussions of "This is broke, fixit!" don't come up!

I recommend not working for Sharpcast, then :-)
Deanna: dragons DOALA!dr4b on March 8th, 2008 01:02 am (UTC)
I somehow always have trouble picturing you as anything but the Evil Genius programmer. Hmm.

Also, if you are at Access, why have you not come to visit me in Japan like Jesse did? :)
Noahangelbob on March 8th, 2008 01:17 am (UTC)
Sadly, Access has only sent certain people on certain projects to Asia. It looked like I might be going to Korea, but that fell through. It probably doesn't help that I've worked here less than a year (Palm time notwithstanding)
nonlinearsystemnonlinearsystem on March 8th, 2008 09:25 pm (UTC)
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.

This rings a bell with me -- although I never actually had to work on the same project with one of these clean-cut fresh-grad Stanford types, I shared cubicle space with them. I'm sure a group project with them would have had the same disastrous cultural clash that you experienced. They projected a feeling of massive intellectual superiority over me whenever we interacted.
jessed on March 8th, 2008 10:11 pm (UTC)
Just wanted to say "Thanks for the story." I found it interesting and insightful. I think most people don't really consider how they can be affected in significant personal ways by the environments they're in. Of course, when I say "most people", I really mean "I". I've certainly felt like that at times too -- it's actually a big reason I went into management. Just to get out of a bad environment. In any case, I'm glad you're doing better now, and have gotten some weight off your shoulders. I've certainly always enjoyed working with you.
msde on March 9th, 2008 05:30 am (UTC)
I've always found that line about rockstar programmers to be a total pile of crap. You get a rockstar programmer when you hire a quality programmer and have a good working environment. I will admit that it can take some searching to find a programmer who complements a particular environment.
nonlinearsystemnonlinearsystem on March 10th, 2008 10:11 pm (UTC)
I have to agree with this based on my own experience. In working in a decent working environment on a project that is at least marginally interesting to me, my productivity is vastly higher then in working in a bad environment or on projects not allowing any room for creativity. In an ideal situation I can write code in 1 hour, where the same code will take me an entire week of effort in a bad situation -- and the code I wrote in the 1 hour will be better quality (faster, more maintainable) then the same code I slaved over for a week under bad conditions.
Hillary: Trapped in spreadsheets!coyotegrrrl on March 10th, 2008 06:27 pm (UTC)
I'm really glad you laid this all out. I've been here over two years and sometimes I've slacked and sometimes I've worked my ass off - both with the same result. I hope that evens me karmically. I think maybe not doing well in the spring and doing great in the fall and getting the same shitty review both times...gods, I hope it balances out.

When the place I interviewed with and my old boss were interested in me, I felt new again - hey, someone who *values* my work? Crazytown! I'm hoping my time off will help get my house in order too. I hope it'll be worth having little to no income.
taoflaherty on March 23rd, 2008 10:36 am (UTC)
There are only people who are passionate about what they do, and people who aren’t.
There are also people with neurological disorders.
Fighting against constant spasming, or narcolepsy, or low self esteem, or a lack of ability to concentrate, or...

Maybe you just don't know how to be passionate - you never learned, or you've had to forget.
Say you've got a full focused desire on wanting to do nothing on the planet but clean your room, because if it's clean then angels will come bringing cake, but if it isn't clean by tomorrow morning then the wolverine that's been scratching at the door will finally break it down and...
now what? Planning to complete simple tasks is incredibly complicated - you're taking advantage of a lifetime of experience. You can try to run as hard as you want and your legs don't move - you need to know what you're doing. (A more basic level than management. Management can tell you to clean your room, and might give some direction/advice, but won't break the process up into all the functions and data structures you'll need, schedule your day, arrange your transportation to and from work, and look after your kid.)
Noahangelbob on March 23rd, 2008 03:48 pm (UTC)
This is true. My understanding of such things, and my (very limited) parallel experience agrees with you that it's very difficult to do under such conditions.

I don't know what the right answer is. My usual "give passion a jump-start" advice is only partly useful there -- things like "avoid other distractions," "see what you're actually doing with your time(other than the project) and avoid that," "sketch out how good it will be if it works," etc.

But fundamentally, going through the process is really hard, and when there's extra hardness it's much, much harder. One trick that helps me is to sort of make it a written test -- make lists of stuff that needs to be done, and get in the habit of checking the list for things to do. Certain things will tend to languish because you'd rather do anything else, but that's true anyway and at least with a list you know exactly what they are. I also find that it's easier for me to break something up into sub-tasks on paper than in my head.

So if there's something I don't want to do, I can cross it off, replace it with all the individual bits of it, and then at least I can do *some* of it. Also, it's often easier to tackle this stuff when I can carve out all the bits I don't mind until I can see *what* I'm avoiding, since it's sometimes much clearer why I'm avoiding it once it's sitting there by itself.

But all of these assume you're functional enough to make lists of tasks on paper, go back to the lists repeatedly thinking, "what should I do next?" and actually do some of it. It took me a bit of time to build those habits but they *do* work for me. And the more extra strain and disinclination and general malaise I have about the project, the better they work.

The downside? Like most unglamorous good advice, you just have to *do* it, and you probably don't want to. I certainly don't. It works when I do, though.
Noahangelbob on March 23rd, 2008 04:07 pm (UTC)
Hm. I can perhaps also respond to this in a simpler way. What you describe sounds a lot like lack of practice as well. Coordinating multiple activities, breaking tasks into subtasks, and even going from stopped to started are things you can practice. You may feel ridiculous practicing them, but if you can get over that then you can practice them and it helps in the actual moment.
Krissyrightkindofme on March 23rd, 2008 04:22 pm (UTC)
Butting in...
My brother had a serious traumatic brain injury when he was 12 and as a result I spent a lot of years hanging around hospitals/long-term care facilities for brain injuries. I'm going to offer some advice at this time because it seems like maybe you are asking for some. If you don't appreciate me offering advice, or you just don't want to take it at this time, that's ok and it's ok to tell me not to offer advice. :)

I understand the kind of frustration you are talking about. Part of it stems, in my experience, from feeling overwhelmed by the sheer magnitude of the task at hand because for someone who is not neuro-typical "clean your room" is a rather significant and complex task. What I have seen work for most neuro-untypical folk is to have someone help you with a comprehensive list of what "cleaning the house" actually means. Spell out things like "Vacuum the floors" (maybe have each room listed individually) as separate from "wash the counters" and "pick up clothes from floor" and "pick up toys from floor." Try to break this up into as small of tasks as possible so that each task will hopefully take only about 10 minutes. Put all of these on a whiteboard with a weekly schedule telling you what to do on which days. Try to do 2-5 activities per day so that no day gets too overwhelming and don't do the tasks one right after another, take breaks in between.

The whole purpose of this is to simplify these tasks so that even when you have physical difficulty or psychological difficulty most people can handle about 10 minutes of working at a stretch. Then take a break for a few hours. Try not to focus on "my house doesn't look like Martha Stuart lives here" and instead look at the fact that you *are* accomplishing tasks. One of the cool things about having this all on a whiteboard where you check the tasks off one by one day by day is at the end of the week it is pretty satisfying to have evidence that "Hey! I got stuff done!" Having it on a schedule also gets you off the hook of having to do it all at once on a given day. Maybe the house isn't perfectly clean at the end of a given day, but it is never that bad and honestly that's better than most people manage. :)

I think I understand what you are saying in your comment and it's hard. It is going to be hard forever, but it is possible to develop coping mechanisms that can make it a little easier in some ways. Have you ever worked with an occupational therapist post-accident? I'm not sure if this is universal, but for my brother a lot of what they helped him with was figuring out how to break up tasks into manageable slices. Honestly, Gobi or a friend can help you with a lot of the same sorts of list making. It just takes patience.