Software engineering is constantly evolving, with changes in technology, processes, tools and development lifecycles. Billy McNeil and Resham Dhillon explore and explain the evolutionary trends changing the way software engineers design, develop, deploy and maintain their products.

In a field as diverse and rapidly changing as software engineering it can be difficult to keep up with trends. How to become a software engineer is changing and how to stay relevant is evolving. This article digests some of the prominent trends in the software industry which will influence the work of engineers.

Emerging trends in new technologies and ongoing innovation will result in significant change in the future of software engineering. The nature of software development will change to require a broader set of skills within individual roles, with the increased use of automation and artificial intelligence. The role of the software engineer in the software development process will be key to ensure the interpretation of requirements is appropriate, and the outputs generated are a reliable solution to the problem being posed.

What trends do software engineers need to know about?

Firstly, the remote and hybrid working environment. Being comfortable working remotely has become a permanent feature following the COVID-19 pandemic. Having a skillset which is broad provides the ability to utilise cloud-based toolsets and allows autonomous and highly productive remote and hybrid working to be the driving force behind software engineering.

As geographical barriers are removed, location bias and relocation costs can be eliminated, opening much wider opportunities for software engineers.

Cloud-based services

Cloud-based computing has been around for many years now, but the services available are constantly improving and expanding. More and more sophisticated native services are available through cloud-based infrastructure. Having the skills to utilise these to best effect will be a key part of future software engineering roles.

Software engineers will need to extend their skills beyond traditional application design and development to encompass skills such as:

  • Cloud service platforms
  • Application programming interfaces (APIs)
  • Database management
  • Networking
  • Machine learning
  • Cloud security
  • Data storage
  • Containers
  • Serverless environments.

Cloud-based software development and deployment capabilities will become ever more sophisticated. It will become crucial to understand API use and how to incorporate AI and machine learning capabilities offered by cloud computing environments. Equally, engineers should be able to utilise and deploy these technologies.

Understanding and validating the output from this sort of complex capability will be one key role of the software engineer.

Serverless and containers

Serverless and containers will become mainstream hosting environments. In many cases, organisations will use both working together, leveraging the relative benefits of each technology and exploiting automated deployment and scaling.

Containers will allow applications to be packaged, separated from the underlying infrastructure and deployed consistently in any environment.

Serverless will enable developers to focus on writing code to handle specific events. The code is packaged as a serverless function and invoked by the serverless runtime as many times as necessary to serve incoming requests.

Composable architectures

Composable thinking and composable architectures help organisations deal with the rapid pace of business change and support greater business performance.

Composable architectures enable repurposing of IT and business assets to rapidly build new systems, mitigate threats and quickly take advantage of new opportunities. Organisations that embrace composability will be better able to survive and thrive during times of volatility.

Key software engineering approaches that support composable architectures are already established and include those listed below:

  • Good structural design and modularity.
  • Component autonomy / minimising coupling of components from each other.
  • Orchestration to drive interactions between components to enable re-composition and forming processes.
  • Discovery to find and understand components.

Composable thinking is an important skill that software engineers need to develop to support working in this manner.

Traditional software engineering thinking around application development has been focused on stability of the production software. With the business imperative for agility now prominent, the need to change is a great concern. Software engineers need to use composable thinking, treat everything as changeable and foster exploration and creation to support new business opportunities.

Packaged business and technical capabilities are the building blocks of composable architecture. Software engineers will be charged to design packaged business components based on business capability models and technically modular components to support the final solution. Software engineers need a good understanding of orchestration and automation by taking an API first approach to their design work.

The maturing of composable architecture is likely to bring the evolution of application composable platforms to support composable applications and processes. Such platforms will support development, integration, orchestration, user interface development, process automation, operation and governance all within one platform.

The popularity of the cloud has accelerated composable architecture thinking with cloud services providing high value technical components. Today, complete solution architectures can be built by orchestrating cloud services through serverless functions, messaging and events.

Componentisation

Recent research has shown that the majority of software produced today uses significant numbers of existing software components, making up over half the code base. This trend will continue, with an ever increasing proportion of application code sourced from pre-existing components driving the need for the software engineer/developer to have a broad understanding of component orchestration and interaction and reducing the need for proprietary code.

The ongoing management of the component-based environment to ensure appropriate levels of security are maintained will be an increasingly important requirement of the future software engineer/developer.

Recent studies examining nearly 130,000 software applications, found almost 50 percent of the components they contained were more than four years old, and therefore required updating/refreshing to protect from security vulnerabilities.

Everything as code

Everything as code (EaC) can be described as a methodology or practice that extends the idea of how applications are treated as code and applies these concepts to all other IT components.

Infrastructure as code (IaC) is the most prominent example and is the process of managing and provisioning physical and virtual compute devices by means of machine-readable definition files, rather than physical tools. These files can be scripts or declarative definitions.

Infrastructure as code is the building block foundation for other interchangeable layers to follow. Core systems like data storage and networking resources have already been successfully enabled as API-equipped cloud services.

The trend will continue with these concepts being applied to all other IT components like security, compliance, jobs, backups, workload management and architecture policies. Marc Andreessen’s famous quote that ‘software is eating the world’ is indeed coming true.

Use of automation and adopting an EaC approach will reduce costs while increasing the quality reliability, efficiency, and rate of application delivery. Software engineers need to be aware of the ‘as code’ trend and build skills in the scripting and declarative approaches that form the basis of EaC.

