Saravanan — Portfolio 2026

Skip to content
All posts

· 4 min read · Siva Sethu Saravanan S

Event logs over integrations

Why FlowDesk models every support channel as an append-only log, and what that bought us a year later.

Every helpdesk starts the same way: connect email, then chat, then a contact form. Each connection gets its own tables, its own sync job and its own bugs. By the fourth channel you are maintaining four products.

FlowDesk took a different route. Every inbound message, whatever its source, becomes one row in an append-only log.

The shape of an event

type ChannelEvent = {
  id: string;
  tenantId: string;
  channel: "email" | "chat" | "form";
  conversationKey: string;
  occurredAt: string;
  payload: unknown;
};

Adapters are thin. They translate a provider's format into a ChannelEvent and append it. Nothing else in the system knows where a message came from.

What it bought us

  • New channels in a day. An adapter is around 150 lines.
  • Replay. A bad classifier release was fixed by replaying two hours of events.
  • Debuggability. "What happened to this ticket?" is a single ordered query.

What it cost

Two extra weeks before the first demo, and a habit of thinking in projections rather than rows you update in place. For a product that lives or dies on integrations, that was a cheap price.