Think of simplicity as of a budget. Whenever an engineer decides to work on some aspect of the software they own, they effectively decide to spend some of that budget.
Unlike well-known error budgets, simplicity budgets do not get reset over time. While it is possible to increase the remaining budget by regaining some simplicity, one will have to pay “a tax” as moving from simple to complex is much easier than moving in the opposite direction.
Simple is better than complex.
Complex is better than complicated.
– Tim Peters, The Zen of Python
An exhaustion of simplicity budget indicates that the system has become unmaintainable. Not only does it mean that any future changes to the system are likely to cause a decline in its essential metrics, but it also dramatically reduces the team velocity.
As engineers, we may often find ourselves drowning in complexity. Let’s try to reflect on how we ended up there. One of the aspects that might catch our attention could be for instance how ridiculously paranoid a codebase is when it comes to failures. It practically screams, “No, you are not allowed to fail!”, and yet the engineers have been complaining about how unreliable our tools are.
That is our “Aha!” moment. We’ve been trying so hard to make our tools safe that we’ve simply exhausted our simplicity budget. Apparently, we also fell victim to a post hoc fallacy of expecting the reliability of the system to improve as a result of improving its safety.
Think of a Swiss Army pocket knife. It takes just a few minutes to cut our finger while simply exploring its features. Was that knife safe? Not at all. Was it reliable? Yes, indeed it was. Simply put, safety and reliability are independent concepts.
Simplicity is prerequisite for reliability.
– Edsger W. Dijkstra
In the long run, it is the exhaustion of simplicity budget that has a dramatic impact on reliability of our systems, not a lack of safety.
Why have some platform core Utilities hardly change over the course of their existence? Maintainers are extremely cautious about spending their simplicity budgets and tried very hard to find an optimal balance.
2. Using Artificial Intelligence to detect COVID-19
3. Real vs Fake Tweet Detection using a BERT Transformer Model in few lines of code
4. Machine Learning System Design
Consider a platform: it is foolproof enough to prevent you from purging the root of your filesystem, but it will allow you to delete pretty much everything else you can access without turning a hair.
So, what is to be done? First of all, embrace simplicity.
Manifest plainness. Embrace simplicity. Put others first. Desire little.
– Lao Tzu, Tao Te Ching
Remember that simplicity decreases over time, and regaining it is a slow and painful process. When working on software, spend the simplicity budget wisely.
Second, do not be afraid to favor simplicity over other aspects of the software. While it feels natural to automate things at a platform scale, always ask yourself if, say, another safety feature is worth spending the simplicity budget on. After all, it’s through failure that we learn the greatest lessons that life or job could teach us.
Last but not least, make sure all the stakeholders are on the same page when it comes to the previous items and decision making. Different problems naturally imply different trade-offs, and those should be agreed upon in advance.