Wearing the software engineer's hat: Code is the most trivial and the least
important part of a feature.

—Michael Iatrou

Michael tweeted that, I replied, he replied, but what the heck, I think
sometimes things can be better explained in more than 140 characters, thus this
post [1].

So, why the mall and the outhouse? Because when we talk about software and code
and features, we are not all talking about the same thing. Imagine if I told you
that bricks are trivial. After all, they have existed in their current form for
thousands of years, they are pretty simple to manufacture, and have no
interesting features, really, except a certain resistence.

Now, suppose you are building an outhouse. Since you are a funny guy, you want
to build an actual brick outhouse so you will use bricks to do it.

Now, since bricks are so boring, you may feel compelled to believe bricks are
the least important part of your edifice, and that the overall design is more
important. Should you carve a moon-shaped hole in the door? How deep should the
latrine be?

However, that position is fatally flawed, since if you ignore those trivial,
boring bricks, all you have is shit in a hole in the ground. That is because you
are considering the bricks as just a mean to your end. You only care about the
bricks insofar as they help you realize your grand outhouse vision. I am here to
tell you that you are wrong.

The first way in which you are wrong is in that artificial separation between
means and ends. Everyone is familiar with the ethical conundrum about whether
the ends justify the means, but that's garbage. That'swhat you say when you try
to convince yourself that doing things haphazardly is ok, because what you do is
just the means to whatever other thing is the end. Life is not so easily divided
into things that matter and things that don't.

Your work, your creation is not just some ideal isolated end towards which you
travel across a sea of dirty means, trying to keep your silver armour clean.
It's one whole thing. You are creating the means, you are creating your goal,
you are responsible for both, and if you use shoddy bricks, your outhouse should
shame you.

In the same way, if you do crappy code, your feature is demeaned. It may even
work, but you will know it's built out of crap. You will know you will have to
fix and maintain that crap for years to come, or, if you are lucky, ruin your
karma by dumping it on the head of some poor sucker who follows your steps.

I am pretty much a materialist. If you remove the code, you don't have a
feature, or software, you have a concept, maybe an idea, perhaps a design (or
maybe not) but
certainly not software, just like you don't have a brick outhouse without piling
some damn bricks one on top of the other.

I always say, when I see someone calling himself a software engineer, that I am
merely a software carpenter. I know my tools, I care about them, I use them as
well as I can according to my lights [2] and I try to produce as good a piece
of furniture as I can with what I am given.

This tends to produce humble software, but it's software that has one redeeming
feature: it knows what it should do, and does it as well as I can make it. For
example, I wrote rst2pdf. It's a program that
takes some sort of text, and produces PDF files. It does that as well as I could
manage. It does nothing else. It works well or not, but it is what it is, it has
a purpose, a description and a goal, and I have tried to achieve that goal
without embarrasing myself.

My programs are outhouses, made of carefully selected and considered bricks.
They are not fancy, but they are what they are and you know it just by looking
at them. And if you ever need an outhouse, well, an outhouse is what you should
get.

Also, people tend to do weird stuff with them I never expected, but that's just
the luck of the analogy.

But why did I mention malls in the title? Because malls are not outhouses. Malls
are not done with a goal by themselves beyond making money for its builders. The
actual function of a piece of mall is not even known when it's being built. Will
this be a McDonalds, or will it be a comic book store? Who knows!

A mall is built quickly with whatever makes sense moneywise, and it should look
bland and recognisable, to not scare the herd. It's a building made for
pedestrians, but it's intended to confuse them and make the path form A to B as
long and meandering as possible. The premises on which its design is based are
all askew, corrupted and self-contradicting.

They also give builders a chance to make lots of money. Or to lose lots of
money.

Nowadays, we live in an age of mall software. People build startups, get
financing, build crappy software and sometimes they hit it big (Twitter,
Facebook) or, more likely, fade into obscurity leaving behind nothing at all,
except money lost and sad programmers who spent nights coding stuff noone will
ever see or use, and not much else.

Far from me saying startups are not a noble or worthy endeavour. They are! It's
just that people who work on them should realize that they are not building
software. That's why code doesn't look important to them, because they are
actually selling eyeballs to advertisers, or collected personal data from their
users to whoever buys that, or captive public for game developers, or whatever
your business model says (if you have one!).

They are building malls, where the value is not in the building, which is pretty
ghastly and useless by itself, but on the people in it, those who rent space in
the mall, those who will use the mall, the software, the social network,
whatever it is you are building.

Twitter is not software, Facebook is not software. If they were, identi.ca and
diaspora would be bigger! What they are is people in one place, like a mall is
not a real building, but a collection of people under a roof.

So, there is nothing wrong with building malls. Just remember that your ends and
your means are one and a whole, that code is important, that without code
Facebook and Twitter don't work, and that without people they are a badland, and
know what you are doing.

Because the only hard thing in life is knowing what you want to do. The rest is
the easy part. And because malls without toilets suck.