The World Needs Software - Less Software
Omar Bashir
Technical Director | Accelerating Technology Change in Financial Services
Disruptive technological influences have caused a revolutionary evolution of our personal and professional lives. Digital transformation of the world and the blinding pace of innovation largely rests on software. Mobile, web and cloud apps have enabled individuals and businesses to optimise and economise their work processes.
While all trends point to further automation, despite its advantages, it is both expensive and risky. Various surveys indicate high failure rates of IT projects. Most systems do not deliver the desired value and are too expensive to maintain and operate. With increasing sophistication of business requirements, the scale and complexity of software is ever increasing.
Thus, not only economical and timely delivery of optimal enterprise software is challenging, its subsequent maintenance and operation is also expensive and risky eventually leading to premature obsolescence. This has led to pessimism amongst executives in many firms on the ability of technology to deliver business value.
Recurring themes in IT projects that fail to deliver value point to the size of the systems being delivered and their complexity. Larger, especially over-engineered and badly engineered systems are expected to be more (accidentally) complex than smaller systems. Additionally (optional) complexity increases substantially with every new feature added to the application. Both reduce the longevity of systems thus rendering them obsolete much earlier than expected. Furthermore complex systems require substantial support and maintenance during their lifetimes.
A strategic focus on reducing a system's size and its complexity requires prioritising value, adopting pragmatic reuse and eliminating premature optimisations.
Prioritising Value
Technology is means to deliver value. Thus, for a given budget, organisations typically prioritise technology projects that either deliver the maximum value or fulfill a critical need. Prioritisation of value, however, needs to continue further within every individual project.
All systems under development have certain targeted features. And not all features are equal in the value they deliver and in their implementation costs. Furthermore, certain features are essential for the business domain while others are optional.
A pragmatic project plan should prioritise essential features over optional ones. Optional features should then be prioritised based on their value and their implementation costs. A value driven approach to deciding the features and scope of an application can greatly reduce its size and scale. This has a direct impact on the optional complexity of the system.
Pragmatic Reuse
Reusing software is largely considered a productive practice in software development. However, there are costs and risks associated with software reuse. There is always a temptation to ignore these while chasing ready made functionality especially if it exists in open source.
The biggest risk of reuse is dependence. If a dependency is not adequately isolated, the application is enslaved to the evolution of that dependency. This translates to maintenance costs when dependencies evolve or are discontinued.
Outright costs of reuse include the effort in learning and in integrating the dependency to the application. Furthermore, dependencies may have runtime and deployment costs like processing and storage capacities that add on top of application overheads. Finally, licensing costs in some case can be prohibitive.
Careless reuse can add substantial accidental complexity to a project. This is especially aggravated in projects where a number of dependencies are integrated to implement a single feature with only a tiny fraction of each dependency being used. This also adds to the application’s footprint leading to unnecessary overheads that translate to costs and risks discussed above.
Targeted Optimisations
Premature optimisations are the single biggest contributors to the size of applications and the infrastructure supporting them. They also increase application’s accidental complexity, at times exponentially. Finally, the optimisations achieved in already efficient components rarely justify the effort and are almost always unnecessary.
It is important to focus on a functionally correct implementation and then optimise only the components that form bottlenecks in the processing pipelines. Simpler and well designed applications are easier to optimise than more complex ones.
"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away." This quote by Antoine de Saint-Exupéry is equally valid in planning, designing and implementing efficient, useful and usable system.
?
Technical Director | Accelerating Technology Change in Financial Services
7 年Agreed, KPIs form part of value that needs to be delivered and should always be in consideration. Governance generally decreases or is simplified for simpler projects and systems. So, by pursuing simplicity aggressively in both requirements and implementation it is possible to keep on top of KPIs.
good thoughts. an additional thought is that often value creation is deemed in inception, however it falls through in execution, mostly as definition of intention is not tied to measurements (KPI) - continual governance fails.