My Journey to Agentic Software Development: Teaching an Old Dog New Tricks

I went from asking simple coding advice from ChatGPT and Gemini to giving Cursor the keys to my AWS account.

My Journey to Agentic Software Development: Teaching an Old Dog New Tricks

In software development, the length of years of experience is never a guarantee of relevance. I constantly find myself defending my title of "Senior/Principal/Director/Whatever fancy title my employer/client gives me" by immersing myself in new-fangled technologies that this field throws right at me. To stay updated, I have to study cloud, blockchain, cryptocurrency, and now agentic software development.

The latest software development trend, letting AI agents do the software development for you, is essentially different from all the other shifts in the industry thus far, in that this one is existential in nature. You either get on board and gain tremendous productivity gains that are admittedly mind-blowing, or you stick to the traditional way of manually coding software and lose your job. In short, we software developers are in a "get in the program or get out" situation.

In this brief journal, I will try to document, in broad strokes, my journey of slowly integrating AI into my software development process.

As a software developer with two decades of professional experience, I am initially suspicious of any program that spits out facts and code. I highly held software development as a craft, and thus believed that software mastery requires 10,000 hours to get it right. Having a tool do in a couple of hours what you used to do in 2 weeks really breaks your brain a bit.

Stage 1: AI as a Smarter Google

When ChatGPT was initially launched in 2022, there was so much media hype that I couldn't ignore it. I tried it as an alternative to Google. Whenever I forget the proper Rails syntax or the name of an algorithm, I fire up ChatGPT, and 90% of the time, I get a satisfactory response. Forgot how to configure the API Gateway in Amazon Web Services properly? Type it in, and the oracle that is ChatGPT might give you sagely advice. Yes, it hallucinated 10% of the time, but the hallucinations were easy to catch, especially because of my specialized knowledge in the field.

It was just too easy, and the odds of getting the correct answer were worth taking. After all, it was straightforward to validate if the answers were correct. If it didn't work, you can try another prompt.

Stage 2: AI as Code AutoComplete

Sometime around 2024, someone suggested that I use Cursor as an Integrated Development Environment (IDE). I gave it a spin, and what struck me initially was a different level of code autocomplete that I had never seen before. Unlike previous autocomplete technologies, this one seemed to understand my intention. Admittedly, I was a bit impressed at this point, so I decided to migrate completely from vanilla VSCode to Cursor, with Gemini Flash 3 as my favorite model.

I was still intentionally ignoring the Agent bar on the right side. My developer pride won't allow any AI to touch my codebase. "I must know every line of all the changes that are introduced to the codebase" was my mantra.

Stage 3: AI as Pair Programmer

After having used Cursor for more than a year, I decided to tinker with the Agent bar to the right. Being true to my mantra of detailed knowledge of every commit, I kept the mode intentionally to "Ask". I was willing to give agents a chance, but my suspicion was still high.

AI Can Help Understand the Codebase

I was very impressed with the Cursor's ability to read a 10-year-old Rails codebase and to make it understandable to me. Before, it would take me a couple of days to have a mental map of the whole codebase to spot where the change should take place. It would also take me several pages of a physical notebook, as I love writing diagrams and graphs. Cursor allowed me to do this in a copule of hours or less. Image that. I can navigate codebases that I have never seen before, and know exactly where to apply changes and where changes are expected to have side effects. Cursor had infinite patience in explaining to me hows, whats, and sometimes whys (if it could be inferred from the codebase), and it could change the angle of explanation in a matter of seconds.

I was slowly giving in to AI agents. Maybe they do amplify productivity.

AI Can Suggest How to Implement Features With Minimal Change and Side Effects

At this point, I still worked with Cursor in "Ask" mode. I was slowly delegating more and more tasks to the Cursor agent. I would ask the agent how to create Feature X with the simplest and least amount of code change and impact, and it would suggest changes to me. I still took the effort to understand what the changes are all about, then copied and pasted the code to retain that feeling of control that I had when coding manually.

That is, of course, until I got tired.

One day, I felt brave enough to toggle the Cursor tab from "Ask" to "Agent", and asked Cursor to implement a simple Feature Y, still with the constraints of producing the simplest and least amount of code change with the least impact to the surrounding code. I felt anchored and confident since I could approve or disapprove each line of code that the Cursor agent wrote. I removed some bits of code and comments that I thought would be a dead giveaway that the majority of the code was AI-generated. Cursor AI comments sometimes could be hilariously and needlessly verbose, so let's remove any evidence.

It passed all the automated tests. It passed human code reviews. It passed QA. It was merged.

Note that there was no official policy of not using AI code with my clients. But deep inside, I wanted to believe that I wrote that code. But no, in retrospect, I did not write that feature. Who am I kidding? The AI agent wrote it, and I simply code-reviewed it, albeit with much more effort and scrutiny than what was warranted.

Stage 4: AI as the Developer, and I as the Product Owner

This is where it got very trippy and wild. As my confidence with AI was steadily increasing, I found myself waking up one day and deciding to fully vibe-code a full greenfield project. Let's not do it in an active professional project to be safe, I told myself.

I thus decided to create the KlaudSol Quiz project with these goals in mind:

  1. Learn how to delegate as much coding as possible to an AI agent. How far can we push AI agents to do real-world software development?
  2. Create quizzes that my kid and I can answer wherever we go. It must run on both web and mobile. It must be stupidly simple and intuitive.
  3. Double down with my expertise in Ruby on Rails. It must run on AWS Lambda. I must incur zero additional cost for this project (not a peso must be spent on pet projects). Reuse my existing PostgreSQL that is running on Hetzner.

KlaudSol Quiz, running on Rails, Lamby, and AWS Lambda

Holy Shit, It Worked

To give you some context, here is my working environment:

  • MacBook Air M1 8GB (nope, this is just a thin client; not running anything serious here)
  • Hetzner Linux development machine (the real workhorse)

This is the architecture of the application is as follows:

  • Ruby on Rails 8
  • PostgreSQL 17 on an existing Hetzner machine
  • Lamby to enable Rails deployment to AWS Lambda
  • CloudFront to handle HTTPS and HTTP
  • Cognito with Google OAuth for Authentication (I hate logging in via passwords)
  • EventBridge to keep our Lambda warm (pings every 2 minutes)

The first order of the day was to configure Cursor so that it would have admin access to AWS to do what needs to be done. I also gave the Cursor agent sudo access to the development machine so that it would be free to install whatever tools it deemed necessary.

We began. The conversation was back and forth in a steady rhythm. I was prompted mostly by approvals, but this time, I was more lenient and trusting. The agent had an amazing ability to do trial and error, in minutes that would take me hours or even days if I were to set it up manually.

Everything was so fast. Everything was a blur.

In less than 2 hours, we were done. We deployed a greenfield Rails-based serverless Quiz application on AWS Lambda, complete with Cognito Google OAuth, SSL certificates, HTTPS to HTTP redirection, proper Route 53 entries, and an EventBridge-based "warmup pinger" that pings every 2 minutes. All features up to tee to my specifications.

Holy shit.

Holy Shit, I Migrated Django Database Into Rails In One Shot

Shit, It Worked

I was so mindblown, but nothing would prepare me for what comes next.

At this point, the Quiz application has been generously populated by Cursor with three 5-question quizzes. In essence, nothing useful and thus empty. I had an existing Quiz pet project (https://pisayreviewer.com) written in Django that I had meant to rewrite to Rails for quite some time now. I saw an opportunity.

Not really expecting any success whatsoever (just like Tony Stark when he asked his AI to tinker with his Möbius strip), I told Cursor something like this (not the actual prompt):

"Here are the database credentials of the Rails database, and here is for the Django database. Study the database structures and take note of them. Migrate the database from Django to Rails."

Holy mother of all that is good, it worked sufficiently well. It would have probably taken me a day if done manually. It took Cursor seconds.

Where is Software Development Headed Afterwards?

I have seen the software development field transform from coding handcrafted solutions to managing and code reviewing solutions of AI agents. The implications of this seismic shift, whether positive, negative, or a mixture of both, warrant a whole article or two by itself.

My personal emotions on the topic would require another set of blog posts, though. Was I deeply impressed with how AI technology has progressed? Yes. Was I deeply concerned with the already bad software development job market that we have? Definitely. Were these advances for the greater good of humanity? Only time will tell, I guess.

Did you follow the same path as I did? What did you do differently? Let me know by commenting below.