EaC is a key enabler for the transformation to product-based development, value stream management and DevOps practices as the traditional infrastructure and operations structures along silos of infrastructure specialties becomes problematic.

EaC enables product teams to have ownership and autonomy to create and modify the constituent parts of their solution architecture and supports their ability to perform platform ops, site reliability engineering (SRE) and ‘you build it, you run it’ organisation models.

Blockchain technology

Blockchain technology establishes trust and transparency between parties using shared, immutable ledgers. This technology has significant environmental concerns in its application to cryptocurrency, but it could be used for greater benefit to secure high value purchases like vehicles and land, or secure intangible assets like copyright, patents or intellectual property.

Use of blockchain technology will become more prevalent in multiple sectors such as logistics, publishing and healthcare with the associated requirement for skilled software engineers.

Cybersecurity

Awareness of, and mitigating against, cybersecurity threats from within software applications (secure by design) will be an increasing requirement for software engineers. Reliance on perimeter security mechanisms will be less and less acceptable.

Cybersecurity integrated into the software development process will be a future requirement placed on software engineers. The interconnected nature of ever more sophisticated systems means cyber protection measures have to be understood and integrated into the development process, not added afterwards through traditional perimeter focused security measures. As organisations adopt zero trust cybersecurity meshes it will become the norm for software engineers to adopt similar approaches.

Automation

Automation goes way beyond robots on a manufacturing floor: it impacts the online business world. Digital marketing automation relies on algorithms that determine everything from when companies send out content to how they structure marketing campaigns and place advertisements. The global marketing automation market was valued at $4.06 billion in 2019 and is expected to grow by 9.8% annually between 2020 and 2027. This demand opens up opportunities for aspiring software engineers with broad skills in programming and mathematics.

Robotic process automation (RPA) is a form of business process automation. RPA platforms automate repetitive, rule-based, predictable tasks by using a combination of UI interactions and APIs to integrate different enterprise applications.

DevSecOps

DevOps is the combination of culture, practices and tools that increase an organisation’s ability to deliver applications and services at high velocity, evolving and improving products at a fast pace to delight customers.

DevSecOps brings in new ways of working with the adoption of agile and lean practices. Technology such as continuous integration / continuous delivery toolchains and automated testing are used to automate the software delivery lifecycle and drive testing, quality and security scanning as early as possible.

API first

An API first approach is where all development APIs are treated as a first class consideration and the end-product is designed to be consumed and automated through consistent and reusable APIs.

APIs enable end-user and machine access to the end-product and allow integration, automation and composability in ways not envisaged by the API producer.

The success of cloud-based services are a great example of where APIs are enabled universally and the resulting flexibility and agility it enables for consumers is compelling. SaaS based development tools are following a similar approach where functions can be achieved via APIs allowing consumers to adopt tooling of their choice and orchestrate for their own DevSecOps toolchain pipelines.

For you

BCS members can read the very latest F-TAG technical briefings and reports.

The future will see increasing use of API-first approaches as it forms the bedrock of composable architectures. Enterprises will make ‘API enabled’ a consideration for software purchases and a requirement for their own in-house development.

Software Engineers should become familiar with the API-first design approach, designing, building and documenting APIs.

Internet of things

The internet of things, or IoT, is expanding rapidly with billions of smart devices around the world ranging from home appliances to medical devices connected to the internet, all collecting and sharing data.

The internet of things has huge potential to make the fabric of the world around us smarter and more responsive, merging the digital and physical universes. The growth of IoT will drive a rise in the demand for IoT-oriented software engineering, tools and eco-systems.

Artificial intelligence

AI has the potential to revolutionise development tooling and the way software engineering operates, resulting in significant productivity and quality improvements. Everything from initial stages of planning and estimating to user acceptance testing could benefit from use of AI. Utilisation of AI by skilled engineers will improve the output of software engineering activities by augmenting required practices to make them more effective. Software engineers will be required to make sense of what is possible and apply the myriad of complex technical capability appropriately.

Conclusion

The future of software engineering welcomes professionals who are knowledgeable about existing technology and creative enough to adopt new approaches to help drive the future of the field and its applications.

Software development trends show the ever-growing volume and range of new technologies that are creating new software engineering positions at a rapid rate.

From DevOps engineering — creating automated processes between teams that allow them to work together efficiently — to data science, software engineers will continue to be required to build systems which have broad and meaningful applications.

Until recent times, a very high proportion of software engineering roles resided within specific technology companies. Nowadays, ‘every business is a software business’, as Watts S. Humphrey, the father of quality in software and CMMI, stated two decades ago. Businesses of all kinds are heavily reliant on computer-driven applications and processes. Software engineers are required to design, maintain, audit, and improve all these systems. Increasingly, career opportunities extend to many industry sectors across geographies. These sectors include retail, healthcare, insurance, education, banking and finance, government and defence. The need for software engineers who can apply creative, technology based solutions to meet the business requirements will continue to grow.

Will there be an increasing demand for skilled software engineers/developers as we look to the future? The answer is very simple — yes, the modern world runs on software. Most companies and organisations rely on websites, apps, or computer-based software to keep their businesses running and successful. As companies digitally transform it involves applying digital technologies to reinvent how and why work gets done to create and deliver new value. Responding to constant competition and advancements, software engineers build programs, make improvements and adjust code to maintain efficiency and effectiveness. Even as the tools that software engineers use to develop their programs improve, market demands are becoming more complex, meaning potential employers desire an ever-higher level of professional expertise.