Sep 24, 2024
The (software) bug that wouldn’t die
💡 Also published on the BlueDot blog.
On Wednesday morning, I opened an email titled “Course Hub bug report” and groaned. The bug I thought I fixed in BlueDot’s learning platform had returned.
For nearly a year, I had received variations of:
- “My responses aren’t saving.”
- “Everything I wrote disappeared.”
- “I clicked “Save”, but nothing happened.”
- “My answers are no longer accessible.”
I had put my head down to fix this issue with the Course Hub’s exercise section, testing it against every user-reported case. I believed it was fixed — I even wrote a blog post about it.
2 months later, the problem came back to make me eat my words and this time, it was worse. Not only did responses fail to save, but trying to save them wiped the text editor.
After I failed to reproduce the error, I reached out to the user, who kindly helped me troubleshoot. He found that the bug didn't occur in incognito mode or a specific sequence of actions.
But I still couldn’t replicate the bug. Without that, I couldn't diagnose the problem. Grasping at straws, I emailed the developer of our rich text editor plugin. We couldn’t be the only ones facing this issue, but it turned out that we were and the developer was stumped too.
The next day, more bug reports trickled in and appeared to spread. Finally, I was able to reproduce it—but understanding the cause was another story. No two people experienced the issue the same way and the bug seemed to happen sporadically.
My colleague raised that if this kept happening, we’d lose users’ trust. So, I disabled the exercise section and put up a maintenance notice.
Then, I escalated the issue to Bubble’s support team. Maybe the issue was Bubble’s auto-binding feature, which functions like autosave. But I knew it would be a while before I heard back, so I turned to other experts.
I contacted a few Bubble agencies, but they worked slowly, needing contracts, quotes, and timelines — it would be days before we even started working on a solution. Still, I made a request for help just in case.
Meanwhile, I found a Bubble consultant with a solid track record and immediate availability. During an hour-long call, we identified five possible causes:
- Clashing saving workflows
- App performance throttling due to our outdated pricing plan
- Workflows timing out due to overload
- Domain setup interference with Coalias (a whitelabelling service)
- A bug in the rich text editor (Editor.js)
I ruled them out one at a time, but the issue persisted. A welcome side effect was a dramatic improvement in our app’s performance. Page load times, which I had previously slashed down from 10 to 5 seconds, were now a fraction of a second!
The exercises still failed to save reliably, but at least the workflow errors were gone.
I tried a new text editor, and the bug seemed to disappear, but I wasn’t falling for that again. The last time I switched text editors, I spent hours converting exercise responses from BBCode to JSON. I wasn’t about to go through that again without figuring out the root cause.
I continued exchanging emails with Bubble support, the Editor.js developer, Coalias support, the Bubble consultant, and the Bubble agencies. I recorded Looms showing the steps that triggered the bug and shared the hypotheses I had tested and ruled out.
Finally, the Editor.js developer emailed Coalias with their findings. Coalias recommended I turn off the setting which reduced requests into Bubble, and just like that — solved. No more console errors. No more saving bugs (for now, at least!).
What did I learn?
Ask experts for help
At first, I hesitated to reach out to experts—imposter syndrome, a reluctance to spend money, and bad past experiences with consultants held me back. But now I realise it’s faster to present a well-defined problem to an expert and let them guide you rather than faff about (as the British would say) on my own.
I’ve since relied on experts for other challenges, from migrating our automation from Make to n8n, to setting up Meta’s Conversions API, to converting exercise responses from JSON to HTML. It’s much quicker when someone with domain expertise can point you in the right direction.
It’s okay to be wrong
It was embarrassing to repeatedly tell users that I fixed the issue, only to have it crop up again and again and again.
I really thought I’d solved it, but I had only fixed part of it because I hadn’t realised how deeply the issue ran. As our platform gained more users and the Course Hub gained more features, the veneer cracked and I could finally see to the bottom.
I’m fortunate to have a community of patient and understanding users who even offered to help us improve our systems. I’m learning to remind myself that it’s okay to be wrong — people understand that we’re a small team of five running three courses for over a thousand people.
It is more important to be honest and open about what’s happening than to try to wrap the problem with silk and ribbon.
You don’t know what you don’t know
I didn’t know a simple change to our page navigation would drastically improve loading time.
I didn’t know Bubble processes actions in its own optimised sequence.
I had no idea that a performance tweak I made ages ago would become my biggest headache.
This experience humbled me and taught me the value of continuous learning. I look forward to reducing my “unknown unknowns” by learning from others who’ve already navigated these challenges.