Hasten Slowly in Software Development
Legend has it that the Roman Emperor Augustus Caesar held a particular fondness for the maxim Festina Lente, loosely translated as Make Haste Slowly or More Haste, Less Speed. This seemingly paradoxical phrase harbours deep wisdom, encapsulating the art of balancing swift action with thoughtful deliberation. Its essence lies in the understanding that the most expedient path to a goal is not through hurried, reckless efforts, but through measured, considered progress that avoids the pitfalls of undue haste.
He thought nothing less becoming in a well-trained leader than haste and rashness, and, accordingly, favourite sayings of his were: “Hasten slowly”; “Better a safe commander than a bold”; and “That which has been done well has been done quickly enough. 1
In software development, this wisdom holds particular significance. Programmers, especially those new or coming from fast-paced environments, often feel pressured to deliver solutions rapidly. However, often taking the time to plan and consider the implications of a solution can prove to be a more efficient, time-saving approach. This principle is not about working slowly; it’s about discerning when to pick up the pace and when to proceed with caution.
Tech giants like Facebook once popularized the mantra ‘Move Fast and Break Things’ a phrase that became emblematic of Silicon Valley’s culture of swift development and disruption. However, recognizing the limitations and potential downsides of this approach, Facebook shifted its stance in 2014 2. Mark Zuckerberg announced a new motto: ‘Move Fast with Stable Infrastructure’. This change, although less catchy, underscores the importance of maintaining a robust and reliable foundation while continuing to innovate quickly. It reflects a broader understanding within the tech industry that speed should not undermine the system integrity and reliability of technology.
When solutions are hastened and Pull Requests are prematurely submitted, typically one of two scenarios unfolds. In teams that adhere to strict standards, such hasty submissions lead to prolonged discussions, multiple revisions, and extensive feedback on the Pull Request. This scenario often ends up consuming more time and resources than would have been required if the solution were thoughtfully planned from the beginning. On the other hand, in more lenient environments, fast-tracked code might temporarily satisfy immediate requirements, but it risks undermining long-term stability and functionality. This mindset, rooted in the belief that ‘faster is always better,’ can lead to a host of problems, including bugs, security vulnerabilities, and issues with scalability. These flaws not only degrade the quality of the software but also often necessitate future refactoring, contributing to the accumulation of technical debt, a cost that could have been avoided with a more considered approach initially.
The key lesson is not to work slowly but to know when to pace oneself. Early development stages require careful planning, while later stages might demand a faster pace. Regular assessments ensure that quality is not sacrificed for speed. The balance between speed and accuracy depends on the project and organization. Mission-critical applications demand meticulousness, while startups might prioritize agility. Adapting to project needs is essential. As Augustus Caesar discerned, the true mark of a skilled military commander developer lies not in their ability to hasten through tasks but in their capacity to judiciously balance speed with careful consideration.
-
Suetonius Tranquillus, translated by Alexander Thomson, The Lives of the Twelve Caesars ↩︎
-
Mark Zuckerberg Explains Why Facebook Doesn’t ‘Move Fast And Break Things’ Anymore ↩︎