Software engineering is a craft. A trade. Much of what we produce as software engineers is really quite simple. A web service might be the equivalent of an end table, or perhaps a bookshelf. Why, then, are so many of our shelves such harrowing endeavors?

The ladder and the shelf

A carpenter on his way to work one morning saw his colleague in the street, also bound for work. Both men carried their usual tools, like hammers, saws, squares, and so forth, but his colleague also bore a long and unwieldy ladder. Surprised to see this, the carpenter asked of his friend, "What is your project today?"

"I am building a shelf," said his colleague.

That was no answer! Taken aback but meaning to be polite, the carpenter merely nodded and said, "And a fine shelf it must be! Good day to you, then."

But before his colleague had walked out of sight, the carpenter began to follow him, taking side paths and back ways so as not to be seen. He had to see for himself what manner of use that ladder could have. To require such a thing, the shelf must have been two stories tall. Three, even! But imagine his disappointment when he found that the shelf was quite ordinary.

For indeed, the shelf was nothing special; five feet high at the most, it was not half finished, but already it tottered crookedly, its sides out of plumb, its wood rough and unfinished. In the end, at least he could say he knew now what the ladder was for...

...because his colleague had been forced to build the entire shelf atop a tentpole, balanced precariously thirty feet above the street.

The moral of the story

Your tools are not your friends. You have a ladder, so you agree to build a shelf atop a tentpole. This is not smart. You have Postman, so you agree to build a service that cannot be tested locally. This is also not smart. Simply because some tool or combination of tools will allow for a thing to be done does not mean that thing should be done.

When I was a young man, my father told me that the difference between a two-wheel and four-wheel drive pickup is that the four-wheel drive model can get more stuck, because it'll go deeper into the muck before stopping. This bit of rustic wisdom could scarcely be more universally applicable: as computers get faster, programs get slower; as cars get safer, drivers get dumber; as programming languages become more powerful, software projects become more impossible. Why do we do this to ourselves?

I don't have an answer for that question, but maybe that isn't important. Maybe the important question is one you should ask when reviewing the requirements for your next project: do I really want to do this?

Chip in and do your part. Educate your colleagues about ladder-oriented programming, and keep your feet firmly on the ground.