Have you ever noticed how infuriating it is when you get stuck on just a few lines of code for days?
We’re so used to moving fast, bashing out features, spinning up prototypes, leveraging tools like Cursor,that when we hit the tiny, stubborn details, it feels unbearable. Suddenly you’re wasting time, losing perspective, questioning your skills, and wondering if you should’ve picked a different career altogether.
That’s been me recently.
I’ve been building a new page full of charts and data visualisations. The groundwork was big: choosing the charting library, collaborating with design on look and feel, planning reusability for the design system. We split the tickets well, nailed the early questions, and before long we had a working prototype. Then we plugged in our API, stakeholders gave glowing feedback, and everything felt smooth.
What could go wrong?
The final step: a smooth, polished keyboard navigation system. The library had accessibility features built-in. Easy, right? Just wire it up, polish the UX, and celebrate.
Except… not.
Pretty quickly, we realised the implementation was much harder than expected. We hacked together a custom hook that ballooned into something bigger than the components themselves. Edge cases piled up, readability tanked, and we were heading toward shipping something brittle and messy.
For days, nothing worked. Every small step forward meant giant leaps back in terms of quality. Dropping the feature wasn’t an option. Switching libraries this late wasn’t realistic. And in the middle of it, I spiraled. Questioning myself, my approach, my abilities.
But here’s the thing: this is just part of the developer journey. Sometimes you’ll dig yourself into a hole and the only way out is to ask for help.
And that’s exactly what I did.
A teammate looked at the problem with fresh eyes and spotted something I had completely missed: a weird pattern in the library itself. We raised a GitHub issue and, sure enough, it was confirmed as a bug. From there, the path forward opened up. We worked backwards, simplified our over-engineered hook, shaved off complexity, and ended up with a lean, reusable solution that will only get cleaner once the bug is fixed upstream.
The result? A simple script, a solid internal component, and a smooth user experience that fits right into the polished new page.
Was it easy? Not at all. Was it worth it? Absolutely.
Because here’s the truth: struggle is an accelerant to learning. It forces you into the details, makes you confront the cracks, and when you climb out the other side, you’re sharper, wiser, and stronger for it.