- Published on
Building Sustainable Software in a Changing Landscape
- Authors
- Name
- Petros Savvakis
- @PetrosSavvakis
TL;DR
Building sustainable software requires strategic decision-making to balance immediate needs with long-term maintainability. By understanding trade-offs, managing scaling costs, and applying principles like Hyrumâs Law, developers and leaders can create resilient systemsâeven in dynamic environments such as startups or early proof-of-concept features and products.
"Nothing is built on stone; all is built on sand, but we must build as if the sand were stone."
â Jorge Luis Borges
In the ever-evolving world of software engineering, sustainability and the management of scaling costs are paramount. Whether you're leading a development team or steering a startup, making informed, strategic decisions can significantly impact your organization, product, and development processes.
Sustainability and Strategic Trade-offs
As software engineers and leaders, our primary goal(hope) is to create systems that are not only functional but also sustainable in the long run. This involves carefully evaluating trade-offs and making rational decisions about where to invest our efforts. Sometimes, this means postponing maintenance tasks or adopting temporary solutions with the understanding that these choices will need to be revisited in the future. Clear and explicit communication about these deferred costs is crucial to ensure that all stakeholders are aware of the implications.
The Reality of Short-lived Code
In many industries, especially in early-stage startups, code often has a short lifespan. Frequent rewrites and a focus on immediate goals are common as companies strive to adapt quickly to market demands. Developers in these environments may have extensive experience in rapid development but limited exposure to maintaining long-term projects. This dynamic can lead to challenges in sustaining software quality and infrastructure over time and create a huge technical debt.
Insights from Hyrumâs Law
A key principle to consider is Hyrumâs Law: âWith a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.â This highlights the importance of maintainability over merely having a system that "works." When maintaining projects used by other engineers, it's essential to design APIs and systems that minimize unintended dependencies and ensure long-term usability(or atleast try as hard as possible).
Building as if the Sand Were Stone
To achieve sustainability, it's important to balance flexibility with stability. Adopting best practices such as modular design, thorough documentation, and regular code reviews can help create robust systems capable of adapting to change without accumulating excessive technical debt. Additionally, anticipating future needs and scaling challenges during the initial development phases can set the foundation for resilient software architecture.
How to calculate the Uncertainty of a Project
Building sustainable software is a balancing act between immediate needs and long-term viability. From startups to corporate projects, time pressures often lead to quick fixes, yet ignoring maintainability can create hefty technical debt. Hyrumâs Law reminds us that all observable behaviors eventually become dependencies, underscoring the need for proactive and clear engineering decisions from the outset.
In dynamic environments, especially when codebases may be short-lived or rapidly changing, itâs crucial to measure your projectâs uncertainty before committing to deadlines. Assessing and reducing unknownsâwhether they relate to customer value, usability, feasibility, or business viabilityâcan determine whether you should start coding right away or conduct discovery first. By thinking of âsandâ as if it were âstone,â you can avoid costly rewrites later. For a more comprehensive look at the trade-offs, uncertainty rubric, and techniques like assumption mapping, refer to the full article.
Conclusion
Building sustainable software requires:
-Proactive management of technical trade-offs
-Awareness of short-lived code realities (common in startup pivots)
-Designing with maintainability in mind (Hyrumâs Law)
-Planning as if the âsandâ is âstoneâ (robust architecture despite changes)
-Measuring and reducing uncertainty before fully committing to timelines or large builds
By combining strong engineering practices with a simple framework for gauging uncertainty, youâll be better equipped to navigate the balancing act between immediate needs and long-term resilience. Whether youâre in a mature corporate environment or a scrappy startup, learning how to handle uncertainty is key to creating software that stands the test of time and truly benefits both customers and the business.
đ This is my first articleâthank you for reading! Feel free to connect with me on LinkedIn. đ
Sources:
[1]: Winters, T., Wright Hyrum and Manshreck, T. (2020). Software Engineering at Google : lessons learned from programming over time. Beijing ; Boston ; Farnham ; Sebastopol, Ca ; Tokyo Oâreilly March.
[2]: Erik Wilde (2021). Hyrumâs Law: Hyrum Wright on Programming over Time. [online] YouTube. Available at: https://www.youtube.com/watch?v=5Wdgjw6IGDM.
[3]: Kleppmann, M. (2018). Designing data-intensive applications : the big ideas behind reliable, scalable, and maintainable systems. Sebastopol, Ca: Oâreilly Media.
[4]:â Krehl, P. (2019). Product Discovery or Product Delivery: How do you Decide? [online] Mind the Product. Available at: https://www.mindtheproduct.com/product-discovery-or-product-delivery-how-do-you-decide/.