I was the first engineer at a venture-backed insurtech, and I built the entire customer-facing platform — from the first Figma flows to a live product embedded in retailer checkouts.
The first six months weren’t code. Fidamy sells device insurance through retail partners rather than directly to consumers, so the real question was what to build — which flows customers actually understood, what our investor (NN) would approve, and what our insurance licensing allowed. In a regulated market, that discovery is the work, not a delay before it.
The purchase flow taught me something about architecture and timing. The step count kept moving — six at MVP, then five, then four — as we cleared each version with NN and the regulator. Next.js routing is file-based, so pinning each step to a URL while they churned would have locked me in too early; I drove the wizard from client-side state to stay flexible. That had a cost — a race condition loading step data caused hydration errors. Once the design stabilized at four approved steps, I re-architected to file-based per-step routing, each step loading deterministically. It killed the race condition, made the flow resumable and shareable, and took checkout conversion from ~20% to ~67%.
The other hard problem was speed — and cost. Our pricing engine (Peak3) had no bulk-quote endpoint and billed per API call, so four quotations meant four slow, metered requests. Its pricing is deterministic, so I cached quotes in our own price map and built the bulk endpoint it never offered: quote loads dropped from ~10s to under 100ms, and repeat pricing stopped costing us anything.
Some decisions were about the business, not the code. Moving payments from Stripe to Twikey wasn’t a technical flex — iDEAL and SEPA direct debit are how the Netherlands pays, and direct-debit mandates were a hard requirement for an insurer. What started as a purchase form had become a distribution platform.