How will AI change software development?

There finally seems to be enough maturity in agentic generative AI , that…

Agentic software development systems with sub-systems that produce, edit, refactor, test, document and monitor for coding style, security and compliance produce maintainable and extendable code – provided some expert oversight is available.

This advance allows for the speeding up of software development and changes the nature of work. But what does this mean for software development teams? What are the limits and how to utilize agentic code creation in software development teams?

The theoretical maximum of AI assisted software development

To understand the extent of the phenomenon, let’s first try to get a ballpark of the theoretical extent of the change.

Contrary to the layman’s perception, optimistically maybe half of a developer’s time is spent on actual production of code.  In software development teams, a significant portion of this time is spent on reviewing, testing, debugging, documenting, and commenting on other developers’ (or AI generated) code. There are of course exceptions, such as…

  • Start-ups, with little or no dependencies to internal or external systems in their software
  • Scientific, data analysis, or other limited user group software without the burden of maintenance or any kind of operation of the software post its launch
  • High performance teams meticulously adhering to good coding principles, working on a well-defined platform, conscious of the taxing nature of meetings and context switching

These are not ideals to strive for (except maybe for the last one), but fringe cases. When reading about advances in AI assisted software development it’s important to understand the context: are we building a complier (a program which takes source code as an input and gives machine executable code as an output) or for example a service connected to external data sources with an user interface through which humans can interact with these external systems. I’m using the complier as an example, as it turned out that it was used as an example of a completely ‘AI agent’ developed high-quality high-performing software without any critical mention of the exceptionality of the use-case.

The complier example can be used to demonstrate why the software industry is so well equipped to gain from generative AI. Quite many software outcomes are easy to test and verify reliably. Which is a stark contrast to most other knowledge work, highlighting the uniqueness of software development.

But…
The kinds of systems the teams where I have worked have built have complexity and non-functional requirements which make it much harder to test and verify. Consider a modern software system, like a self-service portal, sketched below:

In such scenarios putting – even an extended array of AI-agents – in charge of its development sets a number of demands for the system.

  • Running the solution reliably and cost-efficiently on a cloud platform and managing the scaling and error recovery of the system
  • Managing the API-management platform, its configurations and the multiple integrations and dependencies to the integrated 3rd party systems
  • Maintaining a fast, intuitive, uniform, user friendly, even loveable, design system and brand compliant user interface
  • Utilizing and managing platforms correctly and securely for identity and access management and for the delivery of content – also coming form multiple 3rd party systems
  • Adhering to industry specific legal and security requirements

Honestly, putting AI in charge doesn’t look like a viable option. Especially when the bulk of the cost of running a software is in the ‘long tail’  – the maintenance and further development of the system, not in frantically producing new code.

Don’t get me wrong, I’m all for using AI in software development, but in modern systemic cases, AI’s role is better suited for constrained low-dependency code creation, documentation, ideation etc. with an (expert) human in the loop. Meaningful and potentially efficiency boosting, but not something that could allow you to sack your development team. It may allow for a smaller team if you manage to organize your development well.

Communication is a core skill of a modern developer

In ‘real-life’ cases the role of the developer has already transformed to become a communicator and business idea translator.

A good developer is good at coding, but a great developer can act as a translator between the business needs and how to implement them. The working solutions produced are most important, but communication is a core skill and a source of value for the organization. the days of ‘just developers’ not actively involved with designers, business-people, and the end users of the system are over.

When we look at business needs and requirements for new features, they are typically vague and expect a lot of context knowledge both from the business and software environment of the product from the developer. The needs of the users are equally vague. The unexplicit nature of real-life requirements and needs for software puts the developer into the role of a translator, who documents, deducts, and refines these requirements into something that can be explicitly coded. Without this crucial step the business needs will not materialize properly.

New problems to address

In the ‘Age of AI’ there is a temptation to only hire seasoned experts to oversee a completely agentic code factory. But the newbies that have grown using AI agents to learn and boost their skills are valuable too. Their main value is in the age-old question “Why are we doing [xxx] this way?” – questioning the obvious and the conventions. This questioning drives the development process towards novel breakthroughs that improve the end product not incrementally but dramatically.

