I'll admit it upfront: setting up proper automated UI testing was one of those tasks I kept bumping down the list. It's not fun in the way building a new feature is fun. Nobody sees it. It doesn't move the app forward, it just quietly stops it from moving backward, which is a much harder thing to feel good about at the end of a day.
I finally sat down and built out a handful of automated flows: the app launching, logging in, getting the wrong password on purpose, that sort of thing. Nothing exotic. The kind of basic coverage that should have existed months earlier, honestly.
And almost immediately, one of those boring little tests found something I'd genuinely never have caught by just using the app: every single API call the app made was hitting a URL with an accidental double slash in it. Not most calls. All of them.
The cause was almost embarrassingly small. One setting had a trailing slash on the end of the app's base web address. Somewhere else, entirely separately, another piece of code was adding its own leading slash onto the front of every request path. Individually, both totally reasonable. Put together, every request went out with two slashes back to back instead of one, and the server had no idea what to do with that. It just said the page didn't exist.
Here's the part that actually got to me: that typo had been sitting there since the app's rename, months earlier. It had never once been caught, because the specific way it broke things looked exactly like a normal login failure. Wrong password, bad connection, whatever, the failure looked plausible enough that nobody stopped to ask why. I'd been testing the app manually the whole time and never once thought to check the raw web address it was actually hitting behind the scenes.
It's a good, slightly humbling reminder about the limits of just "using the thing to test it." You test the paths you expect. A machine, dumbly running the same four steps over and over without getting bored or making assumptions, found in about ten minutes what I'd managed to miss for months.
I'm not going to pretend I now love writing tests. But I've stopped putting it at the bottom of the list.