Bad vibes

AI

31 Mar 2025

Related project

Growth is a curious thing. Never before have we had such freely available access to growth enhancing tools, and never before has expertise been at real risk of irrelevance with the coming wave of AI. This isn’t a criticism as there are benefits to both sides. AI tools lower the barrier of entry to a number of specialist disciplines while simultaneously requiring prompt expertise to fully take advantage of the multi-disciplinary model or agent. In the product development world the transition of expertise from practical coding knowledge to creative AI prompt generation has a name; Vibe Coding.

In the continuation of my journey into iOS development, I’ve hit a moral conundrum; learn Swift concepts to fully understand the code or shortcut development and embrace the Vibe. While I realise that not every decision has to be a polar one, my lack of developer experience magnetically guides me to a figurative North Pole where progress is slow but the hope of growth is frozen in its tracks.

This brings us to my experience when trying to Vibe Code a bar chart for Units. Previous to the chart work, I was making good progress with some AI influence, but mostly forging my own path. I was comfortable with my approach and felt like I was learning. However, three weeks ago I created a branch to build my first chart that summed the units for all drinks over various time periods with a segmented picker to switch between different date ranges. Imagine my delight when Claude generated a working chart using MVVM with a total of 547 lines across 3 files. The result even had extra elements I didn’t ask for such as a weekly summary and an animated progress bar that changes colour when the unit count exceeds a recommended amount of 14 units. Colour me impressed.

However, an underlying feeling of failure was niggling at me. While I could somewhat interrogate the code and largely appreciate what was going on, there was enough doubt for me to feel an unhealthy level of discomfort. Not to mention a small amount of intuition that a similar result could be achieved with much fewer lines of code. I’d seen tutorials where the charts framework magically inferred context with single modifiers and low effort. Claude’s code felt like the opposite of that.

That’s when the frustration set in. Since the initial result, I’ve spent over 20 hours in 18 different Claude threads trying to get to the simplest result. Every prompt since, no matter how much I tried to encourage simplicity, rendered an overly complex solution. Suggestions included repeated code blocks, creating a struct that held a single use array to then inject into the chart, and a combination of predicates and fetch descriptors that seem to complicate things further. I didn’t know they were bloated, they just felt it, and my lack of experience couldn’t clarify why. 

Meanwhile, my concern over the accuracy and verboseness of the code coincided with some general negative press towards vibe coding. Social media started to surface issues such as database credentials being exposedbuilders being attacked, and Github turning into a free-for-all platform for API keys

My app is small fry in comparison and doesn’t use API keys, but the incidents and my skepticism were enough to re-evaluate my strategy. So this weekend I did something crazy. I opened my SwiftData book and started from scratch. 

With dedication and some patience, 3 hours later I’d created a working version of my chart, all in ~250 lines of code. Every piece was written by me, and I understand it all. Every last bit. The sense of pride and achievement reminded why I was doing this in the first place.

So, what have I learnt? Vibe coding is in our vernacular now, and regardless of how deeply irritating I find the term, it’s allowing would-be founders to build real products in a fraction of the time...and that’s exciting. However, I’m taking a different approach; using restraint with AI and focusing on what matters to me. Yes, I want to ship an app this year, but not at the expense of personal growth. 

The fact I’m learning to code at a time where AI is accelerating the ability to ship with less domain knowledge isn’t lost on me, but my goals are different. I’m not aiming to build an app in 24 hours that generates £10,000 MRR by month three, although granted that would be nice, I want to build something I’m proud of with my own two hands. It’s my knitting, my pottery, my forced rhubarb, and I’m ok with that. Maybe my efforts will be wasted in two years time when AI can make enterprise software just by reading minds, but that’s a risk I’m willing to take. I’ve certainly wasted time on worse things.