Today, while discussing
how @hipsterhacker
reminds us some of our friends,
Nat pointed me
to this
interview where Maciej has this beautiful nugget of
wisdom:

Q: The Pinboard about page says: "There is absolutely
nothing interesting about the Pinboard architecture or
implementation; I consider that a feature!"

Can you explain why you think that's a feature?

I believe that relying on very basic and well-understood
technologies at the architectural level forces you to save all
your cleverness and new ideas for the actual app, where it can
make a difference to users.

I think many developers (myself included) are easily
seduced by new technology and are willing to burn a lot of
time rigging it together just for the joy of tinkering. So
nowadays we see a lot of fairly uninteresting web apps with
very technically sweet implementations.

Too many people over-engineer their software to the point
that you can no longer see what the software was supposed to
do. Once people find a religion in one of the modern
development fads, they tend to jump with both feet, and we end
up with uninspiring user-facing software, but internally
amazing.

This disease is widespread. From everyone trying to turn
their program into a platform (current fad: dependency
injection), to trying to force programming models, to
compulsively writing unit tests while ignoring the basic
principles that unit tests can not be used to prove the
absence of bugs (update: this is
my favorite
book on the subject; Namedrop
alert: Bertrand Meyer
introduced me to it).

There is only one reason to throw away your life writing
useless code and that is to train yourself. If you are
writing this in a Karate Kid wax-on, wax-off kind of way, go
ahead.

But if you are building a product, you end up spending all
of your time designing your architecture, and very little time
in delivering a great experience.

Premature architecture design is like premature
optimization: you will be wrong about the things that actually
mattered.

Take the shortcut. Build the product. And if later, it
turns out you made a design mistake, refactor the code. But
at least you will have a product that your users love.