Software engineering gets its booster shot

By Sandro Petterle
14 Feb 2022

The demand for and complexity of digital and software development services is increasing, however the talent pipeline is not filling fast enough and productivity is lagging.  Can AI provide a much needed boost?

by Sandro Petterle, Chief Technology Officer at Rufus Leonard and Co-chair of BIMA AI Council 

Tech’s big spenders – think Amazon, Apple, Netflix and others – have shaped people’s expectations of what a good digital experience looks and feels like. Not only that, but digital services are now a critical feature of our daily personal and working lives. We need them running all the time and we want them to come with a beautiful experience that’s also secure, bug-free and updated frequently.

As a result, software engineering is becoming increasingly complex with multiple cloud services talking to each other, the emergence of new coding languages as well as new frameworks, tools, stacks and architectures. Parallel to this technical activity, there’s also been a surge in non-coding creative roles, such as user experience researchers, designers and strategists who are contributing to the final product to ensure it’s useful, usable, reliable and beautifully crafted.

Productivity fights to keep up

Since the 60s, the tech industry has been increasing productivity in software development by making languages simpler and more powerful, creating better development environments, improving interoperability and making a host of new libraries and frameworks available. Today, almost all software runs on several layers of code made by other people.

As teams got bigger, processes such as Agile and DevOps were conceived in order to handle the complexity and communication requirements of building a quality product. There is now a huge industry providing services and tools for the productivity of the entire software development lifecycle that tracks the production process from ideation, requirement scoping, design, development, testing and release. The result is software that helps to manage the making and shipping of software.

Software development is an art form that requires an alchemy of creativity, strategic thinking and experimentation to solve needs and problems in a useful way. Typing, finding information, re-doing what has been done before and watching spinners does not in itself bring satisfaction or value. So development teams constantly optimise their productivity and create time-saving practises like using automation and changing their tools, processes and approaches to deliver the most rewarding work, which is often correlated to the value delivered.

Unfortunately, despite all efforts to improve productivity, expectations and demand for software has surpassed the time and skills that the market can provide. Put simply, the cost of delivering quality software engineering is going up and those costs are ultimately being paid by end customers and eating into profit margins.

Tech leaders have been scouring the world for tech skills anywhere they could find them, increasing average salaries wherever they went. The outcome of this is that richer countries hoard software talent that could be used to deliver better digital experiences in poorer countries, creating a new kind of digital divide.

The increase of input costs without equal output gains will likely continue to increase the final product costs and reduce benefit-cost ratios further. This limits the growth of the software development market as there are fewer high-benefit opportunities that can compensate for the cost.

An AI-powered transformation

There’s a real opportunity for artificial Intelligence (AI) to deliver on the transformational change the software development industry needs. AI has been maturing and is now easily available for developers to include in their software as pre-packaged model services such as recommendation engines, chatbots and custom vision without needing to know any AI. Remarkably, these new AI ecosystems have simplified the creation and operationalisation of machine learning models at scale and in the process, kick-started the process of democratising AI.

But until recently, these capabilities have been mostly used to deliver AI-powered features in software and not for the creation of the actual software itself. What we need now is to take another giant leap forward and start the process of democratising software engineering. This means going beyond the basics like providing drag-and-drop functionality. The holy grail of democratisation is the ability to deliver complex, quality, world-class software without massive training and experience. If we can do this, we can open up the floodgates and dramatically expand the talent pool while lowering the cost of delivering quality features that people love.

To achieve this, we will need to connect, learn from, and automatically generate insights and recommendations from all the people involved in creating and using the software in a virtuous loop. Expertly trained developers will still be involved in the process but freed from mundane tasks, they will be collaborating with others and virtual assistants and operating at a higher level of creativity and strategy. This assisted-creation and collaboration will unlock the ability for even more skillsets to contribute to the product, enabled by knowledge and recommendations they need at their fingertips.

The AI opportunity in the software industry is immense. The global value that could be generated by increasing development teams’ productivity levels is leading many to expect a lot of investment to flow into this space over the next few years.

Opportunities for AI in the development lifecycle

If you think of machine learning, a subset of AI, as a method to make predictions based on a series of data points, then you’ll see that there are a large number of data points in the software lifecycle on which predictions can be made. The software development lifecycle is not just coding, and all stages of software creation could be facilitated by AI.

