Skip to content

Client · German B2B industrial manufacturer

Replaced three legacy tools with one custom CRM and cut the quote cycle by 40%

A 180-person German manufacturer was running its sales operation across an Access database, a spreadsheet, and a shared Outlook inbox. In five weeks we designed and shipped an internal CRM tailored to their exact quote-to-order flow — one system, one login, 40% faster quotes, and roughly €120k of recovered time per year.

5 weeks
From kickoff to UAT
3
Legacy tools retired
40%
Faster quote cycle
≈ €120k
Annual hours recovered
Services Custom software & web apps Systems integration UX & product design
Access DB 2011 · LEGACY Shared Excel PIPELINE.XLSX Shared Inbox OUTLOOK One Internal CRM SINGLE LOGIN · SSO · AUDIT Customers Quotes Orders DATEV Sage ERP Outlook

Three tools in · one system out · five weeks

The challenge

The client — a family-owned industrial manufacturer in North Rhine-Westphalia — had scaled to €38M in revenue on the back of a sales team that cared deeply about their customers and tracked almost everything in their heads. The supporting stack had drifted into chaos:

  • A Microsoft Access database from 2011 with the customer master.
  • A shared Excel file for the quoting pipeline, guarded by one sales ops manager.
  • A shared Outlook inbox where everything that mattered eventually lived.

Quotes took an average of 11 days. Senior sales reps left with customer history nobody else could reconstruct. Two enterprise-CRM rollouts had been tried in the previous three years. Both ended with the team quietly reverting to the spreadsheet.

They didn’t need Salesforce. They needed a tool that respected their actual process.

Our roadmap

  1. 01
    Phase 01 Week 1

    Architecture & data model

    Mapped the real quote-to-order flow with sales, migrated Access into a versioned schema.

  2. 02
    Phase 02 Week 2

    Core flows

    Customers, contacts, opportunities, quotes — built end-to-end with auth, audit log, SSO.

  3. 03
    Phase 03 Week 3

    Quote engine

    Their configurable pricing rules, versioned quote PDFs, email-send from within the app.

  4. 04
    Phase 04 Week 4

    Integrations

    DATEV, Outlook, the ERP (Sage), and a Zapier fallback for the long tail of legacy tools.

  5. 05
    Phase 05 Week 5

    UAT & rollout

    Two days of shoulder-to-shoulder UAT with every rep, then a staged rollout across 3 regional teams.

How we shipped it

Week 1 — Model the business, not your preferred framework

We blocked a full day with the sales director and the two most tenured reps. We whiteboarded the actual quote flow — with every weird exception (framework agreements, call-off orders, the one customer who insists on a fax confirmation). By lunch we had thrown away two of our default data-model assumptions. By evening we had a schema the team recognised as theirs.

The Access database was migrated into PostgreSQL the next day, with a versioned migration script and a deterministic diffing pass so we could re-run it right up to go-live.

Week 2 — Core flows, no half-finished screens

Customers → contacts → opportunities → quotes. Every entity had full CRUD, an audit trail, and role-based permissions from day one. SSO via the client’s existing Azure AD, so reps didn’t need a new password.

We shipped to a staging URL by end of week 2 with real migrated data. Reps could already log in and look up their own accounts.

Week 3 — The quote engine, which was the actual product

The client’s pricing rules were not arbitrary — they encoded years of margin learning. We didn’t try to reinvent them. We built a rule DSL that sales ops could edit without touching code, and we generated versioned quote PDFs straight from the database. Every quote the client ever sent is now reproducible byte-for-byte from its ID.

Week 4 — Integrations, the boring but necessary layer

  • DATEV export for the accounting team — matched their existing workflow.
  • Outlook add-in so reps could drag emails into a customer record without leaving their inbox.
  • Sage ERP bridge — read-only for stock levels, write-on-accept for order creation.
  • A thin Zapier escape hatch for the long tail of smaller tools we didn’t want to hard-wire.

Week 5 — UAT, rollout, and one very important party

Two days of structured UAT with every rep, one region at a time. We watched them work, fixed 23 small things on the spot, and rolled out to production on the following Monday. The client threw a small party. We drank the Kölsch.

The architecture

A stack their in-house IT team could maintain — and take over — from day one.

  • Backend: TypeScript on Node, Fastify, PostgreSQL, Prisma. Versioned migrations, per-row audit log.
  • Frontend: Astro + React islands for interactive screens, server-rendered for speed.
  • Auth: Azure AD SSO, per-role permissions in Postgres, MFA enforced.
  • PDFs: Deterministic rendering pipeline — same inputs, same bytes, forever.
  • Integrations: DATEV, Sage ERP, Microsoft 365, a small Zapier bridge.
  • Infra: Single-region Hetzner VMs + managed Postgres, on-prem backup to the client’s own NAS. No hyperscaler lock-in.
  • Observability: Self-hosted Grafana, Loki logs, a simple error page that the ops manager can actually read.

Everything in a single git repository. One-command deploy. A README their IT lead could follow without calling us.

The results

Measured after the first full quarter in production:

  • Quote cycle dropped from 11 days to 6.6 days — roughly 40% faster.
  • Three tools retired on the same day we went live (Access, the spreadsheet, the shared inbox).
  • New-rep onboarding from 6 weeks to 9 days. The CRM is now the training manual.
  • ~€120k of recovered time per year — conservatively estimated on the minutes saved per quote across the team.
  • Zero production incidents in the first 90 days. Two small bug fixes, both shipped the same day they were reported.

What’s next

The next phase adds a customer portal — letting large accounts place call-offs directly and see live order status. Because we own the data model, not a vendor, that extension slots in naturally instead of requiring a re-platform.

If you have a sales or ops team running on a stack of tools that “kind of works” — and every CRM pitch has left you feeling like you’d be building for the software instead of the other way round — talk to us. We’ll build software that respects the way your team actually works, and we’ll ship it in weeks.

Last updated ·

Your move

Let's make your software feel inevitable.

Tell us what you need. We reply within one working day — with a real opinion, not a sales pitch.