We rely on software in everything we do. Travel, payment, entertainment, health care, trade, manufacturing, education. Nowadays, nearly every human activity involves software. And, just as DNA predetermines how we interact with our environment, so does software determine how objects move and how information flows.
The needs of users change. Platforms change. Regulations change. Software needs to adapt. Increasingly, software is the differentiator in a competitive marketplace, or a prerequisite to enter into a market in the first place. Businesses that are not able to rapidly create new software solutions or adapt existing solutions are unable to stay relevant and compete.
Software developers try to meet this need for producing more software and for evolving software faster. Two important current trends support increased automation and reuse in software development:
- Automation : Modern software development teams strive to automate as much of the software development process as possible. Examples are continuous integration, automated testing and deployment, and low-code environments (check with Jeroen Heijmans for a balanced view on Low Code trends). Automation helps to increase development speed, limit knowledge dissipation, and build quality into every step.
- Ecosystems : Rather than building software systems from the ground up, modern teams increasingly create new systems by combining partial solutions from third parties. Sophisticated new functionality is created with a limited amount of code, gluing together libraries, frameworks and external web services. Open platforms unleash the creativity of partners, customers, and user communities.
As development tools and third-party components are widely available against minimal costs, the software marketplace becomes more and more competitive. Start-ups, technology vendors, and community-driven open source initiatives frequently launch new and improved solutions that may disrupt incumbent businesses at any moment. Established businesses risk being slowed down by regulations, security requirements, technical debt, legacy code, outdated technologies, and architectural complexity, and to realise their Digital Transformation ambitions they need to plan their escape from Legacy Mountain.
Organisations striving for sustainable, competitive business must master the creation and evolution of software. Highly productive and predictable software development management relies on two success factors:
- Product over process : Successful software management keeps a clear view of what ultimately matters most: high-quality software products. Too many organisations attempt to control software development only through process, including extensive documentation, formal methodology, decision and reporting structures.
- Pragmatic measurement : Successful software management makes effective use of meaningful measurements of both products and processes. Too many organisations rely mostly on intuition, hearsay, and untested assumptions to assess the status of their products and the effectiveness of their processes.
When managers and developers have a clear, quantified view of the state of their software products at any moment in the software production lifecycle , they are able to correct defects as they are introduced, modify designs as needed, and adapt through controlled iterations to business needs as they evolve. Measurement of all stages in the software production pipeline allows incremental improvement of the degree of automation, reuse, productivity, and technical quality. Sustainable business requires mastery of software.
Joost Visser is CTO at the Software Improvement Group, Professor of Large-scale Software Systems at Radboud University, and author of O’Reilly books “Building Maintainable Software” and “Building Software Teams”.