Why “It Works” Isn’t Proof It’s Safe
The happy-path trap almost every vibe coder falls into — usually once, the hard way You know that moment. You click the button. The thing happens. The data shows up exactly where it should. Your chest does that little
The happy-path trap almost every vibe coder falls into — usually once, the hard way
You know that moment.
You click the button.
The thing happens.
The data shows up exactly where it should.
Your chest does that little relieved-proud thing. It works!
Here’s the uncomfortable truth: that feeling is proof of exactly one thing.
It works when you — the person who built it — use it the way you intended, logged in as yourself. That’s it. That’s all it proves.
You’ve seen this movie before, just in a different building
If you’ve spent time in IT, you already know this trap.
It just wore a different uniform.
A firewall rule that “works” because traffic from your own laptop sails through tells you nothing about what happens from somewhere you didn’t expect. Testing an office door lock with your own keycard tells you nothing about whether it actually refuses a card that shouldn’t work.
You wouldn’t sign off on either of those based on one clean test from your own seat. So why would your app be any different?
The mindset shift, in one sentence
Stop asking “does this work?”
Start asking “what happens when someone tries to make it not work, on purpose?”
That single sentence is the difference between an app that feels done and an app that actually is. And it’s a shift, not a skill — you don’t need to learn anything new to make it. You just need to remember to ask the second question.
Happy-path testing vs. the test that actually matters
Happy-path testing is you, logged in as yourself, clicking through the app the way you built it to be clicked through. Expected inputs.
One request at a time. It always looks great, because you designed it to look great for exactly this path.
Adversarial testing is different. It’s logging in as a second, unprivileged account and trying to see what you shouldn’t. It’s editing a request directly — the same instinct as testing an ACL. It’s throwing blank fields, huge inputs, and wrong values at it on purpose, just to see what breaks.
You don’t need to write a single line of code for this.
A second free email address and your browser’s built-in developer tools — already sitting there, no install required — are the entire toolkit.
Why your AI tool won’t catch this for you
Here’s the part that catches people off guard.
Ask your AI tool for a feature, and it builds exactly that feature.
Nothing more.
It won’t volunteer “you should probably check who else can see this,” any more than a brand-new help-desk hire thinks to ask “should there be a limit on reset attempts?” unless someone already wrote that into the process. AI is fast, capable, and confident — and completely silent about the door it left wide open on the way out.
That’s not a flaw you fix by reading more code.
It’s a follow-up question you have to remember to ask, every single time.
The one tool that does 80% of the work
Every browser has a panel showing every request your app makes, and exactly what comes back. Right-click, Inspect, Network tab. That’s it.

Do the thing you’re testing. Read the number that comes back.
200 means it worked.
401 means you’re not logged in.
403 means you’re logged in, but blocked — usually a good sign.
500 means something broke on the server.
Open it, click the thing, read the number. That’s the whole skill. It’s the same instinct as checking a ping result or a packet capture — just pointed at a browser instead of a network.
The quick, honest gut check
Have you ever logged in as a second test account and tried to view the first account’s data? Have you opened the Network tab and actually watched a request happen? Have you asked your AI tool “who’s allowed to call this, and how would you check that?” — not just “does this work?”
If most of those are unchecked right now, that’s completely normal.
It’s also exactly the gap worth closing before you tell anyone the link is live.
The version of you on the other side of this
Picture shipping something and actually meaning it when you say “it’s solid.” Not crossed fingers. Not “it worked when I tried it.”
Actual, tested, I-tried-to-break-this-myself confidence.
That’s the difference between someone who got lucky and someone who builds like they know what they’re doing. The tools are the same either way. The only thing that changes is whether you remember to ask the second question.
Ship it. Then go try to break it yourself, before someone else does it for you.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.