The Four-Sided Civil War
June 2007
There's a fascinating civil war going on in the world of software development, which chiefly
consists of four factions. More amazingly, only two of these groups really have any idea
that there's a battle raging, and the largest group of all doesn't even know it exists! It is
this weird division that is crippling our ability as professionals to engage in a dialogue.
Those with the credibility and expertise to get wound up and have a grand debate are
a nearly invisible minority when compared with the vast remainder who don't know/don't care.
That latter portion, is, ironically, the very cause of the problem.
The Coding Majority
In my estimation, practically everyone writing software today is part of the Coding Majority. These
are people often without formal training and generally without much experience, who collectively churn out
millions of lines of code per day in a desperate attempt to make the darned thing work. In itself
such commitment is laudible, but in practice, working faster does not mean working smarter.
It's not too hard to spot a member of the Majority through evidence alone. Critical design decisions
are made deep inside algorithims, code is cut-and-pasted and duplicated needlessly
throughout, unreachable branches are produced, and testing becomes cursory. You know their work by
the horrible software systems you use every day, in cellphones, on websites, and while stuck in
touch-tone hell. These hardworking folks just don't have any idea how much damage they are doing, and
that someone is working furiously on a solution to their problem. The wild west needed these cowboys,
but the world has changed. Software is too essential to be an untamed frontier.
What is the Cost of Change?
Making changes in most projects in the world is cheap and easy at the beginning and expensive or
catastrophic at the end (consider the Vasa). If your office
tower grand opening is next week, now is not the time to suggest the lobby ceiling isn't tall enough.
But with software, change just doesn't feel as expensive. It takes hours to repaint a car
but switching your website's background color takes a second. Doesn't this make software different?
Those who believe the cost of change rises dramatically the deeper you get into the project form
the next biggest faction: the Big Design Up Front Coalition. There's a range of just how many details
you need to work out before you start writing code, but basically this group is unified in their
belief that you have to know what
you're going to do before you do it.
Alternately, a more rebelous gang of software folks have developed a radically distinct philosophy.
These are the proponents of the Agile Manifesto, who claim
that the cost of change is constant, that the software is the specification, that the customer must
be in the room, and that people are more important than process. They also like to stand up for meetings
to keep them short.
These two groups of people can't stand each other.
The Popular Tools Stink
The final cadre is the publicity darling of our community; those who passionately decry the
overall cruddiness of common software development tools. Joel explains that it's
manual
memory management which kills our productivity (though you'd better not just learn Java and Joel is in the Big Design Camp, even though he
teases the "nattering scorekeepers". Go Joel.) Paul says the
right language was invented 40 years ago,
and it made him rich, so there. Mr. Why and his cartoon foxes
we need to use wildly different, poignant languages like Ruby.
The Hungarian believes
he has
a whole new paradigm. This group acknowledges that people are having a debate about how you
should write software, but shake their heads. "You're trying to hammer nails with a wet noodle!",
they deride. If only we would listen.
Choose Sides or Straddle Fences
You can cast your lot with any of these groups, except for the Coding Majority. Typeity-typing
lines of code all day makes you into a frustrating expense for the budget manager, who doesn't
really know what you do and will outsource your job just as soon as the next issue of
Forbes arrives. So choose sides, and take up arms! One day, we'll know how to write software,
and you can help figure it out.