Sunday, December 04, 2005

Aardvark

I've been, on-and-off, following Joel Spolsky's blog for a few years now. I first became aware of Spolsky when I read (or at least bought) his book on user interface designs, which came out in 2001. Since then, the way to read about his musings is in his blog, JoelOnSoftware.com.

Joel's pretty opinionated about how you make a great software company, which is no doubt, highly influenced by his time at Microsoft. You can tell that the "Microsoft Way" pervades everything he does at his company, Fog Creek Software. In a nutshell, the goal is to "hire the best". If Joel had his way, out of 100 potential programmers coming out of college, maybe 1-2 should ever be hired.

To give you an idea of this, imagine you're in college, seeking a computer science degree. Four years of studying algorithms, implementing operating systems, using databases, and simply playing around with software on your own time, because, hey, that's what geeks do. Surely, the classes you take in computer science are not enough to make you "the best". You must invest time outside of class learning the technologies of the day.

As you make your way to senior year, you have maybe 50 people in your class. Out of which, maybe 1-2 seem like really bright guys, the so-called superstars. They make A+ on their exams, and seem to everything. And maybe that one person, just maybe, is good enough to be hired at Fog Creek.

Or at least, that's how Fog Creek wants it to be.

Let's just see how difficult it is. To give you a better picture, imagine you've been hired as a football coach at Podunk University. You've been hired to start up a college football program, which is a huge undertaking, since you're starting from scratch. You want a successful program, so you want to recruit the best high school talent across the country. After all, you can't win, if you don't have talent.

Can you simply go out and get that talent?

Of course not. There's plenty of other universities with huge budgets, years of success, and established relationships with local high schools. You'd be competing against Florida State, Penn State, USC, Notre Dame, Michigan, Miami, and all the other powerhouses, trying to convince Joe Blow that he should come to your college to help you become a quality football team.

What assurances does Joe have that you can pull this off? Why should he take his chances on a college starting its program from nothing, with no proven history? It might be different if you were, say, Bill Parcells, who's succesfully coached the Patriots, Giants, Jets, and now the Cowboys, and you were bringing your staff with you, and could assure this young kid that you have NFL credentials, and it will pay off by being coached by the best.

Thus, one way to start from nowhere is to be someone.

So that's step one for Joel Spolsky. If you're Joel, you need your name out there. That means you need to do something that makes people care about what you say. First step for Joel. Write a book. Of course, to write a book, you need to be knowledgeable enough about an area to write something, but let's say he is.

Good, book gets you some fame, but it's not enough. Tons of people write books. It's not a way to distinguish yourself. It helps to get people coming back to you, time and again, to hear what you have to say.

Step two. Blog. Now, I read Joel's blog, but he has a (kind of) rival. Adam Barr, who also worked at Microsoft, then left, then came back again, has his own blog: proudlyserving.com, a website named after a book he wrote about his experiences at Microsoft. Adam's opinion about MS is more evenly balanced, probably because, unlike Joel, Adam doesn't run his own company.

Barr's blog, lately, has been tough to read. He's spent more than a few entries blogging about Monad, the scripting language that's supposed to come out with Microsoft's newest OS, which was nicknamed "Longhorn", but is now being formally dubbed as Vista. I couldn't care two whits about Monad. I mean, I think it's cool (at least, I think), but if I'm going to casually read his blog, I want it to be either less technical (talk to me about the computer industry, how to make great software, etc), or pick some technology I care about (say, Ruby on Rails).

Joel, on the other hand, doesn't fall into this trap. He's not going to blog about the minutae of Windows APIs, because even the geekiest of geeks just doesn't care. Even if this kind of knowledge is crucial to making great software, it makes for awfully pedantic reading. Even technical blogs can't be too technical.

Sometime between steps 1 and 2 is picking a place for your company. And this is big. You think you can pick any place for your company? You can't. Even Microsoft, located in Seattle (Redmond, if you want to be picky), has problems getting some people to go to their company. Why Seattle? Why not New York? Why not California? This is a common lament of some people who think Seattle is some kind of backwater.

