DEV Community

Ian Knighton
Ian Knighton

Posted on • Originally published at ianknighton.com on

I Vibe Coded...AMA

There is a time and a place to talk about the various levels of damage that AI is causing. There is also a time and a place to acknowledge that we can't let the genie out of the bottle and no matter how much you resist, it will be part of your life henceforth and you better know how it works.

I've been in the industry long enough to have seen this time and time again.

That all said, I decided I would take a crack at "vibe coding" a tool that I needed to flesh out some stuff at work and I want to talk about the experience.

It's easy, but not simple.

Yes, if you have the correct tools and IDE and licenses and whatever you can basically say "hey, I need a thing that does a thing" and it will go and it will get you 90% of the way there. That 90% is probably adequate for most people.

The last 10% can be a bit of a slog.

In the test case, I needed to be able to validate a JSON string could be encoded and decoded in Go. The base output from the first prompt mostly did that. It didn't take me long to start finding edge cases.

What happens if there's a special character?

What happens if the file is incorrectly formatted?

Can the output be minified?

These are all considerations that someone with the amount of experience I have are going to want to resolve as quickly as possible as we know that those cases aren't really that close to the edge. They're things that are going to have to be resolved.

Again, the tool will you you 90% of the way there. So, because of diminishing returns, you're at 99% of the way there. So yeah, you're probably in a pretty good place, but you're not 100%.

Scope creep.

So you started with this simple idea and then as you started working and solving little test cases, you started also seeing features that were missing.

This is scope creep.

So yeah, I have a tool that will take JSON output JSON. It has some tests and it probably passes the low bar we set for it.

This is where I think the "vibes" start to kind of fall apart.

You have to start knowing that you're asking for, what that means, and what the ramifications are to your existing code.

You want to add base64 encoding? That's doable...but you first need to know how to prompt for that, how to work with the agent to add that functionality, and then how to validate that the testing works in both directions. At that juncture, you have to have an understanding of the language you're working in and where all of the knock-ons are.

So yes, the AI agent can write the code and write some tests, but you have to be able to validate the code works and that the tests are actually valuable.

It's a junior engineer.

The datasets are trained off of public code. Public code isn't "enterprise" and it inherently carries with it some standards that you may not see in an enterprise environment.

This can be a real issue if you're working on a tool for an enterprise environment.

We walked it through all of the tests and all of the functionality and we've made sure that it's all valid.

Did it update the documentation?

Did it add the necessary CI/CD steps?

Are there any comments in the code that explains what it's doing?

Again...it gets you there...but you have to know all of these other things are there and what to check for on them.

In summary.

I'm all for democratizing creativity in any way possible. I don't like the environmental toll that this is taking and the lack of any regulation around it, but I also realize that's a fight that I can't sway in either way.

The ultimate questions are these:

Will it get the job done?

Will I use it going forward?

To answer the first...I think I've kind of already done that. I think if you know how to ask the questions and what questions to ask, you can probably get to 99% and just stay at 99%. That's the case for a lot of development work. The thing is that you need to know how to ask those questions and what questions to ask.

The second question is...probably? Honestly, I don't really know. It was nice to kind of offload some of this, but I still had to be engaged with the window in order to permit it to run tests and things. I still had to handle all of the source control and then test it on my own to find the cases that the tests may have missed. I probably could have made it to the same place just using Copilot in VS Code, but I was able to do this asynchronously, which I guess was nice.

There...now I've talked about vibe coding and, eventually, this post will be on LinkedIn which will check some set of arbitrary boxes for the modern software engineer.

Top comments (0)