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.