Microsoft, of course, doesn't really have to suffer this problem anymore, because, let's face it. They're Microsoft. People would (almost) go there if they were located in Idaho. (OK, that's not true, but the name value really overcomes those who would rather be in New York).

It's not that you can't find talented programmers who grew up in rural spots, it's that the people who most like rural spots, or at least, non-metropolitan spots, happen to like their own rural spots. You get a person who lived on a farm in Iowa, and they're not going to want to head out to some place in Wisconsin, or Alabama. They happen to like their hick town over yours, thank you very much.

Amazingly enough, you can convince someone from a hick town to go to the big city, because they'll, at the very least, think that it's good for their career, even if they hate the city, and basically, if they've been cooped up in small town, USA, they may not even know they really hate the city (it's just that that's what they're used to).

That means Joel has to have his company in California or New York City. He likes New York City, so that's where it goes.

Now there are plenty of people who can't stand the City, especially, they can't stand the folks who call New York City, the "City", but that outweighs the bunch who don't care, or actually love it.

I mean, Joel could have based his company in, say, Atlanta. Now, there's a large metropolitan city. But Atlanta is in the Deep South, and people have all sorts of negative images about the Deep South, especially those from the "City". That's OK, because those in Atlanta hate those in New York.

Point is, Joel can't locate just anywhere if he believes in getting the best talent.

Next step. What software to write.

Joel's mainstay at Fog Creek is FogBugz, a bug tracking system. These days, it's not PC to say you have a bug tracking system, because you want to do two things in such a system. Bug tracking is number 1. Number 2 is feature tracking. You want to add a feature, and you want to track it to completion.

Ultimately, this is a great first product. On the face of it, it sounds lousy. After all, plenty of these systems exist. But do any of them really stand out? Is Bugzilla really that good? It's not hard, if you do it right, to make yourself stand out as a top notch content tracking system.

But it's great for another reason. When you're working in a company that needs to do its own software management, you have to convince everyone to use the system. What better way than to make the system and then, as software guys term it, dogfood it. Dogfooding is this notion that, if you were making dog food, it would be so good, you'd eat it yourself. Now if that idea repulses you, think about how people write software. There are times where folks write software that they wouldn't use, because, like dog food, the thought of doing so would make them yak.

You make your own tracking system, and then you use it. That's incentive to make it the best system you can, because you're having to use it.

But it expresses a more common theme for the kind of software that Fog Creek wants to write. The idea for most of their software is dirt simple. For example, they also have a system for publishing your own webpages. I mean, come on, this isn't rocket science. (Hmm, I really want to use some other term besides rocket science, because, frankly, it's so 1960s. I should say, it's not string theory, which would at least be plausibly difficult).

Next step. Corporate environment. Spolsky just moved into his latest digs. He wanted extra nice rooms/cubicles, a place that looks cool to go to work. He has to make his place look really cool. Microsoft, for example, prides itself in lack of cubicles. It believes that, with the trend to cubicles, having an office is just the kind of throwback that people need. There's a flip version of this which is having no cubicles at all, where everything is open air, so you can just yell out at people as you need to.

Joel wants to get the best talent, but it occurs to him that he may already be losing talent as the kids come out of college. Computer science majors aren't known for their outgoing, risk-taking natures. They want stability. They want money. Big companies can afford them both of that. However, big companies often snatch kids as interns. Once you like to work at some place as an intern, then that sense of familiarity makes it all the easier to convince the person to stay full-time.

Joel realizes without a great way of attracting interns, he's not going to get the talented kids he wants at his company. The blog goes part of the way there. It's attracting him some notice. Good kids are applying. But he wants to take it to the next level.

What to do? What to do?

Ah, let's have the kids build a product from start to finish. Great, great. Those who come will get to see the whole software development cycle crushed into the tiny time-frame of twelve weeks. But is that enough? OK, we need the kids to blog about the experience. But is that enough? Let's have a documentary!

I read about the documentary on the blog, and am one of the several thousands who pre-order it. It just came in the mail like two days ago, and I'm eager to watch.

Let me tell you my expectations. I am expecting to see how software is developed and managed at a company like Fog Creek. How do they do things differently from, say, the company I work at? What are the keys to hiring the best, and then what are the keys to getting them to perform, and what would happen if they couldn't hire the best? Do they use agile methodology? Are there code reviews?

