I’ve been a software engineer long enough to remember when writing code by hand was just writing code. Now agentic delivery is the default, and peers, mentors, and former coworkers all say the same thing: they don’t code by hand anymore. Whether that’s good or bad is a debate for another post — AI in software engineering is here to stay. What matters is recognizing when we’ve leaned on it too hard. Here are some pitfalls I’ve seen firsthand.
Hmm… That first paragraph, those first five sentences, were generated by AI. A powerful AI, but AI nonetheless. Were you able to discern it from normal writing? Was it the em dashes that gave it away? In either case AI is a powerful tool that is being rapidly adopted across several industries. In software engineering specifically, agentic delivery has taken over coding by hand. Many peers, mentors, former coworkers have all lauded AI as the reason they no longer need to code by hand. Some have specifically stated that most of the industry’s raw coding skill has likely atrophied because of the ubiquitous presence of AI coding tools. While coding by hand or not coding by hand can be a separate blog post altogether, we must ultimately recognize the reality that we’re in: AI in software engineering is likely going to stick around for the foreseeable future. With that, we must also recognize when we rely too much on the AI systems, and where those pitfalls are. I’m going to talk about some of them that I’ve seen and experienced.
Losing Sight of the Systems
What I think is the major pitfall when relying too much on AI is that developers tend to lose sight of the systems as a whole. As in, whatever product or infrastructure design a developer is working on at a given time. There have been many PRs or just discussions where developers are unable to explain the code that was put down by the AI. Mind you, it’s not entirely a bad thing, especially if the codebase is already monstrous. However, I’ve seen this happen with greenfield projects where developers end up losing the plot as the AI is piecing things together.
I’ve said and have heard others say that, while needing to write the code is superfluous, understanding the code is now more important than ever. What sets a software engineer apart from a vibe coder is knowing the underlying reasoning, systems, and intent. We now have to look at the big picture more since the AI can take care of syntactical problems. Remember, our job as engineers was hardly typing out the code itself. It’s knowing what the problem is and solving it efficiently, mostly in existing systems that AIs can’t parse without rebuilding everything.
AI Telephone
I heard this term come up recently in regards to email chains in businesses. Essentially, one person would generate an email using AI. The content generated, more often than not, is extremely dense and verbose. Something that, at first glance, a lot of people wouldn’t take a deeper look at. Either because of the verbosity or because they figure out immediately that it’s AI. In which case, the recipient of the AI message then parses the generated content with their own AI for a summary. Essentially, just playing telephone between two people using AI as translators. Personally, I think this is simply inefficient for a task we did manually for years, but this represents a pitfall that most people have fallen into, not just those in the software engineer space.
Why exactly would this be an issue? Well, the AI that most people use are LLMs, large language models. These models don’t necessarily have context with each invocation. So, when trying to parse an email, the AI could change the intent either my misinterpreting or downright hallucinating information in order to satisfy the prompt. As well, since AI has perfect grammar but wrong information, it has distorted peoples’ view on accuracy. For example, some may completely trust AI regardless of its mistakes. While, on the other hand, if a mistake is made another person may immediately claim it’s AI because it got a fact wrong. Using AI for interpersonal communication has slowly begun to erode trust in what’s correct or incorrect. We must recognize that using AI to attempt to cover human mistakes is only going inhibit our growth.
Verbose… but No Substance
I mentioned verbosity in the last section in regards to AI and my goodness… is it verbose. Many responses I see from an AI are usually much too long for me to parse reasonably, especially since a lot of LLM responses are dense with filler words that are unrelated to what I’m trying to analyze. When it comes to PRs or any type of code review, my experience has been mixed. Sometimes, the LLM is able to call out useful corrections. While, on other occasions, the LLM is looping on syntactical nitpicks that do not add value to the project. It’s not an uncommon experience for people to ignore most of what an AI says because it is simply too verbose for a human to read efficiently. This seems to be the case when AI language has specific tells that disengages the reader such as em dashes and extreme semicolon usage.
I’ve found the best results come from when I explicitly prompt the AI to use plain language and to be as succinct/concise as possible. Not just for parsing a codebase, but as well as planning what to build when I get to my next JIRA ticket.
What Can We Do?
The first thing we can do is to be as responsible as possible with this tool. I want to iterate that AI is indeed a tool. It shouldn’t be replacing our day to day tasks or even some of the things we do on the side (Like this blog!) We, as an industry, should be treating AI as fresh new IDE or enhanced intellisense. I see too many younger engineers falling into the AI trap and ultimately lose their ability to think about code and software design critically. Even outside of the software industry, there are many stories of students and younger people losing critical skills because of the overreliance on AI by most industries as a whole.
I’ll leave y’all with some things I keep in mind for responsible AI usage:
- Limit token usage with proper prompts/output
- Always, always always look over the code that the LLM generated. Even if it’s just a small CSS change, check it anyway.
- Read over anything AI outputs instead of using another AI to parse it.
- Communicate with others without the use of AI. It’s okay to not know or understand! Using an AI to cover this will only hurt your growth.
