This series is devoted to examining the leading trends that go towards defining the shape of modern software application development.
As we have initially discussed here, with so many new platform-level changes now playing out across the technology landscape, how should we think about the cloud-native, open-compliant, mobile-first, Agile-enriched, AI-fuelled, bot-filled world of coding and how do these forces now come together to create the new world of modern programming?
Bailey challenges us with five key goals for modern development teams and, in return, he offers five key drivers (a fistful, in fact) that he suggests can help modern software application development practices flourish in contemporary coding environments.
Bailey writes as follows…
The goals of modern software development practices are increasingly focussed on time to value.
This isn’t only about the ability to rapidly deliver software, but crucially to ensure that software delivers real user and business value… and does so based upon an underlying set of principles including:
- Quality: Ensuring that software is easy to use, error free and meets its user and business requirements.
- Security: Applying secure-by-design and defensive coding techniques, ensuring data privacy and encryption in motion and at rest, as well as applying maintenance for common vulnerabilities and exposures (CVEs).
- Scalability: Enabling the software system to adapt to increased demand, either though vertically or horizontally scaling.
- Resilience: Designing software so that a user does not notice an unexpected failure, or can continue with a reduced set of capabilities until recovery occurs.
- Observability: Providing visibility into the state and operations of the software, not just for resource usage and performance, but at the level of the business and user value that the software provides.
A fistful of drivers
To achieve this, teams need to exhibit an equal number of traits, characteristics, practices and platform-centric methodologies:
- Becoming multi-disciplinary and more self-contained, reducing handovers and scheduling dependencies on other teams.
- Adopting behaviour-driven development (BDD) and test-driven development (TDD) so that software is based on meeting user needs and quality requirements.
- Utilising continuous integration to increase velocity and ensure continuous quality checking occurs as part of the development process.
- Leveraging continuous delivery with capabilities like canary releases to limit risk and continually validate and enforce resilience.
- Building to manage, adding consistent health-checking, observability and operational controls across software, making it easy the manage and operate in production.
These modern software development techniques and practises come together, alongside easy access to compute and deploy platforms through cloud, to make it possible to deliver business and user value at unprecedented velocity.