26th May 2023
Striking the Balance: Pragmatism in Software Delivery
In this article, we will delve into the importance of striking a balance between technical excellence and delivering business value in software development. While it’s crucial to prioritize business needs, it is equally important to address technical aspects to ensure long-term productivity, maintainability, and scalability.
Achieving Business Objectives
Building and scaling teams while maintaining a focus on the velocity of delivery can be challenging. Some teams may emphasize the pursuit of technical perfection, equating it with delivering business value. However, it’s essential to differentiate between shipping meaningful code that serves business objectives and purely technical pursuits. The two approaches require separate considerations within the software delivery lifecycle.
Embracing a Balanced Approach
To illustrate this point, let’s consider a thought experiment. Suppose there’s a need for a new “widget” in a product. Validating the need, assessing the return on investment, and ensuring seamless integration with existing systems all involve extensive collaboration between business and technical teams. This collaborative effort is demanding but necessary for delivering meaningful business outcomes.
Contrastingly, focusing solely on technical improvements or codebase cleanup might appear easier from a development perspective. While such work can have value, it should be evaluated against business needs and prioritized accordingly. Undertaking technical pursuits without considering their alignment with business objectives is akin to a car mechanic performing repairs on a vehicle without being asked.
The Interplay of Business and Technical Needs
In certain cases, pursuing technical excellence aligns directly with business objectives. For example, engineers working on improving the efficiency of an aircraft engine contribute to the core metric of selling more engines, benefiting the business as a whole. However, this alignment is rare in most software engineering teams that primarily serve as enablers for the business.
In the majority of cases, focusing solely on technical pursuits, such as codebase cleanup, does not directly align with broader business needs. It is crucial to recognize that the investment made in technical improvements should be weighed against their impact on delivering tangible business value.
Balancing Perfection and Pragmatism
While pursuing technical excellence is essential, it’s important to acknowledge that software development is not a zero-sum game. Merely focusing on code improvements may result in delivering better code without directly delivering tangible business value. The business is investing in the team to create value, and therefore, efforts should be aligned with delivering meaningful outcomes for the business.
However, it’s equally critical to address technical debt and ensure the codebase remains maintainable and scalable. Neglecting technical aspects entirely can impede long-term productivity and create challenges for the future.
Embracing Complexity and Change
In any software project, entropy is inevitable over time. Paradigms, practices, and team dynamics evolve, necessitating ongoing efforts to adapt and maintain simplicity. While perfection may be an appealing ideal, it’s crucial to accept that software development is a dynamic and ever-changing field. Instead of striving for unattainable perfection, focus on implementing simple and pragmatic solutions that meet immediate business needs.
By striking the right balance between technical excellence and delivering business value, software development teams can navigate the complexities of the industry and maximize their impact.