Let AI handle the tedious parts

• 4 min read

I fell in love with programming early in my life. The first time I built a website and tried to vertically center an image was around the time when Internet Explorer 6 was the latest and greatest. Little did I know that the problem of vertical alignment would take another ten years to be solved.

But how could I have known back then? There was no StackOverflow, only Google and me, 12 years old, not being able to understand all the English websites.

Anyway, it felt magical to me, when I used margin-top: 100px and thought I fixed the problem. Responsive design was fortunately not a thing.

The complexity creep

Nowadays we have way more demands for software. It should handle all the requirements, look good, and be performant. And rightfully so. But after coding for over half of my life, I notice how annoyed I sometimes am about all this complexity that came with it. How many tedious tasks we accumulated along the way. Tooling that doesn’t work or is flaky, sparse documentation, ever-changing frameworks — these are just the tip of the iceberg. You can easily spend more time fighting toolchains than actually shipping. And you know, that I rather love to ship.

But fortunately, things have changed with LLMs in the past few years. They don’t always have the right answer, but damn, what would I have given as a 12-year-old to have an LLM available. I’d have definitely gotten more sleep as a teenager, instead of staying awake debugging my brittle PHP code. Also, while the complexity and demands for software have increased, our tooling hasn’t kept up. Yes, we got better software to collaborate together, better editor integrations with LSPs, autoformatting and linting over the past few years, but that’s pretty much it.

Software developers seem scared that AI will take away our jobs, but it actually has the opportunity to take the tedious parts away. Software ate the world, and it is now cheaper than ever to develop it. On one side, my fear is that this will lead to just more software with a lack of quality. But my hope is that we now have the time to go the extra mile. That LLMs give us that brain capacity to lead to further innovation. And ultimately, this leaves us with the fun parts of programming: designing features and systems, and thinking about delightfulness in the product.

The learning concern

I know it sounds naive, and maybe it is. Because there is also the fear that LLMs will make me worse over time. My belief is that these all-nighter sessions where I debugged my brittle PHP code actually taught me a lot. I learned how to debug, expanded my knowledge, and got more patient. Although friends wouldn’t agree on the latter. So I am wondering how engineers who just get started will be able to handle situations where the LLM can’t help them. How do they learn to debug in-depth problems? I am even guilty of it myself, as I run this blog post through an LLM to fix my grammar and spelling. Does it help me to improve? No, because I just accept the edits as they look good to me. I don’t learn anything by it.

The validation principle

This also brings me to the point where LLMs are useful and where they are scary.

When I know the answer to a problem, or can validate it, it’s perfect to just let AI run with it. In the best case, I gained efficiency. But what if I can’t validate if the solution is correct? What if I just vibe-code away and accept all the results, because I don’t know if the result is correct? Well, once we lose that ability, we should stop and go back to learning. Because, while vibe coding can be fun, vibe coding without knowing what it does, is not engineering.

But I am optimistic. I hope that with LLMs taking away the friction and the tedious parts, we can again focus on the fun, the magical part: creating something out of nothing. That’s the programming I fell in love with, when I tried to vertically align the image on my website. That’s the programming I want to get back to.