A real problem is in spreading knowledge – especially tacit knowledge in the team when a major part of the code is generated by AI agents. It’s not enough to review and quickly digest the new code – the real test comes when sh1t hits the fan. How fast can you digest all the new code added to the repository in a pressed situation and assess if it could be the cause of the current issue, and if so, where the problem is?

Teams need to develop solid practices to maintain a good overall understanding of the solution. AI agents must be thorough in their documentation, and the documentation needs to be instructed to be easily comprehendible and intuitive. Just like in a situation where a support team takes over responsibility of a software developed by someone else – the team needs to recreate the tacit knowledge needed to maintain and further develop the system. Only after such recreation can the team successfully keep running and maintaining the software. This puts more pressure on the team’s communication and collaboration skills.

Moving even forward, how can we avoid reaching a ‘plateau’ where the quality and novelty of new software doesn’t improve, because of extensive genAI code creation. How can leaps be made in the future to improve the user experience or completely transform the speed of solutions if we resort to code producing machines which code patterns are stuck forever in 2020-2025, the last times humans ever contributed new code as training material to use. Teams which continue developing their development skills can easily avoid this plateau and keep their product competitive compared to the competition.

One last thing…
When everything is handed to you on a silver plate you get lazy and careless. How to maintain focus in a work environment where you only review code and never create it yourself. This one was a joke… No developer I know would ever do so. Even the ones enthusiastic about AI assisted coding agents constantly tweak their agents.

How to organize software development ‘in the age of AI’

Mass production of code will not solve the efficiency problem of software teams. It was never about creating more lines of code faster.

With bloated codebases come wickeder problems. Software development is all about communication and empathy with a little twist of systemic and algorithmic understanding.

First, you need to understand the needs of the business you’re in.

Secondly, you need to understand the needs of the (potential) users of your system.

Only by building what’s business-wise viable will you get paid and only by building solutions people are willing to use will the business strive.

A feature is useless – or in terms of maintenance a burden – if it’s not used. Finally, once you build your system, the algorithmic understanding will come in handy along with a good understanding of the computational environment you work in (the data sources, the platforms, the frameworks, etc.).

AI agents can help teams by giving the same reminders to human developers they would give to other agents about a uniform coding style, conventions, patterns, security, and documentation. Having a well-maintained agentic genAI system available for developers to generate code but letting them ultimately choose when it makes sense to ‘write it themselves’ is the way to succeed. A business leader is not typically qualified to make the judgement. It boils down to giving support and autonomy for your teams to adopt AI generation in the parts of the solution where they in their expert opinion see it best fit.

LAKE MICHIGAN – Petty Officer First Class Erin Hunter (right) junior officer of the deck on the Coast Guard Cutter Mackinaw, assists underway officer Ensign Katharine Braynard with monitoring the electronic charting system during an all-female watch, Nov., 28, 2012. U.S. Coast Guard photo by Seaman Robert Butler. Public Domain.

Just like the captain always has the option to shut down the auto-pilot at any time and take control, similarly you need to trust your experts.

Demand understandable, solid, and business-fit reasoning from the team – this exercise will only improve a core developer skill, communication. Be open to the team about the business needs and facilitate access to end users to connect and really understand their needs. No magic, no silver bullets, just good communication and collaboration.

So, how will AI change software development?

Done properly…

  • it can make it more efficient
  • it can improve the quality of the codebase
  • it can help human developers
  • it can make the work of human developers more meaningful by reducing menial work
  • it can make the process from business idea to implementation both faster and better aligned with business goals
  • it can give more time for developers to interact with users and to understand them better, resulting in more loveable products

Done badly…

  • a solution which is difficult to maintain
  • lots of features, but all the wrong ones – a solution no-one wants to use
  • a team of developers who have completely lost meaning in the work they do

Leave a comment