CWDN series: what defines modern software development practices?

Programmers, coders, software engineers of all creeds and even meddling script kiddies all see themselves as artists, of a sort. 

Creating applications, data engineering and services across PCs, mobile devices, the cloud backbone and throughout the Internet of Things (IoT), the developer is the artist, the keyboard is the colour palette and the command line is the painter’s easel and canvas.

Just as we see art fall into various ages, disciplines and genres (classical, abstract, post-modern and renaissance), software programming also falls into various fields, categories and sub-genres (waterfall, Agile, scrum or pair-based, RAD rapid and now low-code and – if we allow it in this list – no-code for businesspeople) in the wider spectrum of code creation.

Going deeper here, it’s important to remember that some people would classify different programming types by the vary language type itself i.e. declarative, concurrent, dataflow, functional and so on. Still others might separate them out by target device i.e. desktop, mobile, embedded firmware etc.

So with all of that in the mix, what actually constitutes what we can now stand back and call a modern software development practice?

Modern development

Is modern software development simply cloud-native cloud-first multi-cloud?

Is a modern software development that which embraces data-driven big data insight and makes inherent use of Artificial Intelligence (AI) and Machine Learning (ML)?

Is modern software development services-centric, is it resolutely web-scale (and so capable of deployment across connected services backbones), or it it simply (now that we can provide so many reusable components and frameworks out-of-the-box) low-code? 

Or is it all of the above?

Some speakers suggest that modern development is typified by a high degree of experimentation and iteration. So-called old world IT doesn’t map to modern business, there is now a need for customer [and user] interaction. Today we need to have far more immediacy in our software. This perhaps suggests that modern software is software that has User eXperience sensitivity plugged into its core DNA from the start.

Senior technical evangelist, UK and Ireland at AWS (and perhaps the company’s de facto head of developer evangelism) Steve Bryen says that modern applications exhibit six core traits — that they are:

  • Secure
  • Resilient
  • Elastic
  • Modular
  • Automated
  • Interoperable

Application modernisation specialists

Today we have a specialist segment of the enterprise software market that defines itself as application modernisation specialists. Often focused on taking us away from legacy mainframe and pre-cloud applications, the thrust from vendors in this space is to push us towards microservices, virtual machines, containers and Kubernetes.

According to open source web server company Nginx, a modern application is one that supports multiple clients – whether the client is a UI using the React JavaScript library, a mobile app running on Android or iOS, or a downstream application that connects to the application through an API. 

“Modern applications expect to have an undefined number of clients consuming the data and services it provides. A modern application provides an API for accessing that data and those services. The API is consistent, rather than bespoke to different clients accessing the application. The API is available over HTTP(S) and provides access to all the features and functionality available through the GUI or CLI,” writes Chris Stetson, Chief Architect & Senior Director of Microservices Engineering

Infinity & beyond

As we now move forward into the re-platforming, re-factoring and indeed reinventing needed to enable the world of modern software application development, there will be a host of fundamentally connected tangential factors.

Can you approach modern software application development with an archaic, traditional or legacy approach to database management? One would assume ideally not, but perhaps in some cases you have to.

Is automation, abstraction and (perhaps above all) autonomous control (at the infrastructure layer… and upwards all the way to the user interface layer) the key drivers that will ultimately define modern software application development? 

We may find that modern development is serverless, headless and stateless… so what else will we find? Is low-code as important as the low-coders would have us believe… and will no-code functionality (built by business users) ultimately find its way back into low-code and code-code software application development?

Does all future-facing modern development feature elements of Robotic Process Automation (RPA) and will the bot software robots ultimately start programming for us anyway?

Programmers will always be artists, the question now is… what are the modernists working on and what flavour ingredients are in this modern soup?

Image: Wikipedia