ShitGrid was, if anything, an understatement.
For years, our email sending provider was the one part of the stack that didn't fit. Everything else was fast, headless, automatable. This one required a specific order of manual steps. Skip a step, do them in the wrong order, and something would break. Templates would corrupt mid-edit and you'd have to start from scratch. It had its own two-factor authentication app (not TOTP, not Google Authenticator, its own proprietary one) because sharing an authentication standard with the rest of the internet was apparently too much to ask.
We started calling it ShitGrid.
We kept it.
Not because we liked it. Because it technically worked. And "technically works" is a powerful force. It means you can always find something more important to fix. There was always a bigger priority. Replacing ShitGrid was always on the list. It never moved up.
That's the mistake, and we suspect we're not alone in it.
The day it stopped technically working
About a year ago, ShitGrid rolled back some of their free tiers. They sent one warning email.
It went to spam.
An email company. The one notification that would have saved our data. Spam.
We didn't know. Six weeks passed. Then our verification emails stopped working. Users couldn't sign in. We noticed immediately and investigated.
What had been a free plan was now two separate paid plans (transactional and marketing), each with minimum quotas we had no use for. We paid for the transactional plan the same day to get system emails back. Then we paid for the marketing plan to see what we had left.
The contact list names were all still there. The contents were empty. ShitGrid had deleted every contact while leaving the list shells intact. A graveyard of named buckets with nothing in them.
We would have paid the subscription. The price was steep for our volume, but it was a cost of doing business and we would have paid it. We didn't know we were suddenly on a trial. Now it didn't matter.
Actual screenshot from deleted contact lists
What we did next
We unblocked system emails immediately. Verification, password reset, billing notifications. The things users actually feel when they break. Those went live the same day.
The marketing side we didn't touch. The contact lists existed in name only. Rebuilding them was going to be imprecise and forensic regardless. But more than that: the thought of starting from scratch on tools that were not fit for purpose even when they were free went against every fibre of our being.
So for twelve months we paid for the shittest email solution possible, kept system emails running without fuss, and sent no product updates. We shipped a lot in that time. Nobody outside of active users heard about any of it.
What the migration actually took
We'd been wanting to move to Resend long before any of this happened. The incident didn't make us do it any faster. What finally got us there was the embarrassment of how long we'd left it.
The migration itself wasn't the hard part.
Switching the API was straightforward. Upgrading our templates to react-email was mostly painless. Resend is built by people who seem to have actually sent emails before, which is a lower bar than it sounds but a noticeably different experience.
The hard part was rebuilding the contact list. We had to reconstruct it from our CRM, bounce-back history, and user exports. Imprecise and forensic. The kind of work that takes longer than it should and produces a result you're not entirely confident in. That's partly on ShitGrid for deleting the thing we'd spent years building. It's also partly on us for not having better records.
Once that was done, it worked. Product updates now go out as part of how we ship. No manual template wrangling in a separate platform. No specific order of steps. No proprietary 2FA app.
What we'd tell ourselves a few years earlier
Replace the thing that technically works sooner than you think you need to.
"Technically works" is a ceiling. You hit it, you stop improving, and you tell yourself that's fine. The real test is whether the tool fits the stack you're building. ShitGrid never did. Everything around it was automatable and it wasn't. We kept it anyway, for years, because the activation energy to replace it always felt higher than the pain of tolerating it.
It wasn't. The migration took a few days. The contact list reconstruction was the real blocker after the deletion, and that problem only existed because ShitGrid deleted it without warning.
The twelve months of silence? That's on us. Poor prioritisation. We should have been sending updates all along.
This is the first one.
Disclaimer: ShitGrid is a fictional company. Any resemblance to actual grids of shit, living or deleted, is coincidental.
