A CTO diary: The Day the System Moved - and So Did I

How rebuilding our foundation rebuilt parts of me, and why I’d do it again without hesitation.

avatar

Martina Zrnec

Oct 12, 2026 · 4 min read

It was a Wednesday.

Not sunny, not rainy.

Not great, not terrible.

One of those neutral days, that looks like it promises peace simply because they don’t promise anything else.

Migration day.

But..let me rewind a bit, so there is a context to the story.

Months earlier, when we shifted our focus from B2C to B2B, I knew something fundamental will need to change. And that was our database. Firestore served us well, up until it didn’t. When you can insert anything into DB, you discover that overtime you can build chaos of data. But on top of that, I had queries that refused to insert more conditions, everything started to feel like a workaround. Firestore became not just insufficient, it became a blocker.

So the decision to migrate came fast:

Supabase.

Structured. Queryable. Fast. Scalable.

Something to build foundation on.

The best part? It wasn’t supposed to be MY problem.

We brought in someone absolutely perfect for the job, someone I trust deeply. He set up initial structure, and I finally felt like I could breathe and focus on the rest of the burning backlog of tasks. I even started to lean into the luxury of not doing everything at once.

But startups do not operate on luxury.

They operate on shifting, adapting, mitigating and accepting.

My person took another freelancing job, hours dropped, and suddenly our entire roadmap was bottlenecked by this migration. It already prolonged more then I thought, so after initial 10%, the setup, the skeleton (which meant a lot going forward and I am grateful for that part), I had no choice but to take over.

And that’s where the story begins.

Because migrating a production app that touches:

  • iOS and Android
  • Chrome, Safari, Edge and Firefox extensions
  • Webhooks
  • Third-party integrations
  • Entire Backend full of functions

is not just “a task”.

It is a mental marathon while juggling knives on a moving train.

The extra mile I did as well (because I am loco loco):

  • normalized data
  • Split arrays into separate tables
  • Created new tables for data that had previously lived in the margins.
  • Cleaned old fields
  • Removed ghosts of past design decisions.
  • Rewrote pagination everywhere.
  • Tried to fix stuff along the way

More then 500 files touched.

At one point, my brain genuinely felt like it was leaking through my ears.

And I had days (many days), where thoughts spiraled:

Why am I doing this? Is this even necessary?

I can’t do this any more. I don’t know what’s left, or what needs to be done, I am completely lost.

I am not the person for this job. Nothing works. Nothing makes sense. This will take ages (even with AI).

Why me?

And all of this hit me after being ~2 months abroad and having conversations, events, pitch nights, all kind of various stuff daily. My brain went from constant stimulation to isolation. And I felt it. Hard.

It wasn’t just migrating a database.

I was migrating my psychological state.

I was feeling so alone, day to day, just me and migration, black screen, coffees and thoughts. My co-founder, with 6 hours time difference, was having his own set of responsibilities and he wanted to leave me alone so I have space to do this, but that just made me feel more alone. Unfairly so. I was feeling not part of the team, like I was doing this big project all by myself.

Still, the prep continued.

I submitted the extensions.

Then prepared to submit the apps.

Set up the scripts.

Created the timeline.

Aligned the checklists.

Everything was set for that Wednesday morning, the day where all the pieces would click and we’d emerge on the other side.

And that’s the moment when universe leans over gently and whispers: “Cute plan.”

Apple reviews slowed down.

Android builds refused to pass.

Extensions took forever.

And the data migration…

Well.

Let’s just say:

knowing your trade-offs becomes real very fast

when you’re staring at a terminal that politely informs you it’s doing absolutely nothing.

When the migration finally ran, for real this time, I watched the logs the way you watch a heartbeat monitor.

I felt every spike. Every pause. Every warning.

I held my breath when it slowed down and whispered “please” under my breath like the system could hear me.

And when the final script ended…

When the data matched…

When the functions worked…

When the app opened…

I opened a beer and celebrated.

And that was it. No fireworks. No dramatic movie ending.

Just a system that finally worked again.

Clean data. Faster queries. A structure that makes sense.

A platform we can confidently build the next chapter on.

And here is what I need to acknowledge to myself: I’m proud that I did this. I don’t often give myself credit for what I’m capable of. I underestimate my endurance capabilities, clarity under pressure and the ability to sit through all the hard parts and survive.

Whatever I set my mind to, I can figure out.

I can learn it, build it, survive it, and ship it.

and that’s why I would do it again, just to remind me of this.

Built for AI agentsACO · 1379 tokens

Summary

A CTO recounts the challenging experience of migrating a production application from Firestore to Supabase, touching multiple platforms and systems while managing psychological strain and isolation. The migration involved normalizing data across 500+ files and exposed the emotional toll of solo technical work during a critical infrastructure overhaul.

Tags

database-migration · startup · supabase · firestore · technical-leadership

Key entities

Firestore (technology, 0.95) · Supabase (technology, 0.95) · iOS (technology, 0.9) · Android (technology, 0.9) · Chrome (technology, 0.85) · Safari (technology, 0.85) · Edge (technology, 0.85) · Firefox (technology, 0.85) · database-migration (concept, 0.95) · B2C-to-B2B-transition (concept, 0.9) · production-deployment (concept, 0.9) · data-normalization (concept, 0.85) · co-founder (person, 0.7) · migration-day (event, 0.9)

Classification

memo · language en · status final

Provenance

claude-haiku-4-5 via @stacklist/be@0.1.0, confidence 0.85, 12 Oct 2026