Tuesday, December 06, 2005

Kick-ass Software Developer looking for work

Yeah, well, ... keep looking.

You know that whole thing where your parents complain to you how tough they had it and how easy you have it? You know, its where they walked 5 miles to school in 10 feet of snow uphill (both ways - (in the summer)). I always hated that. In fact, I think everyone always hates that. I mean - what are they trying to accomplish? Am I supposed to drop to my knees and thank them? Am I supposed to apologize I rode a bus to school? (downhill, both ways).

What's worse is that I think at this point I becoming one of them. I do it! I can't help it! I swear I cover my mouth to stop the words when I hear that sort of thing brewing - but sometimes, it sneaks past. Its really hard to not do it if you're a computer person though. Computing technology has advanced so fast even 20 year old people can do this "Good old days syndrome stuff."

"LCD Panels? Are you kidding? In my day we didn't have displays! We'd bang on the computer case to tell it "1" and we'd do nothing for a zero! It took me a week once to not enter 100 consequitive zeros!"

Without trying to enter the condescending tone, let me calmly proclaim that programming computers is orders of magnitude easier today than was 10 years ago. And that was orders of magnitude easier than 10 years before that. I'd say "and so on" but we pretty much run out of decades looking back to the dawn of programming as an activity done by more than a handful of people on Earth.

It would be hard not to believe this - after all, humans generally strive to make their tech easier to use as it goes along. I remember reading that back in the 70's the guys that made the famous arcade game Asteroids had to design their own sound chip (BestBuy musta been outta SoundBlasters) just to get the bleeps and blips the game gives out. Today if you want your game to have sound, you look-up the API docs. I imagine it took those guys months if not years to develop the game. I venture to say that any programmer familiar with the graphics API of a system (i.e. directx, java, etc) could create Asteroids from scratch on a PC in 2 hours. Sounds easier to me.

I recently visited THIS web-page. Its a web-page for a program that gives you a macro language to interface with the game Everquest. Everquest is a dungeons & dragons game where your avatar runs around and (amongst other things) kills monsters. This program (called macroquest) lets you write macros/programs that control your character. Effectively, you write a computer program to play the game for you. This may seem silly but it gives a player the advantage of the precision of a computer instead of the sloppiness of a human for certain actions.

Regardless of how fun this may be, I was struck by this news bulletin on this page:

The Hunt [4.23.2004]
Like what you see? Hire me already. Damn this job hunting sucks. How does a kick-ass software developer not get hired after 6 months of job searching? - Lax

Lax is apparently the person who now owns the Macroquest project - and by doing so did prove he can write (or at least extend and maintain) a non-trivial application to completion. That isn't a unique feat but its not nothing either - all other things equal (note: I said, all other things equal), I'd hire a college grad in basket weaving over a non-college grad. Despite the drinking and fun, there is some level of perseverance required to finish a college degree. Thats a good trait.

