What I learned from 'Vibe Coding'
Vibe coding is one of those topics that people have incredibly strong opinions about. On one side, you have people who are deeply passionate about agentic systems, which is understandable: the exponential growth of these systems in the past few years—or even just months—has been nothing short of incredible. On the other hand, there are people who are passionately against them, which is equally understandable. The generated code is often still not reliable enough for a medium-sized project, and it has historically been virtually impossible to ask AI to interact with any codebase of a reasonable size.
I used to be closer to the latter camp. I was skeptical that a system that couldn’t even do basic autocomplete could actually do my job. But these systems are getting better—significantly better. Now, I am convinced that the future of coding will look very different.
So, I am here to share some of my experiences with “vibe coding” and how it has completely changed the way I approach programming.
You Can Just Do Things Now
In the past, even though I had worked on a couple of relatively large projects, I always had a bit of fear when starting a new one. Fundamentally, I didn’t want to maintain a large codebase for virtually no audience.
That mindset wasn’t ideal, because there were many programs I wished existed but ultimately didn’t. One such project was an Android client for Memos.
How I Vibe Coded MemosM
While MemosM isn’t exactly the first project that I vibe coded, it is my first public project that only exists because of agentic systems.
To give some background, Memos is a FOSS note-taking application with a UI similar to Twitter, which I find very helpful for encouraging me to write things down. I’ve personally been using it for a couple of years, but my experience hasn’t been entirely positive. I had two main issues with Memos:
- Unstable API: It changes all the time for no apparent reason. It also nuked my database once, so I would say their engineering practices are subpar.
- Lack of an Official Client: There are third-party options, like MoeMemos, but because they are unofficial, they also break all the time.
Over time, MoeMemos kept getting worse. It used to be reasonably fast, but around last year, it became unusably slow just to open. I finally had enough and decided to take things into my own hands. That’s how the MemosM project started.
The MemosM project was supposed to be a bare-minimum implementation of the Memos API: I wanted to see some notes, and I wanted to be able to push new notes. That’s it. I didn’t care about reactions, local caching, editing, markdown, or any of the other features.
It sounded like an incredibly easy project—actually, way too easy, because it is basically just a TODO list app. I wasn’t expecting to learn anything new, and the scope was intentionally small. I thought I could vibe code it in a day or so, and I did. I had a functional app with note-taking abilities within the first few hours of opening Android Studio.
But then I thought it would be nice to have a login screen…
And then I thought it would be nice to support the comment section…
And then I thought it would be nice to have a profile page…
And then I thought it would be nice to have multi-account support…
Before I knew it, my app had strictly more features than MoeMemos. My initial plan was just to have a fast, lite client for small stuff and handle the actual writing on the web. The crazy thing is: I didn’t write a single line of code.
I just described what I wanted, provided some context to the LLM, and it just did it. I reached that feature-rich point within the first week of the project. I now maintain an Android project that is significantly more complicated than the app I set out to replace.
When you look at apps like MoeMemos, you realize it must have cost the developer a massive amount of time to build. But today, you can actually just vibe code a significantly more complicated app from scratch.
I also learned so much about Android development along the way. I didn’t even know Android had functional components (like Jetpack Compose) before this. I had never touched Kotlin. I knew some basic Android concepts like Room and Gradle, and that was it.
People like Jonathan Blow and Casey Muratori might argue that modern toolchains introduce unnecessary complexities. But as a user, I always enjoy the feel of a “native app,” even if there’s no deep technical reason why the official toolchain is strictly better.
Vibe Coding the Lytro Driver
I bought a Lytro camera a few years ago, but I was unable to get the photos out of it because they are stored in a very weird format, and my Linux PC didn’t have a working client for it. Wine didn’t work either.
Someone had written a Linux client a while back, but I couldn’t get it to run. The codebase was simply too old, and the bit rot was too severe.
So, I asked ChatGPT Codex to migrate that old code to Python, and it works. Like, it just works.
I am sure this isn’t incredibly hard to code. It isn’t doing anything groundbreaking, and after all, it was just translating an existing implementation. But it is still crazy how seamlessly it succeeded.
There are so many old projects out there written for poorly supported platforms that require highly specific dependencies. Mountains of technical debt used to make me highly cynical about the future of programming—code that no one could afford to pay down. But now, with AI, you can pretty much vibe port anything to a modern, supported language.
Closing Thoughts
The programming landscape is going to be very different, and I think everyone who is paying attention knows that.
More and more software companies will be forced to transition to providing “services” as opposed to “software.” This was already a trend, but AI is going to accelerate it significantly. I have a strong feeling that the future of programming will be like clothes—software will become incredibly cheap to produce, and people will just tailor new, disposable, bespoke software for their own personal needs.
Today, if you want a hyper-specific photo filter, you might need to know Photoshop. Tomorrow, you can just ask an AI. In the past, there were many domains I didn’t want to touch (like native Android development) because I couldn’t justify the time investment. Suddenly, those domains are entirely accessible.
I think more and more people will become interested in programming. I hope that is a good thing. AI is only getting better from here.