Balancing short-term and long-term objectives during software development forms an underpinning tension which often exhibits during code reviews, sprint planning and prioritisation.
Audiences should attend to see how concepts like modularity, consistent design language and the use of software patterns can be seen as an expression of managing cost and complexity over time, and how this perspective can help bring clarity to processes such as code reviews, sprint planning, prioritisation and effort estimation.
This talk comprises an exploration of how to discuss trade-offs during software development, based on technical examples.
It’s (more or less) obvious why software needs to meet user requirements. It’s also (more or less) obvious why software needs to meet essential security requirements and essential performance requirements. However, there are many other concerns beyond this which may be balanced during software development. For example, consider whether a new feature should use a functional approach or rely heavily on inheritance as a design pattern. There may not seem to be an obvious or objective answer at first.
Given that the benefits of software design choices and software quality impacts are often not immediately obvious, they are consequently more often the subject of debate — particularly if they require extra time and effort to achieve. Further, the emphasis of what is generally considered important can change with time. For example, modern computers have much more memory than ones from decades ago. The main concerns of today are not those of the past. Who is to say that today’s priorities will even matter in the future (near or far)?
This presentation has the core contention that software quality is often a matter of balancing long-term objectives with short-term ones. In the short term, quick feature development off a stable base is appealing. In the long term, minimising costs (such as maintenance burden) has increasing priority. While getting agreement about exactly what will achieve the best balance between competing objectives may be difficult, starting with agreeing up-front that the purpose of well-written software is to optimise that balance can help facilitate what can otherwise be a highly subjective discussion.
This can help in discussions among developers (junior and senior alike), and also in discussions with non-coding participants such as customers, product managers, users, or any other stakeholder. We all share the common language of time, effort, cost and overhead.
The presentation will comprise a sequence of examples of software development principles, and describe how these may be viewed through the lens of balancing short and long term benefits.
Tennessee Leeuwenburg is a data scientist and software developer with over 20 years of experience. He has an interest in open source software, machine learning, and forecast verification. His current research work includes the development of scientific machine learning models for weather and environmental prediction. For an overview of his recent publications, please visit https://orcid.org/0009-0008-2024-1967 . He also maintains two open source software packages (https://github.com/nci/scores and https://github.com/ACCESS-Community-Hub/PyEarthTools).