Portrait of the software developer as an artist
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.
Art is categorised into a number of genres, such as classical, abstract, post-modern and renaissance. Similarly, software programming falls into various fields, categories and sub-genres, such as waterfall, agile, scrum or pair-based, rapid application development (RAD) and now low-code and no-code (for business people) in the wider spectrum of code creation.
Going deeper, some people would classify different programming types by the various language types, such as declarative, concurrent, data flow, functional, and so on. Others separate them out by target device as desktop, mobile, embedded firmware software development.
To add to the confusion of how to categorise software development, modern development practices are often associated with cloud-native, cloud-first and multicloud approaches.
There are those who will argue that modern software development embraces data-driven, big data insight and makes inherent use of artificial intelligence (AI) and machine learning. Computer Weekly asked a number of industry experts to define what it means to be a modern software developer.
There is a school of thought that categorises modern software development as primarily services-centric and web-scalable, which enables the developer to create code that is capable of being deployed across connected services backbones. Other software developers strive to build reusable components and frameworks that form the fundamental building blocks of new applications.
Today, there is a specialist segment of the enterprise software market that defines itself as application modernisation specialists. Often focused on the migration from legacy, mainframe and pre-cloud applications, the thrust from software tools providers in this space is towards microservices, virtual machines, containers and Kubernetes.
A modern software architecture
Volterra provides a distributed cloud platform to deploy, connect, secure and operate applications and data across multicloud and edge sites. Its CEO and founder, Ankur Singla, thinks microservices will have an increasingly important role to play in the immediate future shape of software application development. Singla says the surge seen with Kubernetes adoption and a selection of other factors are the reasons microservices will become more mainstream in 2020 and onwards.
“Microservices is a part of Kubernetes’ DNA – it is the primary method by which apps are developed and deployed when using Kubernetes,” he says. “With the rise of Kubernetes, tech players are releasing open source toolkits and frameworks that address microservice challenges and ultimately allow other organisations to adopt them properly.”
As an example, Singla says Microsoft recently launched the open source Dapr project. Microsoft describes Dapr as a portable, event-driven runtime that makes it easy for developers to build resilient, microservice stateless and stateful applications that run on the cloud and edge and embrace the diversity of languages and developer frameworks. Singla says a number of startups are also ramping up efforts to address these issues.
Write once, deploy on any device
“Modern applications are expected to have an undefined number of clients consuming the data and services they provide,” says Chris Stetson, chief architect and senior director of microservices engineering at Nginx. “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 graphical user interface (GUI), or a command-line interface (CLI).”
Looking at the ability of web-scale businesses to develop new software-powered products and services suggests that modern development is typified by a high degree of experimentation and iteration. So-called old world IT does not map to modern businesses that want to emulate the success of the web giants. This means there is now a need for increased customer and user feedback in the software development process, which suggests that applications are being created with user experience (UX) sensitivity plugged into their core DNA.
The goals of modern software development practices are increasingly focused on time to value. Chris Bailey, chief architect for cloud-native solutions, IBM Cloud Paks for Applications at IBM, argues that these practices should not only focus on the ability to deliver software rapidly but, crucially, they need to ensure that software delivers real user and business value.
Bailey believes software development teams need to become multidisciplinary and more self-contained, reducing handovers and scheduling dependencies on other teams. He says they should also adopt behaviour-driven development (BDD) and test-driven development (TDD) so that software is based on meeting user needs and quality requirements.
Bailey says software development teams are utilising continuous integration to increase velocity and ensure continuous quality checking occurs as part of the development process. He says they also tend to use continuous delivery with capabilities such as canary releases in order to limit risk and continually validate and enforce resilience.
Bailey believes modern software development practices involve building software in a way that makes the code easy to manage. This means adding consistent health-checking, observability and operational controls, which, he says, makes it easy to manage and operate applications once they are in production.
Software development practices go hand-in-hand with change management and having diverse thinking from a broad base of people. There was a time when software was developed to serve generic business functions, all within a single, monolithic application that ran on a central system and could be accessed via a dumb terminal. These days, the preferred architecture for new software development projects is often highly componentised, where individual building blocks may run on different servers, containers or even split across different clouds.
The front-end application not only needs to run on any device, but developers are encouraged to create user interfaces that engage end-users. From an end-user perspective, the front- and back-end applications need to create good user experience.
Any company can assemble the best development tools and services, but that will not necessarily guarantee success, says Catherine Wong, chief product officer and executive vice-president of engineering at Domo, which specialises in cloud-based business intelligence tools, data visualisation and data integration.
“If it were that straightforward, we’d see a lot more startups succeed,” she says. Wong believes there are, of course, a multitude of reasons why building and scaling software is so challenging. While writing millions of lines of code and distributed bits and bytes are absolutely important, success requires a team effort.
“For the majority of us, software development is a team sport,” she says. “Our teams have long had crisply defined roles, like engineers and all their specialisations, architects, product managers, quality assurers, designers, project managers and technical writers. Those are still relevant functions, but how we enable diversity of thought and experience, as well as how we cross-train for increased empathy and better communication among the team, has become more critical than any one job title.”
According to Wong, this focus on diversity dramatically influences the business impact of the software that is being developed, and, more importantly, on a human level, it stretches project and product managers to cultivate an environment of inclusion, innovation and growth. “Over the years, I’ve seen countless examples of how the art of software development and the human elements of diversity and collaboration are what really differentiate a product and its speed of response to the market,” she says.