Stage 1: Requirements gathering

During this stage, a collection of prioritised requirements is generated and use cases are defined through active engagement with stakeholders.

AI-enabled tools could support multiple business users as they describe a software using natural language while an AI assistant could help with related research, discover inconsistencies and loopholes, and provide estimates based on similar requirements to assist prioritisation.

This step can start producing the data structure to create test cases and the software design scaffolding.

Stage 2: Software design

This is the process of transforming requirements into more detailed information and assets that are directly implemented into software. This is usually a very collaborative process encompassing a diversity of skills across UX, creativity, technical design, strategy and more.

Although there has been some improvement recently, there is a lot of opportunity for tools enabled by AI in this area. Many of the contributing roles used to work in isolation with handoffs that bring challenges when changes occur, but new tools such as Figma are helping to bridge some of the challenges… but not all.

In a more AI-enabled future, a UX specialist could be designing a component whilst the tool highlights inconsistencies, providing suggested options based on real-life usage or A/B tests on similar components to deliver the best conversion. It could also point to use cases that are not yet thought of and notify others of the impact it will have on their own activities.

This step can start producing the code structure, assets and the guidelines that the coding assistants will follow.

Stage 3: Coding

Coding is the process of typing frenetically on your computer attempting to tell the software what to do. Coding in itself is not all that software developers do.

Intelligent development assistants, such as GitLab’s Copilot powered by Open AI’s Codex, will progressively complete more code based on natural language comments or partial writing of what we need. These types of assistants used to complete a single word for you, now they can complete an entire function or more! However, they still need a lot of developer attention as they are not very tailored to specific use cases. Despite this, the fact remains that they are certainly impressive in their initial state. By having more information coming from the design phase – the tests you have created and the bugs you have fixed – even more relevant suggestions could be made, improving productivity even further.

Stage 4: Refactoring

Refactoring is the process of changing the code of a solution, without changing its functionality, to reduce technical debt and make it easier to maintain and update.

Wholesale refactoring, which is critical as you evolve your solution, can be a very time-consuming task. As AI code assistants become more mature, they will be able to replicate your code principles and functionality better by being able to automate your refactoring based on initial patterns you set.

Stage 5: Static analysis

Static analysis tools such as Codacy or Sonarcube analyse your code for common issues in terms of security, standards and performance, providing an early warning when developers make typical mistakes or do not follow best practice.

As more people use these systems (and naturally provide signals of what is a bug when things get fixed), they will have even more data to become even smarter and prevent bugs and other issues from going to production.

Stage 6: Testing

Testing is the process of making sure the software does what it is supposed to do. While crucial, it can be time consuming and can slow the release of a new feature. AI automation in testing could help generate test cases, test scenarios, automations and manage risk in a volume that a human would struggle to do. There are some providers starting this journey such as Functionize and Applitools using different AI techniques.

This step should receive information from requirements, design and coding and provide automated tests for deployment and production.

Stage 7: Deployment

This is the process of releasing a software version for general use. Deploying or putting your code into production comes with many risks as it is about to run in a different environment to where it has been tested in. Anomaly detection and automatic verification that system metrics are within parameters can help with safer deployments and automatic rollbacks.

Stage 8: Using in production

This is the real-life use of software by the people who need it. Some good use of AI is already available such as automatic failure and anomaly detection whilst capturing significant amounts of analytics data for further AI development. More advanced systems could provide those insights back to the design system or even automatically schedule A/B tests to pick up changes and ultimately improve KPIs.

To the future

There is a long way to go until we have the level of capability described above but the technology is maturing, and tool vendors are starting to put a lot of AI into their offerings. In the next five years, AI could help democratise software development, increase its access to more people and reduce the cost of new features. Looking over the above, the most value will likely be realised when all these stages are connected to each other to ensure a positive feedback loop exists between human action during the production process, the software’s success metrics, and the overall system’s design tools. AI’s ability to support human efforts in connecting the dots and seamlessly and efficiently filling in the gaps means that we can meet demand for software services while keeping developers delivering more satisfying and higher value activities.

This human-AI collaboration looks set to power a software revolution. 

Artificial Intelligence & Machine Learning

Latest news