Ideas about how AI will affect software engineering
AI will very likely impact many markets and replace human in many of the jobs. Since software development process is slow, hard and expensive, it may be one of the first candidates to be replaced. Since all actions/outputs of software developers are usually recorded, there is huge amount of training data sets, which would speed up the training of models that can build software. It is very hard to predict the future and there are tons of ideas how would the AI change the world. This story is just another attempt — which is very likely be incorrect — to predict the impact of AI on software development. I will share my ideas about two things. “What would be final state once all software development can be done by AI?” and “What would be the steps of transitioning to that state?”
What would be the final state of software development? What would the software development look like, if the human is not in the loop any more? Will the following quote will still be true?
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”, by Martin Fowler.
Software development is the process where you define the machine instructions to a computer to accomplish tasks, so that computers can achieve that task. Almost all developers use higher level programming languages, thousands of existing libraries/frameworks, operating systems, multiple levels of abstractions, tons of tools and eventually compilers to generate the machine instructions. Removing human from the loop changes the software development process drastically. There is no need for AI to follow the existing approaches/methodologies. In theory AI can generate the machine instructions directly from a given task description by skipping all the other steps. It may even not need to use a compiler, an operating system, or any library.
Having human in any part of the loop would be very restrictive since artifacts just for human understanding and involvement will be generated. Human involvement would also slow down the development process drastically. Eventually there shouldn’t be human in the loop.
Humans still need to tell the AI what to do? In software development usually the main complexity comes from nature and ambiguity of the problem/task to be solved itself. This requires deep understanding of the problem domain, prototyping and getting feedback from users and iterating multiple times until the software system is mature and doing the right thing. For AI instead of giving detailed problem statement and scenarios, a high level intent can be enough. AI can use the already available domain knowledge, existing similar products, can ask followup questions to better define the specs, it can build versions of the software in seconds and get feedback of the almost finished product. It can even use millions of human like agents to test the software. It can iterate thousands of time and collect feedback from the agents and humans as well. It can optimize the software/infrastructure for high performance or high availability. Once deployed to production, it can still continue to improve based on the defined success metrics through quick iterations.
It is very likely that there will be multiple AI’s — may be millions of them — owned by different entities. Software systems developed by them will still need to communicate to each other. This will require standards and protocols to be maintained by authorities. It is likely that those authorities be commonly trusted/recognized AI agents, that are optimized to increase communication performance.
Ok, assuming that there will not be any human in the development phase, how would the current system evolve / transition to that state?
This transition will not happen instantaneously. AI will evolve gradually and it will not replace all engineers at once. Probably AI will first replace the work force that is doing more repeatable and more concrete tasks. Then gradually more complex roles will be replaced. Until every step of software development is replaced by the AI, AI agents will need to adapt to the software engineering world which evolved for humans. This means, AI need to produce human readable, maintainable code, use common frameworks, libraries and build systems, apply best practices of design like design patterns, create tests, write clear diff/CR comments, explain their every action by providing reasoning, generate documentation, generate human readable diagrams. This means they have to mimic a human software developer in order to adapt to the system. More experienced engineers would still be needed to ensure the overall problem is divided into tasks that AI can handle. Once AI improves and can handle more complex tasks the need for senior engineers will gradually decrease. Meanwhile it is very likely that AI will be able to build all software system from scratch for less complex problem domains. We can expect startups to implement their relatively low complexity ideas, with zero code knowledge and zero developer support.
Probably the highest complexity software systems are the ones that are built in big tech companies like Meta and Google. For example Meta has more than 50K engineers, millions of servers, billions of users, hundreds of millions of lines of source code. This took 20 years for them to build this infrastructure and the software. How would the transition look like in those companies? AI agents will need to produce human understandable and human maintainable code, until the AI generated software is fully trusted and there is no case where human would have to fix things. For example assume that senior engineers build the architecture and define the major building blocks and the interfaces among them. Building blocks can fully be implemented by AI and can be deployed to virtual machines. The developed software can fully be a black box for the senior engineer, where if it doesn’t work AI can re-generate it with different approaches or can debug itself by getting instructions from the senior engineer. This process would evolve by time, where AI can generate group of building blocks and ship to a fleet of computers. Eventually overall system can be a black box to humans and the AI can fix and improve itself based on the success metrics defined by the initiator of the ask. Think of a case, where you can ask AI to “build a social networking app that people can share videos and collaborate”. AI can ask couple of questions to understand the need, suggest features and show alternatives, ask the number of users, etc. All software can be developed from scratch, shipped to millions of servers, mobile apps are deployed to the app stores and overall software system is up and running in a few days. AI can ensure by building the mechanisms to ensure the availability by calculating the failure possibilities of the HW systems.
Probably not every market will be replaced in the same speed. Probably the military software will take longer time to be replaced, due classified data and internet access restrictions. Human will need to stay in the loop for safety critical systems for longer time, and AI will need to provide evidence of safety to authorities.
After LLMs’ success, currently there is huge investment in AI technologies comparing to last years. It is very likely that we will see drastic changes in our lives in the next 10–20 years. It is very likely that the need for software engineers — and many more jobs — will be much less in the future. It can either be caused by drastic increase in productivity of software developers or just fully being replaced by the AI. Probably there will be need for humans for a while to ensure that AI enhances to a point that it can improve by itself, since there will not be any new human authored code left.