Lax's statement got me thinking. How is it possible that a "kick-ass software developer" doesn't get hired after 6 months? In fact, why wasn't he snatched up right away? Of course there is the possibility that Lax thinks too much of himself. I don't know him so lets give him the benefit of the doubt. Let's say he's an excellent programmer. Hmm.. "excellent programmer" .. what does that mean? How about - if I give him a programming task, he can complete it with a high degree of quality in a reasonable amount of time (as compared to other programmer's). Woops... if he does it reasonably as compared to other programmers, that makes him average not excellent and definitely not "kick-ass". Ok then, if I give him a programming task, he can complete it beyond my expectations in both quality and punctuality. Is that it?

So what gives? Why is a kick-ass developer not working after 6 months? I'm glad you asked. I am by definition, an employer. I have a company and I personally (at times) hire and fire people. I can then answer this question from my viewpoint. This viewpoint is "small business owner" - a "large business owner" might have a different take.

We need to step back a second and give you a probably dreaded core answer. That core answer is "money". There is a simple rule in hiring:

Every employee must be actively involved (either directly or indirectly) in making the company money.

This may sound greedy, and it is, but its like saying hunger is greedy. I started my first company almost 10 years ago and the scariest event in all that time was realizing that I had an employee with a family. I hired him because I was plenty impressed with him and he lived up to every expectation.

The fact that he had a family (which sort "hit me" months after he was hired) was terrifying because it instantly transformed my start-up from a hope and a dream to something that supported 3 kids. Until then, it was all excitement and laughs. If we risked it all and the whole thing came crashing down, that woulda sucked but we would have gone had a few beers and wished everyone well. Now - if it came crashing down a Daddy had to go home and tell Johnny he lost his job. This is a whole different thing.

My company changed that day. I worked like heck before having that employee and I worked like hecker thereafter. I had never met those kids but in effect, I made them a promise - and I wasn't going to let them down.

When a company is small - every employee is a line-item in the accounting books. A person's salary isn't an afterthought, it could be measured in percentage of company revenue. If I hired someone for any other reason than I thought they'd make this little company the most money of any candidate available, I was failing.

If we didn't meet payroll (which came plenty close a few times) Daddy didn't get a paycheck. If Daddy didn't get a paycheck, Johnny couldn't bring an apple to school for Ms. Magillicutty, and Ms. Magillicutty (that vindictive bitch) might give him a D-. Johnny would end up serving 10 to 20 in Sing-sing for writing bad checks and my eternity would be spent smoking turds (the old english spelling is "terds") in hell.

So - the question wraps around to "Is a kick-ass programmer the best kind of programmer to hire to make the company the most money". The answer seems obviously yes, but it may not be. In a specific instance we learned (as do all consulting firms) that sending 3 rockstar programmers to a client ends up with the "too many cooks in the kitchen" syndrome.

Its actually far more productive to send one rockstar (who acts as a leader) and several competent followers. And given the project, do you really need "superstar" firepower?

Joel (from Joel on Software) claims his company FogCreek only hires superstars. Hopefully programmers in the 99.9% percentile. One interested poster writes:

Another funny part is that do you need that much intelligence to develop silly applications like bugtracking software.

(here is the whole THREAD)

Secondly, I've run into plenty of young programmers with major chips on their shoulders. Check out Steve's Resume (Jan 2005: Steve's resume is no longer on the web). I simply love the line:

"I have a rare (for a programmer) feel for design."

See that all you other programmers? You're just code monkeys -- STEVE gets design too. FYI, I have met Steve though only once. From that one meeting I unconciously compare all shoulder-chips to his.

I am a firm believer that the absolute best size for a programming team is 1. Communication (and arguing) costs go to zero. Certainly its not common to find projects that are small enough to fit for this size team, but its a beautiful thing when it can be done. That being said, it seems like you can take an egotistical "kick-ass" developer (if you label yourself as "kick-ass" you are by definition, not humble) and send them flying on a one-man project. You'd think their ego trip will stay in their cubicle, but I can say from experience it doesn't work. The code may get written (and even designed if we have Steve!) but they're a management nightmare.

Another point that sticks in my head for "kick-ass" developers is their religious zeal. I've been guilty myself. Code must pristine, to heck with deadlines. I've never met Lax but I've used his Macroquest many times.

When it was first released, its macro language was frail and awkward. It was exceedingly clumsy to create meaningful game-running programs. However, it was the best deal in town and people wrote hundreds if not thousands of programs for it.

Eventually though, the developers (I don't know if Lax was at the helm for all these events) decided to change the language. Get rid of that old clumsy language and make a new one. I'm sure this felt very good from a programmign standpoint - clean up that old code!

The only problem with that is that every user macro in the world is now broken. This was a dangerous product evolution that can lose you many users. In a commercial environment this could be suicide. What was worse was that the language was hardly better. (note, you could not simply stick with an older release since macroquest evolved with everquest - eventually unsupported old versions would assuredly break.)

After a year or so - (get this) they decided to change the language again! There's a reason you see a lot of bad code in the world - its because reading someone elses code is harder than writing it yourself from scratch. Its not necessarily bad code - it just feels good to start anew.

With their second language change all programs that had been converted from language 1 to language 2, now had to be converted to language 3! I'm sure it felt great to fix all those programming issues but this sort of who-cares attitude for your user's time is not something a company can withstand.

Lastly, I've addressed this before, but programming has evolved into a "good enough" activity. It is far more important to get a product to market before your competitor than to have pristine design or perfectly clean code. Arguments of maintenance nightmares are vacuous at worst and hearsay at best. This is of course highly dependent upon your application but there are real business models that spell out acceptable bug occurences (heck, the FAA has guidelines for acceptable airplane crash lossses - if it costs more than 2.5million US dollars per passenger to fix a possible crash scenario - it doesnt get fixed). As always, it costs the most to get rid of the last 1% of bugs (and you'll never get them all).

In fact, computer game companies have completely proved this theory. It is common practice to release semi-unfinished games and "patch" them later. Simple fact is that if your game is released December 26th (as opposed to the 24th) you'll lose 30% of your potential sales (free software of course doesn't care about sales so can release "when its done" - which is a great thing, then again its rather uncommon to hire people to work on free software which is the topic here).

If you're describing yourself as a an amazing programmer, you may be hurting your job chances right off. The problem with being an exceptional programmer is that programming is not that hard. Even mediocre programmers can get a lot done. Dare I say by far most programming jobs do not need a rockstar (then again, I'm not even sure we've well-defined what an exceptional programmer is - is it that you know many APIs? Is it that you design algorithms that always have an optimal running time? Is it that you always meet programming deadlines?)

In the end, you may not be that good. To a company, being "good" means making them money.

This probably sounds over-capitalist, but again, my job is to run a company; companies are about money. The ones that aren't are.. well, they aren't anymore. Forget being kick-ass, if you want to get a job, use interviews to tell prospective employers how you're bringing value to them - if you're great, that will show through by itself.

If you won't do it for yourself, then do it for Johnny. He's a good kid.


Dean Moriarty said...

dude ur too cynical... u took all my happy away..

Dean Moriarty said...

oh and all your links arent working

isleepdeep said...

I need to get out of software development. Software developers are now saying being good is irrelevant? I am going to outsource my job for my company while I look for a new career. Paul, you are frickin' depressing!

anonymous124563 said...

Wow... This is fairly contrary to what we have in our company. (A scientific software company) Admittedly we are a fairly technical bunch, but the people with PhDs tend to produce a lot more and can push through the projects which are *hard*. Admittedly, we also have an established product that has been around for many years and we don't really have many throw-away / ship-once-then-forget sorts of products.

Time to market *is* extremely important. But code cleanliness, consistency, basic documentation, is very important if you are going to maintain it (Even if you are a team of 1).

Of course for some games these days the model is likely different because the technology will shift by the time you are going to have a new release. But this is likely not true for many applications, say eg for a random smattering, Excel, Photoshop, DreamWeaver, Autocad, Mathematica, Maple, Matlab, Dragon NaturallySpeaking etc. For these types of applications the programmer better be damn good, consistent, a team player, etc. At least in my experience you need good programmers to lead.

originalfnerd said...

Funny some people took your comments as cynical or depressing instead of getting the message about what good is.

Reliable and easy to work with are generally more helpful than "kick ass" since what you need is to get certain things done in a timeframe you can guess instead of trying to impress anyone, or be impressed, with programming skills--or watch someone be impressed with themself.

(I suppose impressing potential buyers is important but does a kick-ass programmer necessarily do that?)

But I have worked on code where not 1% but 90% of the bugs are way too hard to fix. Long-lived, self-contradictory, brittle, hard-to-understand, hard-to-work-on code. It all seemed good enough at the time. On the other hand we were smart enough not to rewrite it every year!

"Good enough" to get your first sales may not be good enough for the product to have a future. So a certain amount of preening behavior is probably appropriate in programmers.

KV Australia said...

Good article. I've made my bread butter and jam writing software that I can (with humanised confidence) that it has no errors.

Code and apps that I wrote in crica 1995 are still running and just as useful.

But, you are rgight. programming is heck more easier.

Read on old IBM machine somewhere

Evolution of programming languages is in RACE with Universe. Language designers strive to come up with language that even stupidest non-geeky dude. Universe is in the race trying to create stupider people who abuse any programming language feature.

Guess who is winning?