Building Software is Sisyphean Work
Lessons from Albert Camus on why software is never done and how to make peace with that
Growing up, I could never close the book in the middle of a chapter. I'd turn the pages to see how long it was, so I knew if I had enough time to finish it. I've always been the see-it-through type.
Things just need to have a proper end.
In the rare cases where I had to leave something half-done, it would eat me up on the inside.
Maybe I had to do some chores, or I had to go out of the house unexpectedly, but I'd think about this thing I've left unfinished. I'd rush home the first chance I got and pick up the book or the video game controller so I could get to the end.
The Completionist Programmer
In my early days as an engineer, I, unfortunately, adopted this mental model in my work.
I couldn't end the day with an unfinished feature or an unresolved bug. I couldn't sleep, I couldn't think, I couldn't concentrate on anything else. I'd go out with my wife, and the whole time I'd think about why I couldn't get the build to work.
This one time, I left my computer in the office on Friday so I wasn’t tempted to work over the weekend. But a couple of failing tests kept bothering me so much that I went back on Saturday morning to fix them.
I'd crunch on my own volition so I could get the sense of completion of pushing a release. I'd get anxious if I hit a problem in the afternoon because that meant I couldn't get up from the desk until 10 PM.
Just like Sisyphus in the ancient Greek myths, I just wanted to get my work done.
But like him, I found myself at the bottom of the hill each day.
There’s No End in Sight
That bug you thought you fixed? There was an edge case that you caught the next morning. That build pipeline you worked so hard on? There was a security vulnerability. That feature you wrote? The client changed their mind.
Any sense of completion you get is ephemeral.
I felt this the strongest when it comes to software design.
You strain your mind to create a good abstraction and make an extensible API, but when the company pivots in a different direction, your work is not just obsolete. It becomes a burden.
You can’t fit the new functionality into the existing abstraction in a reasonable way, so you’ve got two choices in front of you - make a conditional mess or refactor every place where you’ve used it.
Regardless of which one you choose, you end up at the bottom of the hill with the rock.
The Absurdity of Building Software
The French philosopher Albert Camus wrote a book called “The Myth of Sisyphus“ in which he explores our longing for order, resolution, and meaning. We have a natural tendency to seek structure in a world that offers none.
"The absurd is born of this confrontation between the human need and the unreasonable silence of the world."
In Camus's philosophy, he uses Sisyphus to represent the eternal struggles of human life. Even when we achieve something, the satisfaction fades quickly. But Camus says that while there's no meaning in the reward, we are free to embrace the struggle itself.
"The struggle itself toward the heights is enough to fill a man's heart. One must imagine Sisyphus happy."
I find that same absurdity in software development, and the only cure is finding meaning in the craft itself. There needs to be joy in the process of debugging, in constantly solving problems and puzzles.
Because if you wait for the end, you'll live in constant torment.
Maintenance and Building
You could argue that all human work is like this. In a world constantly headed to entropy, things rot, materials erode. Leave a garden unmaintained, and weeds will take it over in a single summer.
There's an upkeep cost to be paid for every creation.
But there's a difference between maintenance and constant Sisyphean work. My house in the countryside was built 30 years ago, and while there's always something to mend, the house itself is the same.
We haven't built a new floor, and we haven't changed the structure of the rooms.
I can't say the same thing about any software I've worked on in the past decade. It has always changed, grown, evolved - often in ways that leave its initial implementation unrecognizable.
Other Crafts Have an End
All craftsmen are caught in the endless loop of improving their skills, but their work isn’t endless.
A chef gives the dish they’ve prepared to the waiter. A sculptor chips that last piece of rock off the statue so it can be displayed. Even writers, with whom we are very much alike, abandon their books so they can get published.
There’s a finish line.
We don't get that luxury.
A startup I worked at pivoted three times, which drowned us in constant refactoring. A few years later, I spent two years building a platform for a corporation, only for its new CTO to tell us that our next task was to decommission it.
That's why I don't like the culture of extreme performance.
You can crunch to finish a project, but in our industry, this rarely happens. After the two-week sprint, there’s another one. You’ll never feel the sense of completion, only the burnout.
Building Software is Sisyphean Work
I've got Sisyphus pinned on my wall to remind me to find happiness in the day-to-day.
In Albert Camus's "The Plague", a writer spends the whole book reworking the first sentence of their novel. Sometimes I feel caught in that same trap of endless rewrites.
You need to enjoy the actual process of building software, the process of solving bugs, and changing your design again and again.
There are people for whom the act of building software was secondary to the act of putting a ticket in the "done" column in JIRA.
I was one of these people.
Happy to say that I no longer am.
One must imagine Sisyphus developing software.



