In the fast-paced world of technology there is the worrying trend to
regard everything old as being somehow bad. Old is being equated with
obsolete, modern is considered unambiguously positive, and
phenomenons like “code rot” are well-known. The degree to which this
attitude prevails depends somewhat on the niche and is probably also
amplified in online discourse compared to real-world practice. And it’s
completely understandable that a community of technologists that obsesses
over innovation and is generally interested in learning and creating
new things, would be strongly biased against the old in favor of the
new.
But I would argue that when unquestioned, this mindset is not conducive
to actual progress. Or to put it more drastically and overexaggerate a
little bit to make clear what I mean: All software should strive to,
at some point in time, be just done. And that is all software
individually and all of software as a field. This is not a realistic
expectation but it should be the aspirational assumption for everyone
creating software—it is for me.
It’s unlikely that someday we just look around us and conclude that we
have built all the software that ever needed to be built and all of that
software is finished and we can all retire. But that really happening
or not is not the point. One reason why it won’t happen and why new
software or changes to existing software will always
be necessary is that the world changes; software is not a closed
universe but intertwined with the real world in a lot of very important
ways. New real-world use cases will need to be accounted for and new
computing- and periphery hardware will need to be supported. But
I would consider those external drivers of change. They can’t be
entirely avoided even if we tried. I am more concerned with the
internal forces in the software community that demand change for
change’s sake.
That last motif gets me to the heart of what it is that I feel so
strongly about: Change. By positioning myself as skeptic of change
does that make me anti-progress?! It does not. The opposite is true.
But what is progress?
A looser definition of progress could understand it to mean anything
that… well progresses. Like time. It doesn’t necessarily have a goal
or a purpose but it is just chugging along. And even in this less
useful sense I would argue that the progression of time is (for all we
know) decidedly going in one direction – it doesn’t loop back around.
And if the universe and thus time itself is finite, then it will
eventually reach its end. I think of progress as something that is
defined by the existence of that end. And even if what is progressing
does so nonteleologically, I will still speak of the end as a goal.
The goal is what we are progressing toward. Progress without a goal
is just movement.
Bringing that back to the topic of technology or software specifically,
the concept of progress only makes sense if we assume some theoretical
goal towards which we are progressing. This does not require us
defining or agreeing on what that goal actually is. Scientific fields
like Maths, Biology, Physics, all progress by furthering our
understanding of the real world. You could think of sciences as
accumulating knowledge, but I think that is not true: In practice, the
working set of knowledge in a field is not monotonically increasing in
size, because some of it does occasionally get deprecated. Old
theories, disproven by new evidence. This pruning of the tree of
knowledge only occurs when there is better information available – the
desire of researchers
is to construct ever more precise models of the world and approximate
“the truth”. Writing software is not a science, but I think many of us
in this field are sympathetic to the mindset of ever improving and
advancing the status quo. (Maybe I am blurring the lines of scientific
and technological progress too much here, but I see them as mostly
identical in spirit, if not in method). Similar to how scientific
progress tries to
approximate some ideal goal of understanding the universe and everything
in it, technological progress is about advancing into a future in which
all problems a technology can solve, are solved.
Without a sense of actually progressing toward anything, change
becomes meaningless. If things constantly change just for change’s
sake that is called fashion. I don’t care much for fashion.
Technology should not be treated as such, partly for the fact that
it wouldn’t justify the amount of work that our community
invest into it.
The comparison to fashion seems really fitting (no pun intended)
whenever a new technology trend consists of old ideas in new clothing
(this time pun intended). There seems to be something like a cyclical
rediscovery of old stuff that was once declared obsolete but then turns
out to be actually kind of valuable. Creating new technologies and
trends is fine, mothballing others is fine, but let us always evaluate
technology based on its merits! Newer is not always better, older is
not always worse. The reason why I talk about progress in such an
abstract fashion is that I think this relates very closely to
this last point. When you assume that things will always change and
nothing will ever be done, then you don’t mind change for change’s sake
because you have embraced it as an underlying principle: Change is no
longer the means, it’s the end.
What’s so bad about technology as fashion and the absence of progress
though?! First of all, when you can never be done with something, your
productivity, as a ratio of the work you did compared to the work there
is, is zero. That seems to me as a rather depressing thought.
Knowing that everything our craft entails, the things we build, the
knowledge we gather, the practices we develop, that all of that will
become obsolete not because it was bad but just for the sake of
change… that is mightily demotivating. If it all gets thrown away
eventually, what’s the point? The act of doing these things can still
be pleasant by virtue of being intellectually challenging, but once you
realize that it serves no purpose that immediate pleasure can quickly be
sidelined by existential dread. You could argue that other industries
or activities are similarly non-permanent in their impact: If you cook
food then once it’s eaten… well it’s gone. But that is kind of in the
nature of the problem and it is also not the only way to think about it.
When I cook, I don’t really think about it as fulfilling some temporary
need that gets reset and the next day I have to do it all over again.
Instead I imagine that every time I cook, I become one teeny-tiny bit
better at it. (Well, and it can be fun, but again: Fun is temporary,
while purpose is something… more). Maybe that is another relevant
term here: Permanence. When I cook a meal, the food itself is
temporary, but my ever so miniscule skill-increase is permanent (or at
least that’s how I think about it). It is not permanent in the world,
because it goes with me, when I die, but in case of cooking skill,
that’s good enough for me.
This could be a delusion: The world doesn’t work like that and it
doesn’t care about my desire for purpose or permanence. That may very
well be, but is that relevant? We better give it some purpose then!
Isn’t that the difference between living and surviving? Or put somewhat
differently: It doesn’t so much matter what reality is, but rather
how we choose to structure our mental image of it.
Okay, we have now reached a point where we are pretty far into
philosophical territory. But I do think that these questions are
related: If you think about life, the universe and everything, as a
treadmill, i.e. meaningless exercise without real progress, an endless
grind, you can deduce that the realm of software and technology is
certainly no different. But if, like me, you consider that
outlook too depressing and rather coerce the world into having some sort
of meaning then maybe we should assume that technology is not fashion
and we can actually and manifestly get shit done.