A Stoic Look at Software Development
There is a high chance that you’ve heard of Stoicism, especially if you are a software developer. It seems to have permeated the industry a bit.1 I thought I’d pull some gems from my Stoic readings and apply them to the various areas of software development for this column. The philosophy fits our industry so well you might think Marcus Aurelius was a COBOL2 developer on the side.
For the uninitiated, Stoicism is a philosophy rooted in 3rd century Athens, Greece, with a gentleman named Zeno of Citium. Zeno found the inspiration for his philosophy at an Athens bookseller after surviving a shipwreck. Had the ship not wrecked, Zeno would not have gone to Athens and met his teacher, Crates of Thebes, walking by the bookshop.
In other words, it was a fateful set of events that led to the creation of Stoicism, an irony that is not lost on its readers.The focus of the philosophy is simple:
- You aren’t going to be here very long (meaning, you will die).
- You are not in control of external events (meaning, you are only in control of your mind).
- Challenges are the key to success (meaning, The Obstacle is the Way).3
Most of what you read or hear about Stoicism stems from one of the above three tenets. There are even cool Latin sayings, like Memento Mori (“Remember, you will die”) and Amor Fati (“Love Your Fate”) that people spout or carry printed on medallions4.
The big dogs of Stoicism are Marcus Aurelius, Epictetus, and Seneca, whose stories are all very different. Marcus was an emperor of Rome that cared deeply about compassion, which is pretty non-Emperor-esque. Epictetus was a slave that ended up a teacher in Rome with some impressive students. Seneca was an advisor to another emperor, Nero, who (in a much more Emperor-y act) demanded Seneca’s suicide.
I discovered Stoicism in an interview5 with David Heinemeier Hansson (DHH), the creator of Ruby on Rails. The simplicity of the philosophy resonated with me then and still does today. I try to read one passage a day6 to keep it fresh in my mind.
“Our rational nature moves freely forward in its impressions when it: 1) accepts nothing false or uncertain; 2) directs its impulses only to acts for the common good; 3) limits its desires and aversions only to what’s in its own power; 4) embraces everything nature assigns it.” – Marcus Aurelius, Meditations, 8.7
This quote is a doozy and covers just about all the different aspects of Stoicism’s relevance to software development.
- Start where you are. Lack of a signal is a signal. Before you change something, measure it.
- Do not do evil. Do not cut corners. Write tests. Collaborate and mentor.
- Focus on what you can control. This does not include some random person’s thoughts on CoffeeScript or the fact that the us-east-1 region has gone down.
- Take things as they come and adapt. That is what Agile software development is all about.
Agile Software Development
“We don’t abandon our pursuits because we despair of ever perfecting them.” – Epictetus, Discourses
Software is never done. There is always technical debt. There are always things that are not perfect. Being an agile team means working to make small, incremental changes over time. Don’t let perfect be the enemy of good.
“Do now what nature demands of you. Get right to it if that’s in your power. Don’t look around to see if people will know about it. Don’t await the perfection of Plato’s Republic, but be satisfied with even the smallest step forward and regard the outcome as a small thing.” – Marcus Aurelius, Meditations
Another bit of wisdom about making small, positive improvements. Also, I like to interpret this quote to mean “start where you are”, which is a tenet of Kanban and (in this author’s opinion) the best way to get on the path to Agile Transformation, if you’re into that kind of thing.
“At every moment keep a sturdy mind on the task at hand, as a Roman and human being, doing it with strict and simple dignity, affection, freedom, and justice—giving yourself a break from all other considerations. You can do this if you approach each task as if it is your last, giving up every distraction, emotional subversion of reason, and all drama, vanity, and complaint over your fair share. – Marcus Aurelius, Meditations
Keep it simple. The temptation to consider another dependency or a clever (but impenetrable) bit of code is high for us nerds. But, simplicity is always the right play. Your future self and other developers will thank you.
“You must stop blaming God, and not blame any person. You must completely control your desire and shift your avoidance to what lies within your reasoned choice. You must no longer feel anger, resentment, envy, or regret.” – Epictetus, Discourses
I have seen so many teams and organizations where developers and operations live in constant fear of deployment due to the possibility of something breaking. They know when that outage comes, someone’s head will roll and they just don’t want it to be theirs. This is unhealthy.
Create a team where failure is expected and, dare I say, encouraged as a learning tool. When the outages come (and they will) presume everyone was doing their best with the knowledge and tools they had at the time. Then, find the root cause and brainstorm a way to prevent it next time, without blaming someone this time. Make deployment easy and it will become safer over time.
“How disgraceful is the lawyer whose dying breath passes while at court, at an advanced age, pleading for unknown litigants and still seeking the approval of ignorant spectators.” – Seneca, On the Brevity of Life
Your job is not the most important thing in your life7. Get away from work and be with those you love. Experience life.
“Heraclitus called self-deception an awful disease and eyesight a lying sense.” – Diogenes Laertius, Lives of the Eminent Philosophers
Measure things before you change them. How often do you or your team casually say something needs improving and then charge off to make that improvement without quantifying it at all?
“The app is slow, let’s cache something.”
“Our velocity is slow, let’s add developers.”
After you make the change, you probably justify it by saying, “There, it’s improved.” But how do you know it’s better? How do you know it was even a problem in the first place? I’ll tell you how: Measure the thing you want to change. Then change the thing. Then measure the thing again. Compare measurements. Now you know.
“Don’t be ashamed of needing help. You have a duty to fulfill just like a soldier on the wall of battle. So what if you are injured and can’t climb up without another soldier’s help?” – Marcus Aurelius, Meditations
Ask for help when you need it, and do so without shame. Imposter’s Syndrome is a monster in our industry, but it is a paper monster. We all need help, no matter how long we’ve been writing code. There is an excellent chance that I have been programming longer than you have been an adult. I still have to look up things like connection strings, Rails migration syntax8, and how to set up a React app. Every time. The goal is to build great software and it takes a team.
Indeed, no one can thwart the purposes of your mind—for they can’t be touched by fire, steel, tyranny, slander, or anything.”
“While it’s true that someone can impede our actions, they can’t impede our intentions and our attitudes, which have the power of being conditional and adaptable. For the mind adapts and converts any obstacle to its action into a means of achieving it. That which is an impediment to action is turned to advance action. The obstacle on the path becomes the way.” – Marcus Aurelius, Meditations
Stay adaptable and positive. There will be Big, Dumb Corporate Processes and terrible software choices in your way, but you control what you do today. Raise those blockers and find a way around them. Your ingenuity will help others. Your attitude will help others. You will grow. The obstacle is the way.
The most difficult bit about writing this post was stopping. There is a seemingly endless set of Stoic quotations that can be applied to software development. Maybe Iâll use this obstacle as a way to write another book. Regardless, I hope you’re inspired in some small way to use philosophy to make your work in our industry more satisfying.
- I’ve actually heard of the term “Stoic Development” as the melding of these two things. ↩︎
- I think COBOL was created by the Romans, but I may be wrong about that. ↩︎
- This is the title of one of the seminal books on Stoicism by Ryan Holiday, who is a leading Stoic. ↩︎
- These people are not invited to many parties. 😉 ↩︎
- It may have been this one. ↩︎
- There is a great book for this called The Daily Stoic by (guess who?) Ryan Holiday. ↩︎
- It’s not. ↩︎
- And I wrote a book on Rails development. Really. ↩︎