This Computer Weekly Developer Network 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?
Rather than risk any of the platitudes that come with covering this subject from a direct (hey, our tools do x, y & z and they rock) line of positioning, Jeremiah provides us with the flipside view on the whole discussion and questions just what does not rank as a measure of modern development for contemporary forward-thing programmers and code engineers of all kinds these days.
Jeremiah writes as follows…
Side by side vs. step by step
Modern software development isn’t ossified by rigid phases, stage gates and sign-offs, which were the hallmark of traditional software projects.
Instead, cross-functional teams of developers, testers, designers and operations work together to develop, validate and deliver innovation as fast as possible. Modern software development doesn’t wait for extended labour-intensive manual testing to test every aspect of the application. Instead, automated testing enables fast feedback for each commit so that developers immediately know whether or not they’ve introduced a new bug or vulnerability.
A senior customer executive told us how automation changed everything: “The amount of effort involved in actually getting to the newest version that you’re supposed to be testing, whether you’re a developer or a QA engineer, is minimised immensely. The QA engineer’s tasks – about an hour a day in total – have been slashed to 30 seconds, a 120x speed increase.”
In our 2020 Global DevSecOps Survey we asked developers what tasks they’re no longer doing thanks to DevOps. It’s a long list but in the words of one developer sums it up pretty well: “I no longer need to manually merge my code and push to staging and then production.”
Kill the big bang (go for MVC)
Modern development doesn’t package massive releases and big deployments. Now, delivery is continuous and incremental.
Because the release and deployments are automated, changes are quickly released. At GitLab, we embrace iteration and call it Minimum Viable Change (MVC), which means shipping as fast as we can so we can get feedback and learn as quickly as possible. Following this philosophy, a global consulting company told us their development teams were able to increase deployments to 10 times a day. That’s a far cry from the era where software was released twice a year, or even less.
The days when project managers crafted elaborate multi-month Gantt charts and tracked earned value from the work breakdown structure are gone – they’ve been replaced by Kanban Boards, sprints and backlogs, where velocity and value stream management are the measures of delivery. Modern development teams are shipping and delivering value as fast as possible or at least as quickly as the business can accept it. Development teams now measure and track the real business value, not some [possibly flaky measure] of ‘earned value’.
In the past, developers would never have accepted the idea of ‘testing in production’. Now testing in production is expected. Teams do ‘A/B testing’, ‘blue/green deployments’, canary releases and more while feature flags make it easy to turn on or off new features, so we can limit the exposure of possibly incomplete features. We’re now able to get the most valuable feedback ever from the end-users. Modern development teams iterate faster, learn faster and deliver better software.
Less is more
Today we don’t build massive monolithic, tightly-coupled applications that break when the most trivial thing changes. Instead, we design and architect scalable, reliable and self-healing applications out of microservices; containers and Kubernetes make it possible to reimagine how an app is designed and composed.
Similarly, we once invested in datacenters where we managed and maintained expensive infrastructure servers, networking, storage and middleware. We protected and nurtured these big boxes with the blinking lights as if they were treasured possessions.
Too often, it meant that additional capacity took months to procure and provision. Minor changes could cause massive outages. Modern software development has changed how we approach infrastructure. We can scale rapidly into a cloud or provider where our application can quickly respond to changing demand, configure the infrastructure as code and deploy changes the same way we handle changes to our business logic. Our infrastructure is version-controlled, rigorously tested and deployed through automation.
Radically changing roles
The people and their roles in modern software development are also different. Rather than being isolated from the business and expected to implement their requirements and technical specifications, modern developers are partnered with business and customers. Today software developers wear many hats, from analyst to tester to administrator. Devs are expected to know the market and understand the business domain as they create solutions to real-world problems. Today developers are crucial to innovation and focus on delivering business value and measuring business results.
Software development is no longer about staying on schedule and coding to the specs – developers are a critical part of businesses today. Developers enable the experimentation and innovation businesses need to adapt, transform and deliver value to their customers faster than ever.
John Jeremiah – Enterprise DevOps evangelist and product marketing leader at GitLab has over 20 years of IT leadership and software development experience. John helps to guide customers to adapt and thrive in a world of rapid change and digital disruption.