When I started using ChatGPT, I kind of expected it to be useful to save some time on some of my more simple and cumbersome daily tasks, the kind you would gladly hand over to a junior developer. Instead, over the weeks it became clear to me that the successor of what is still seen as a sort of smart, funny poem generator by many, will likely also be capable of handling a great deal of my much more complex work. It might even do most of it before the end of the decade.
In this blog post, I will write about how I used ChatGPT and what it taught me about the role of AI in the future of software development and consulting.
So first things first, OpenAI’s GPT is a so-called large language model (LLM) which was trained on a massive amount of text data. It understands human language as well as programming languages to the point that one can actually use its chat-like user interface ChatGPT to ask follow-up questions, talk to it and even argue with it. I will not go into more details, because there are already lots of resources out there and if you don’t know what ChatGPT is, I suggest you visit chat.openai.com and ask ChatGPT itself.
Where I started: Googling stuff feels outdated
My first approach was to use ChatGPT during coding tasks. Since we also implement the architectures we design for our clients systems, quite some time goes into researching how to implement certain technologies and frameworks or how to use certain public APIs.
So basically I understood ChatGPT as some kind of expert in everything: Say I am stuck at a specific problem. I used to google it, trying to figure it out by myself before I would succeed or bother one of my colleagues for their expertise on the subject. Now I would simply ask ChatGPT, my expert colleague, for everything and it would give me the answers, including code and explanations. Within seconds, it would do what would often take me hours using Google, Stack Overflow, and documentations: Gather information, contextualize it, apply it to my specific problem and generate some sample code. If something wasn’t clear or didn’t meet my expectations, I would simply ask it what it needs to improve its response. Googling stuff suddenly felt pretty outdated.
Of course, right now, ChatGPTs answers have their limits and its expertise is not yet comparable to that of my colleagues. But in many specific areas it’s well beyond my own.
And I keep thinking about something a colleague said about it: The AI we have today is the least capable we will ever have.
What may come
By using ChatGPT for several weeks, I started to feel what a game changer this technology and future LLM based AIs will be. It’s not only that ChatGPT understands human language and programming languages and seems to be able to easily translate between them. It will also tell you why it did certain things or if something is logically impossible.
Using my own words, I was able to provide business logic and ChatGPT would understand it to the point that it was capable of putting it into code.
If that worked, I asked myself, what other tasks of mine will this technology take care of in the future?
Documentation and Knowledge Transfer
To start with an obvious one: If we feed our codebase to a Large Language Model, it should be able to derive human-readable code documentation. This might not be perfect in the beginning, but let’s face it, most code isn’t documented well and we would certainly be thankful to pass this task to an AI. Moreover, once the LLM understood the code, it would be able to answer questions about it, making your documentation dynamic.
A frequent and very time-consuming task is knowledge transfer if a new team member is onboarded to the project or if one of the seniors leaves. Although some human to human knowledge transfer might still be needed and meaningful, imagine the time and money saved if a new team member would have around-the-clock access to an AI that will answer questions about the architecture and codebase. Provide the LLM access to your version history and ticket management system and it will probably be able to even explain what architecture decisions were made and why.
Code Generation? Service Generation!
Given some plain text explanations about what kind of CRUD service I would like to implement, ChatGPT was already able to generate data models, API specifications and code, using my favorite language and framework. It’s easy to imagine that in the very near future, an AI will be able to spit out a code repository containing a whole service, or be able to join or split existing services along some API definition. And if that works, what stops it from generating and deploying a whole system from domain logic specifications. At first, this may not work for the more complex and sophisticated systems most of our clients are building. But there is a smooth path of small improvements from a basic CRUD system architecture to more complex applications. Unlike current code generators, ChatGPT works iteratively. You start out with a state and then proceed to explain the changes you would like it to make to your code or text. Much like developers and product owners refine and extend their software today.
Code reviews, analysis and performance improvements
An AI that understands code should be able to analyze it and point developers to poor code quality, unused code, mistakes, nested loops or other issues that may cause poor performance or unintended behavior. Tools for these kinds of tasks are already in the wild and used by developers.
We often also understand tests as a form of documentation of our application. In a best world scenario, every feature and functionality of our application should be covered by a test and a good test documents the desired behavior of some piece of code. But writing these tests often takes a lot of time. In many cases, adjusting tests is even more time consuming than making the desired change in the code itself. An AI that is able to understand the business logic of our application and generate the code expressing it should therefore also be able to generate meaningful tests or improve the ones we already have. We might be able to tell an LLM to change the behavior of a service and it should be able to adjust tests accordingly.
Modernizing Legacy Systems
This is a big one. A significant part of our clients hire us to modernize the hard to maintain legacy systems that are a very important part of their company’s business. To some great extent, ChatGPT today is already able to understand code in one programming language and translate it into another programming language, architecture or web framework. Obviously, the modernization of a legacy system is about much more than that. But having tried the technology so far, I have no doubt that future AI systems will soon be able to analyze legacy systems, break them apart and apply new architectural principles. A lot of the work we do in a process like that is, after all, also oriented on a set of processes and design principles. Again, most systems we see today are likely too complicated to be handled by a system like ChatGPT. But we also see LLMs advance exponentially, and the path to a fully autonomous legacy rebuild might be smooth: We might first see different AI tools to help us with single aspects of this process, as I argued above, before all of these tools will be tied together.
There are obviously risks and problems in applying AI to your problems. A very important peril is that a large language model like ChatGPT might present you something as a fact that is totally false. According to their nature, LLMs are word predicting machines. Their only job is to produce text according to some seed. Although its output is mostly factually correct (and it’s getting better by the day), fact checking is currently not necessarily a part of an LLMs job description.
Keep your secrets!
Many of the approaches discussed so far have a common problem that might turn out to be difficult to overcome. In many companies, the code base is an implementation and reflection of all their business processes and secrets. Feeding this to an AI owned by another company isn’t something business owners will want to do easily. Actual secrets like tokens and passwords would also be read and stored by another entity. But a solution or a change of mind is not off the table: Businesses might make use of intelligent systems to design or redesign just parts of their infrastructure. And even today, they readily share a lot of their crucial business processes with other companies, like external contractors and consultants. Eventually, the cost pressure might grow too big and the promise to have their codebase or architecture redesigned in weeks instead of years might prove to be too good to resist. This problem will definitely be a most interesting challenge for businesses and their IT departments.
How AI will replace my job
So what does that mean for my job? AI will certainly help me to get rid of some of my more cumbersome and time-consuming tasks. But the more I work with it, the more obvious it becomes that it will also replace me in many areas that I currently consider to be the core of my job. It will not happen instantly and not all at once. Even if an AI is capable of writing your tests and redesigning a critical system, no one will deploy it without human checks and interactions.
But LLMs are growing exponentially and remember:
The AI we have today is the least capable we will ever have.
It is exceptionally difficult to predict exactly how AI will change the way we work, which parts of which jobs it will replace and what’s going to be left over for developers and consultants. So far, I think there are a few ways to stay on top of the current development. Most importantly, don’t brush it off. These things will come and they will come quicker than we expect them to.
For now, the best thing I think I can do is to start explicitly using AI in my work and life. I try to keep tools like ChatGPT on my mind and playfully apply them to many of my problems from coding to writing emails, to asking for its opinion or recommendations. This way I can understand its language, powers, and limitations and start to get an idea of what my future job might look like.