2006-10-08: Smallness, responsiveness, feedback; Company Size; Code SizeSmallness, responsiveness, feedback
One thing I've discovered about myself over the years is that I prefer driving small, responsive cars with clear feedback over big, fancy cars that try to isolate you from the real world.
I like small cars because they fit in places where big cars won't. I try not to have a lot of luggage, so that doesn't bother me. But going where other people can't go is valuable in itself: supply and demand. Okay, yes, people with Land Rovers can also go places where my Pontiac Pursuit with Pulsating Performance can't, but statistically speaking, more people want to pay me to park downtown than to go driving through swamps. You know. Statistically speaking.
I like responsive cars because I'm short-term indecisive and my sense of direction is complete crap. I'm always impressed by people who actually know where they're going and how to get there, but I'm not one of them. So sometimes I need to change my mind and turn a corner I wasn't planning to turn. And sometimes I need to make a U-turn. And sometimes I need to stop or start quickly because the person in front of me or behind me was even less decisive than I am. Responsiveness is good when you need to deal with surprises, and perhaps out of necessity, my specialty is dealing with surprises.
Feedback is a more interesting question that a lot of people don't even think about: in fact, they almost think of feedback as a negative. The most expensive cars are the ones that make you feel like the outside world doesn't impact your driving. That is, they're soundproofed so you can't hear outside; the steering wheel never resists your turning; they have cruise control so you set-and-forget the speed; they have anti-lock brakes and fancy auto-traction control to prevent skidding when you stop or turn. The idea here is that you should be able to concentrate on setting the speed and course - the strategy - while the "system" handles the rest of the details for you.
Well, I don't trust the system. Maybe it's because I'm an programmer and I know better than to trust programs, or maybe I'm just paranoid. But luxury cars like that drive me crazy. When I drive one downtown, I often open the window a crack, defeating the expensive sound isolation, so I can hear the street noise, like someone yelling or tires screeching. I like steering feedback, because they let you feel whether you're turning too fast, mostly eliminating the need for traction control on turns, and anti-lock brakes actually make braking distance worse on dirt roads. There's no substitute for just driving carefully, and isolating yourself from the real world discourages that. If all you have to do is set the speed and course, what's to stop you from setting a just slightly faster speed and a just slightly bumpier course?
In a company, the equivalent is the executive who isolates himself in the corner office and reads reports all day rather than visiting the front lines. I can't stand to do that - and if you're an executive, it's not even your fault, people try to set you up that way. People will see it as their job to make problems go away between the front lines and you; after all, if they can't deal with these little problems, why did you hire them in the first place?
That's absolutely true, of course. But it's also true that if you as an executive never see the problems, you'll set stupid strategies that arbitrarily increase the problems for no reason. You'll take the bumpy dirt road instead of the superhighway, but you'll try to drive 120 km/h anyway, because what's the difference? The bumpy road is a more direct route than the superhighway, and the speed is just a dial that always seems to work fine, and it all looks the same from in here.
Okay, so how does this relate to my preferred company style, then? Well, I prefer small and responsive companies and teams to big and stable ones. Small companies can afford to do projects that big companies can't justify. And the way you run your company - my way is controlled instability - can make your company more responsive than others, so when you make the inevitable mistakes, you can recover.
I'm interested in ways of making stable companies more responsive without making them unstable. I'm not sure you can easily make big companies small, but it's easy to start a new small company anyway. As for isolation vs. feedback, well, just try to isolate yourself from a customer when your whole team is only five people. It forces you to do a great job, or you'll die of exhaustion.
And while we're here, I can tie all this directly back to programming, as usual: small, concise code vs. big, unwieldy code has exactly the same characteristics as cars and companies.
Big, ultrastable, isolationist companies, like typical big banks, program in Java and use UML and huge specs and "Software Engineering" and five-year plans and code monkeys. I'm not a fan of that whole development style, but I'll tell you one thing for sure: it works just fine for them. Check out one or two of their balance sheets and tell me I'm wrong.
But big code is hard to change, so you have to plan it in advance. The isolationist executives at giant, stable companies get very good at this, and the stability of such a company is totally compatible with this, which is why it works. But in a small, responsive company, you need small, responsive code. And sufficiently smart people can do the same code in a smaller, faster, more responsive way, allowing them - and thus, the program itself - to respond more quickly to feedback.
That's my kind of team, my kind of company, and my kind of code. I got the car. Now I'll have to work on the rest :)