The Coding Never Ends, but You Will
There clarity in memento mori, for both your code and your life
(Image: A wander to Kurt’s place)
“Do not act as if you were going to live ten thousand years. Death hangs over you. While you live, while it is in your power, be good.” — Epictetus
“Life moves pretty fast…” — if you just finished that quote on your head, then you’re probably about my age. For those who it does not chime with, check out “Ferris Bueller’s Day Off” and thank me later.
There’s so much in that movie. Movies as a form don’t always have so much message, packed into people having fun in ways that could only be imagined in the 80s. Living in the moment is just one.
Cancer taught me that, hammering home Ferris’s lesson. It taught me the importance of memento mori.
As software developers, it seems we like to imagine eternity. We architect as if this codebase will survive empires, as if this API will never age, as if this platform will be the final word. We cling to the myth of permanence because permanence feels safe. But permanence is a lie.
Every system rots. Every platform ends. Every product is retired, deprecated, left to gather digital dust on GitHub. And every engineer — even the cleverest — shares the same deadline: the one written in our bones.
Memento mori: remember you must die.
This isn’t morbid. It’s clarifying. When you know death is on your shoulder, you stop pretending tomorrow is infinite. You don’t build as if you’ll be around forever to maintain the mess. You cut the cruft. You choose the essential. You design not for eternity, but for today’s clarity and tomorrow’s handover.
Daniel Terhorst-North speaks to this with “The best system is the best system for now.” Not forever, not for the next fifty years, but for now. To design as if permanence were possible is to design badly. To design with change in mind is to design wisely.
And here’s where Barry O’Reilly’s work on Residuality can provide inspiration too. Every design leaves a residue: choices that persist, scars of trade-offs, fragments of architecture. Even after systems die, their residues ripple forward — in dependencies, habits, patterns, and even in the culture of the teams that built them. In survival. We don’t escape our past work; we live with its residues. So the question is not “How do I build forever?” but “What residue will help the system survive?”
Right now, in this moment I am preparing to speak and teach in New York City. For me, the city is a reminder: a skyline of impermanence. Towers rise, towers fall, and yet the streets pulse with life in the present.
To stand today outside Kurt Vonnegut’s townhouse will be to feel the brevity of ambition, the urgency of this moment, the residues of impact that survive. Here in my hotel room, dancing with jet lag at 4:25am, and practicing my guitar intro to my talk on Tuesday for DevOpsCon, these are the thoughts in my moments this morning.
(Image: Early morning, very quiet keynote practice in Brooklyn. Yes, surprisingly to everyone, I do in fact practice!)
Our development work, too, should be like this: grounded, aware of endings, conscious of residues, but alive with presence. After all, it’s a wise cliche to learn that you only ever have the present moment. That’s the gift.
Remember death. Build the best system for now. Architect and design a residue worth living with.
Nothing lasts forever. But nothing vanishes cleanly either. Systems end, yet their residues persist. Awareness of finitude and residue forces prioritisation, clarity, and discipline. In the systems you build and even the life you live.
Practices
Refactor relentlessly; treat duplication as debt with an expiry date.
Write documentation like an epitaph: brief, essential, honest.
Build systems that degrade gracefully, not cling desperately.
Ask: What’s the best design for right now? not What’s the final design?
Consider the residual impact of today’s decision: what will tomorrow inherit?
Architect and design, make your decisions, with stress on the system in mind.
Celebrate small, shippable increments — they may be your last (but hopefully not!)
Lead with love — frame everything in terms of the residues you want to survive, and be open and happy to see the surprising ones that do.
Things to avoid
Over-engineering in pursuit of an imagined “eternal” design.
Procrastination in the the false belief of perfection.
Postponing cleanup “for later” that never comes.
A Checklist
Is this code survivable without me?
Does it express its purpose clearly to a stranger?
Would I be proud if this commit were my last?
Is this the best system for now, or am I fantasising about forever?
You won’t live forever. Neither will your work. Live in this moment — this sprint, this line of code, this talk in New York (for me) — you are alive. And if you act with presence, care and, yes, even love, the residues you leave may outlast you just enough to matter.
The best system is the one that solves today’s problems elegantly, not the one that chases an imagined eternity. That’s your system too. Be kind to yourself and you will have the energy to be kind to others, the energy to seize your moments and lay down residues that will be enough for your one wild and precious life?
Tell me, what is it you plan to do with your one wild and precious life?
— “The Summer Day,” by Mary Oliver
Further Reading
Mary Oliver, The Summer Day
Marcus Aurelius, Meditations (on time, impermanence, duty)
Richard P. Gabriel, Patterns of Software (on software decay and abstraction)
Ward Cunningham on Technical Debt, via Martin Fowler’s Blog
Dan North, Best Simple System for Now
Barry O’Reilly, Residues
If you enjoyed this entry in the Software Engineering Enchiridion, you might also enjoy:





