Things ancient Romans taught me about software development


Si vis pacem, para bellum
If you want peace, prepare for war. In other words, if you wish to handle traffic spikes, stress test the service. If it can handle twice the expected traffic, it will handle the expected traffic. A similar point was expressed by Kentus Becchus, who famously wrote Scribe probationes donec timor in taedium mutetur.
Aequam memento rebus in arduis servare mentem
Remember to maintain a calm mind while doing difficult tasks. The natural response to a production outage is panicking. DON’T PANIC. Troubleshooting production issues is just an ordinary task with the highest priority.
Mens sana in corpore sano
A healthy mind in a healthy body. Software development involves a lot of thinking, but it also involves a lot of sitting, which is not a particularly healthy activity. To keep the mind fresh and sharp, sleep and physical activity are paramount, as Vladus Mihalcaeus has put it Somnus octo horarum optimus emendator est.
Divide et impera
Divide and conquer. Apart from being a well-known algorithm design paradigm, it is a sound piece of advice: when faced with a complex task that takes a lot of time, divide it into a set of smaller tasks and handle those one at a time.
Ad praesens ova cras pullis sunt meliora
A bird in the hand is worth two in the bush. First implement the basic functionality, show it to the user, ask for feedback and iterate. The same idea is expressed in the old dictum from the Manifestum which teaches us to prefer working software over a mountain of requirements specifications.
Bene vixit, bene qui latuit
He who remained hidden lived well. Although some malicious hackers may draw inspiration from this one, it is also inspiring to infrastructure engineers: if you break something, it will not go unnoticed.
Discere faciendo
Learn by doing. The mastery of software engineering cannot be attained only by speculative thought, reasoning from first principles, or by learning the sacred texts by heart, to learn how to build software it is necessary, but not sufficient, to build it.
Panem et circenes
Bread and circuses. A great deal of software engineering job is maintenance; it is necessary but not appreciated enough. To silence the murmurs, you need to show some impressive dashboard, shiny UI, or AI-related feature to management from time to time.
Cessante causa, cessante effectus
When the cause ceases, the effect ceases. Unless you know the root cause of an incident, you cannot consider it resolved. Rebooting or scaling may resolve the issue temporarily, but this is just buying time to fix the real problem.
Verba volant, littera scripta manent
Spoken words fly away, written ones remain. Agreements from meetings need to be written down in meeting notes, architectural decisions need to be documented, tasks need to have descriptions, when possible, agreements need to be expressed in code as automated checks. You will forget things!
Periculum in mora
Danger in delay. Integrate code changes to main branch often and deploy often. The more you wait the harder it is to integrate the change and the riskier it is to deploy it.
Historia est magistra vitae
History the teacher of life. As Patruus Bobus points out majority of programmers are not very experienced, however there are those who have been shipping software for decades, and there is much we can learn from them. Study their advice.
Non omnia possumus omnes
We can’t all do everything. It is easier to ship software in a cross-functional team made up of people with different skill sets and roles.
Omnium enim rerum principia parva sunt
The beginnings of all things are small. Big systems evolve from small systems. Create the simplest thing that works well and build on top of that. This was succinctly expressed by Johannes Gallus who wrote Systema complexum quod operatur, ex systemate simplici quod operavit ortum esse inventur.
Pacta sunt servanda
Agreements must be kept. Take care not to break backwards compatibility. Take great care when designing APIs; if it exposes some functionality you did not intend to expose, do not whine when someone starts to use it.
Vinum bonum, pax in domum
Good wine, peace in the house. Since building software is a group activity, it helps if members of the group can get along with each other. Occasional team building activity helps to foster a friendly atmosphere.