Realizing that they are software engineers and not filmmakers, they hire a company called Boondoggle Films to do the work.

I'm about half way through this documentary, when I realize there's no way they're going to talk about what I want them to talk about. There just isn't enough time. Instead, it's a geek promo.

Here are the keys. Sell New York City. Sell the geek qualities of the kids. Sell the party qualities of the kids. You know that the kids feel like idiots in some of the set-up scenes. For example, the kids want to host a party, and they re-enact the grilling they go through when the complex says it's against the rules to host a party with excessive booze. This is, and I kid you not, re-enacted in black and white. The four interns are thinking "what the hell?".

There are several things that I do find rather positive. First, the company is run by a coder. That somehow makes a big difference to me. The company I'm at feels like it's run by marketers, and this ultimately means that there's disagreement about what's important to the people who market versus those that produce the product. It feels so much more sensible if a software guy runs a software company.

Second, they get kids their own places to stay. Our company told interns to find their own spots. Microsoft does this too. They own apartment complexes right near their "campus", and interns don't pay for it, nor do they have to look for their own spots. The Fog Creek apartments aren't their own, but at least, they got it for the kids, furnished it with large TVs and a DVD player. This means they are always thinking, how do we get the best talent? What do we need to spend to make it happen?

Now, it's not like these kids couldn't have found their own place, but the idea is to get them to get along with one another, and what better way to do this than to make them live with each other. Sure, they may come to blows, but it fosters a togetherness that wouldn't otherwise occur.

Like I said, I'm halfway through watching this, and I decide I want to blog about this. Normally, in a movie, you have to watch from start to end, and there's no way to do anything about this until you're done. But this is a DVD, and I can just pause it, and blog away.

So far, I've told you what I like. Here are the things I don't.

These days, documentaries are resurging in popularity. I should say surging, because up until recently, it was hard to catch documentaries outside of PBS. The reason they are popular is because people who make documentaries suddenly realized they needed to do more to make themselves watched.

First thing they had to do was to pick subject matters people care about. Enough about the plights of Native Americans and post Holocaust victims. We want to see a guy eat at McDonald's for a whole month, and nearly die from it.

Second, and this is important. Camera tricks. Watch, say, Tarnation, and you see that if this were handled like a straight-forward documentary, it would be, sure, compelling, but still not exactly as visually exciting as what Jonathan Caouette eventually came up with.

The director does diagonal framing, black-and-white, stuttered pans, quick swish-pans from spot-to-spot-to-spot. The idea is to keep the camera angles interesting, because goodness knows, the subject matter may not be.

What also hurts, to some extent, is to distinguish between one geek and the next. I know one guy seems a bit Russian, and there's one kid with glasses, but only Joel really stands out, and that's because he's more self-confident than everyone else.

But I came in wanting to understand how software gets created, and what I get is a kind of travelogue. Rather than deal with the meat of what these kids are really doing, they deal with the fringe aspects. Where they live. What geeky things they like to figure out on the side. It's as if the main topic, building software, is simply way too technical, for even techies like me to follow. Or at least, too boring.

This is where having a filmmaker make the film hurts (I think). I'm a computer science guy, and I've taught. I also care about how people learn. I'd make the film about that. What is it that separates these kids from the average Joes of the world. Unfortunately, to really show this, you'd have to start showing why smart kids are smart, and that means showing why dumb kids are dumb, and that's a touchy subject. You can do without showing this part, and that would still work as a film.

I've talked to an intern who claims there's nothing she learned in college that she uses. To be fair, she learned coding in high school, and to be fair, you can never tell how indirect stuff helps you in your everyday job. Just because you don't use physics at a company doesn't mean you didn't use the fact that you learned physics to help out. Solving difficult problems, regardless of its domain, can have indirect impact in solving any other difficult problems.

Anyway, I'm leaving the second half of the documentary until tomorrow (which is today, since I'm blogging at 3 AM). I've stopped at the point where they came to the DC area to show their wares. I remember it was local enough that I could have attended. I had to work then, so I missed it. Anyway, we'll see how that turns out.

No comments: