It started with an innocent question: “Do you know of a cheap product that will make walk lists?”
We’ve had down-ballot candidates or organizations without big budgets. They couldn’t afford the full campaign software suite for planning door knocking. For those clients, we used to build walk lists by hand by obtaining the voter file, geo-coding it, maping it in QGIS, selecting points or neighborhoods, exporting them, then running a script to group and ordering them. It was tedious. It was brittle. And because we didn’t do it often, each time was a painful one-off.
So when I got that call, I thought: Let’s see if I can code this…
A Brief Word About My “Coding” Background
I am not a coder. Not in any real sense.
My parents always made sure we had a computer in the house starting with a VIC-20, then a Commodore 64. I dabbled in BASIC. I could make sprites dance. I even briefly thought about majoring in CS. (Then I took a class.)
Professionally, I’ve played with databases and large datasets. I would call myself an advanced Excel user, with some Visual Basic and Access experience.
But most of my experience comes from project management and supervising coders via web development or other projects for clients. This normally consisted of these developers telling me that I couldn’t do something that I wanted to do, or that something I wanted to do was outrageous, or finally that I don’t understand logic and was an idiot. All fair points.
Still, I’ve worked with talented coders who tolerated me, answered my silly questions, and taught me that what seems like a small change often isn’t. I’ve learned that time spent up front saves money later.
I’ve helped build websites and know my way around servers and command lines (with notes). I’ve set up shared and cloud servers. Most of my experience is in WordPress, but I’ve touched Django and other frameworks. I know what GitHub, MySQL, PHP, JavaScript, CSS, HTML, <div>, JSON, and APIs are. So, the basics.
Most of my true coding has been in Stata, SPSS, and now primarily in R. On weekends, I’m teaching myself Python. I despise Docker.
So while I’m not new, I’m not fluent either. When coding, I live on Google / Stack Overflow. I type poorly. I lose hours to a missing brackets and semicolons. I can get something working, but it’s not optimized.
I’m like the drunk tourist in Berlin at a bier garden who thinks he’s fluent in German but really sounds like a four-year-old.
So, of course, my first thought: Let’s see if I can code this…
The Prototype
What I did Well
Before writing a single line of code, I sat down with AI and scoped the project. I chose PHP and MySQL because I had some familiarity with them. I told the AI, “Ask me everything you need to write a complete scope document.” We spent over three hours working through data flow, variable names, libraries, and frameworks.
That scope document became my north star. Best decision I made.
What I Learned the Hard Way
I learned very quickly a coding AI agent is extremely eager to spit out code. Annoyingly eager. An AI agent will make wild assumptions about variable names, other files called by the code, and just other random assumptions and just start spitting out code! LOTS OF CODE.
I learn very quickly to give the AI agent instructions NOT to generate a line of code unless it has presented me with a plan and I explicitly typed a “GO” word, then and only then was it to generate code.
The plan presented would often contain areas where I was unclear, or contained assumptions made by the AI agent that were incorrect. This turned out to be, at least for me, instrumental in increasing my knowledge and training me better on how to communicate about code.
Even with these explicit instructions, the model would often ignore the instructions and just start spitting out code. Lots of code. It would acknowledge it broke the terms, but even then at times the Agent itself would generate the required plan and then immediately type my own GO word after the plan and start spitting out code. Lots of code.
Hundreds of thousands of tokens were likely wasted.
An AI coding agent will get caught in loops – especially when debugging. It will try something, it will fail, it will try something else, it will fail, then it will return to the first thing it tried. Repeat.
One major trick I learned: AI coding agents seem to love debugging another Agent’s code, and they excel at this. Playing models off each other was invaluable and would oftenbreak the cycle.
The other thing I learned to insist on is for the AI agent to stop guessing at what they believe/know the bug to be, but rather to STOP all code generation and come up with a systematic plan to debug the problem.
Nine times out of ten, the “obvious” bug was a red herring uncovered by a debugging process.
Another annoying thing – line numbers never matched. If the AI agent said “Replace line 121” it was +- 20 lines.
Another annoying thing, REALLY annoying quirk, it would write something like “Replace your entire file with the following code.” You would do that, save it, and then realize some places in the code were commented … ‘lines x to y remain unchanged’ and entire blocks of code from x to y were missing. That is not a full replacement.
I learned this the hard way when one night, I did just that before shutting down. The next morning, the file was wrecked, and I had to rebuild it from scratch.
This error happened often. Anytime AI writes, “replace the entire file”, you best not blindly just not do that.
Also, the AI agent is remarkably over-confident and borderline arrogant. Often writing “This is the definitive fix”. In fact, it was not, and it was annoying after a while.
(But…..it is kinda like working with a lot of real developers, but I digress.)
The AI agent is wildly wrong at times. One truly bizarre moment: the AI agent asked me to provide a zip file of my complete code base. I did so, and then the AI agent complimented my code base and then described …. someone else’s project. It laid out a messaging app with a file structure and data flow that had nothing to do with what I was building. It was abrupt and unnerving.
The biggest pain point came in debugging the AI’s insistence that we use a specific javascript library that has been discontinued and is no longer in existance. The problem it was deprecated after the knowledge cut-off date of AI.
This simple ‘bug’ took me a half day to work thorough. Web searches, poisoned by AI-generated answers, agreed with the outdated recommendation and it would “absolutely be the fix and work.”
In the end, I had to find the new version on GitHub, build it, and host it locally.
EVEN after I provided it to AI, AI would still insist the old one was valid and attempt to use it. This one “little” thing was a nightmare. I found myself aggressively typing:
“NO, I ABSOLUTELY MANDATE YOU USE THIS ONE AND STOP WITH YOUR INSISTENCE ON VERSION x. YOU ARE INCORRECT DAMN IT! FOR THE LOVE OF GOD AND EVERYTHING HOLY – STOP IT!!!!”
The knowledge cutoff date is critical. I ran into this issue mutiple times. As another example on a different project, the google civic api has been discontinued, but the AI agent (even Google’s own agent) insisted we use it and that it was valid.
The Result
I had a working prototype in three days.
At times, it was painful, frustrating, and often exasperating.
Did AI help? Absolutely.
Can AI find a missing bracket in a split second that would have taken me an hour to find? Yes.
Did it let me code way above my weight class? Without question.
Did I learn a ton? Yes.
Did I have to supervise it like a drunk intern? Absolutely, 100%, without a question.
If you have some background and spend time up front scoping the project, AI is a true force multiplier. Without it, building this prototype would have required hiring a pro. Period. (For reference: I can read JavaScript, sort of, but I would never write it from scratch.)
Could a True Beginner Do It?
Probably not. I had to know enough to recognize outdated libraries, write SQL queries, and troubleshoot broken logic. That base knowledge made it possible to fight through the mess.
But if you know just enough and you’re willing to plan carefully? The possibilities are opening up. In five years, this will be wild.
Is “vibe coding” a thing? Not really. But “vibe scoping” and “vibe project management” might be where the magic happens. My recommendation: Learn those skills rather than syntax.