Your app worked great the day you finished it.
Then you added something new.. a feature, a tweak, a small improvement. And somewhere else in the app, quietly, something else stopped working.
You didn't know. Your team didn't know.
Your users found it.
Here's the thing about software that nobody in the vibe coding world talks about enough.
Every time you touch your app, you're not just adding something. You're changing something. And the app is a connected system.. pull one thread, and sometimes something on the other side of the room moves.
The longer you maintain an app, the more times you touch it. The more times you touch it, the more opportunities there are for something to quietly break.
This is just the nature of software. Every developer on the planet deals with it.
The answer is end-to-end testing.
An end-to-end test is a script that plays your app like a user would. It opens a browser, navigates your app, clicks the things a real person would click, and checks that what's supposed to happen.. actually happens.
Here are some things worth testing in any web app:
Can someone log in?
Does a wrong password correctly get rejected?
Does a badly formatted email address get flagged before submission?
After logging in, do they land on the right screen?
Can they complete the main thing your app exists to do?
That last one matters most. Whatever your app's core job is.. test the whole thing, start to finish. Follow it all the way through. A "success" message on screen doesn't mean the data ended up where it was supposed to.
Also test the weird stuff. What happens when someone clicks the submit button twice? What happens when someone pastes a paragraph of text into a field that expects a zip code? Real users do this. Your app needs to handle it gracefully.
Playwright is the tool I use for this. It's a browser testing framework that's become something of a standard. The reason I like it right now is that AI coding tools know it well.. which means you can describe the test you want in plain language and get working code back pretty fast.
You don't need 100 tests to start. Five solid ones that cover your core user flows will tell you an enormous amount.
And here's something people don't expect: your test suite also becomes documentation. When you start a new AI session and feed it your passing tests, it immediately understands what your app is supposed to do. That context is gold.
Every change you make to your app carries some risk. That's not a problem you can eliminate. But testing means the risk gets caught before your users do.
That's the shift. Every update stops being a small act of faith and starts being a controlled, verified event.
Build that net early. It gets harder to add later.
🚀
- James