The Button That Broke Me
A few hours into building Hat Trick, I hit the kind of bug that sounds tiny when you describe it later.
At the time, it nearly broke me.
I was working on the fantasy league side of the app. This was already a questionable life choice, because the project had started as soccer trivia and somehow, within the same day, I had talked myself into building a full fantasy league platform too.
I clicked into the fantasy area, filled out the account form, and hit Create account.
Nothing happened.
No message. No movement. No “we’re working on it.” No “check your email.” Just the same screen staring back at me like I had insulted it.
So I did what any calm, technically mature person would do.
I clicked it again.
Still nothing.
I clicked it again.
Then the app finally spoke to me, but not in a helpful way. Red text appeared telling me to wait 49 seconds.
That was the moment my stomach dropped. In my head, this meant the account system was broken. Not slightly broken. Properly broken. The kind of broken where you start wondering if you’ve built a house on wet cardboard.
I remember thinking, “Great. I can make the homepage look like a Champions League broadcast, but nobody can actually sign up.”
This dragged on longer than it should have because I didn’t understand what I was looking at. From my side, the button did nothing, then punished me for trying again. That felt absurd.
I kept trying to explain it to the AI in my very non-technical way: create account in fantasy doesn’t work. I click it and nothing happens. Then I get this wait message.
The AI eventually explained what was actually happening.
The account creation wasn’t failing.
The backend (the behind-the-scenes part that does the work) was doing its job. It was sending the confirmation email. The app just wasn’t telling me.
There was no loading state. In plain English, that means nothing changed on the screen to show the app was busy. There was no success message either. No “check your email.” No “we sent you a link.” Nothing.
So I kept pressing the button because, to a normal human being, silence means failure.
Then another hidden system kicked in: the rate limiter. That’s basically a safety feature that says, “Stop hammering this button, please.” It locked me out for a short time, which is why I got the red text telling me to wait 49 seconds.
So the whole mess was not one dramatic technical explosion. It was worse, in a way.
The app was working, but acting broken.
That distinction was new to me.
Before this, I thought bugs were mostly things that didn’t function. A button doesn’t save. A page doesn’t load. A number is wrong. Something crashes.
This was different. The system did the thing, but the person using it had no idea. And because that person was me, I accidentally created the problem I was trying to diagnose by mashing the button like I was trying to change channels on a remote with dying batteries.
The fix was almost embarrassingly simple.
We added a loading spinner so the button showed that something was happening. Then we added a little message — a toast, the AI called it, which is just a small pop-up note — saying to check your email.
That was it.
No grand rebuild. No ripping out the account system. Just basic manners from the app.
I felt stupid for a while. I had spent all that time thinking I’d broken authentication, which is the login and account stuff. I imagined some deep problem that would require a real software person to rescue me.
But after the AI explained it, I felt oddly proud.
Because I had found a real bug. Not a glamorous one. Not one you’d brag about at dinner. But a real user experience bug. The kind that would make someone else give up before they even got inside the app.
And honestly, I understood that user because I was that user.
The lesson I learned: sometimes the app isn’t broken — it’s just being rude.