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.

Company Size

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.

Code Size

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 :)