Artificial intelligence experienced a massive and still ongoing hype with the release of ChatGPT in November 2022. Especially in the field of software development, it has been attributed significant potential. However, when engaging in pure vibe coding, the limitations quickly become apparent, and it becomes clear that sustainable solutions, particularly in enterprise environments, require more than just generated source code. Where AI truly adds value and where it does not, especially in the day-to-day work of senior developers, is what the following experience report aims to illustrate.

AI Assisted Coding

This is explicitly not about vibe coding. AI-assisted coding focuses on automating programming tasks and offloading work from the developer. The developer remains in the lead, precisely defining the expected outcome and the way it should be achieved.

Code Completion

A simple form of AI-assisted development is code completion. This goes far beyond the previously established variants of auto-completion limited to individual lines. Because the AI model has access to contextual information about the codebase, it can automatically generate entire blocks of code without difficulty. For repetitive tasks such as writing mapping methods or CRUD operations, this significantly reduces the amount of manual typing required. The more generic the requirement, the better the results tend to be, as large amounts of recurring code are well represented in the training data of AI models.

Implementing well-known algorithms also works very effectively due to the available training data. In many cases, it is sufficient to write a method signature and immediately receive a suitable auto-completion suggestion.

Repetitive tasks

Tasks that recur frequently within a codebase are well suited for AI-assisted development. For example, code for CRUD operations and database access can be generated with little effort. The initial implementation, however, should be done manually. This is where all technical details required for the specific use case are worked out. For subsequent tasks, this implementation can be provided to the LLM as a blueprint that it should follow as a reference.

Prompt: Implement a database repository “RolesRepository” for the entity “userrole”. Use the existing implementation of “UsersRepository” as a reference.

Class and method names can also be explicitly defined in the prompt. The more constraints and guidance you provide to an LLM, the lower the likelihood of hallucinations.

Refactorings

For refactorings that go beyond simple renaming, AI can take over many tasks. With clear instructions on what should be changed and what should remain untouched, and with a well-defined scope, the desired result can be achieved very quickly. A high level of test coverage ensures that functionality is not broken after the refactoring.

Approach

To successfully delegate work to an AI agent, requirements must be clearly formulated. In addition to the functional requirements often captured, for example, in a user story, technical details also need to be described. What may previously have been implicit knowledge shared among everyone involved in a software project now has to be made explicit, written down, and made accessible to the LLM.

Developers therefore need to invest more time in writing tasks in a way that allows them to be meaningfully executed by an AI. Here as well, it is advisable to proceed in very small, incremental steps. User stories are broken down into many small technical tasks with a very limited scope. These tasks can then be handed over to the AI for execution. Breaking work down into small tasks also reduces the blast radius an AI can create when it starts making changes across dozens of files. After the AI has implemented all tasks one by one and written dedicated tests for each task, it can open a pull request. The development team must then review the PRs and ensure the quality of the generated code. The requirement still applies that code must not only be correct, but also maintainable. Going forward, we will continue to read more source code than we write. Perhaps to an even greater extent than today.

In addition to individual tasks, technical and domain-specific information about a software system can be provided to an AI in an AGENTS.md file. This file is implicitly read with every prompt and taken into account when generating responses.

Limits of AI Coding

What does not work are one-shot attempts to implement entire features or even to generate complete systems. Even if such approaches produce results, they are usually far away from the desired outcome, the intended architecture, or even the coding guidelines followed by the team.

In some cases, using an AI is not even a time advantage. In agentic mode, an AI can easily spend an hour on a single task that an experienced developer with sufficient project knowledge could have implemented in just a few minutes. The time required to formulate high-quality prompts should also not be underestimated.

Coding is not the Bottleneck

Writing source code itself is not the limiting factor in software development. Even without AI, the actual coding time of senior developers typically accounts for only 30–40% of their work. For this reason, the use of artificial intelligence is not the silver bullet that some may see in it. However, it does shift developers’ work even further away from coding and more toward planning, preparation and review.

For experienced developers, AI tools can be a valuable way to automate simpler and repetitive tasks. For junior developers, this makes it even more important not to rely solely on prompting and vibe coding, but instead to build the experience and expertise required to develop software effectively with the help of AI.