FinFlow — Real-Time Financial Analytics for Modern Finance Teams
We designed and engineered a high-throughput analytics platform that processes millions of transactions in real time, giving finance teams the clarity and speed they need to make confident decisions.
From spreadsheet chaos to real-time clarity
FinFlow's finance team was drowning. Month-end closes took two weeks. Critical reports lived in dozens of disconnected Excel files. Analysts spent the majority of their time reconciling data rather than generating insights. Leadership was flying blind on a 30-day lag.
They came to Cognate with a clear mandate: build a single source of truth for financial data that could ingest transactions from multiple banking APIs, categorise them automatically, and surface live dashboards for every stakeholder from the CFO to department heads.
Fourteen weeks later, FinFlow was live in production, ingesting over four million transactions per day, and the finance team had closed their last Excel file for good.
Financial data was scattered across 12 separate systems with no automated reconciliation. A single month-end report required 3 analysts working full-time for 10 business days. The CFO could never get a real-time answer to a basic question: "What is our actual cash position right now?"
Building for correctness at scale
Financial software is uniquely unforgiving. A bug in a consumer app is an annoyance. A bug in a system that categorises transactions or rolls up P&L figures can have real regulatory and fiduciary consequences. Every architectural decision had to be made with correctness as the primary constraint.
At the same time, the volume requirements were serious. The client processed transactions across 18 legal entities and 6 currencies, connecting to 9 different banking and payment APIs. Peak ingestion needed to hit 50,000 transactions per minute without data loss or ordering violations.
- Double-entry bookkeeping correctness required at the database level
- Zero tolerance for duplicate transaction ingestion across retries
- Sub-3-second dashboard refresh on datasets of 50M+ rows
- SOC 2 Type II compliance required before launch
- Multi-currency with live FX rate materialisation
- Role-based access with entity-level data isolation
- Event-sourced ledger with idempotency keys at every ingestion point
- Append-only transaction log, projections materialised asynchronously
- TimescaleDB hypertables for time-series analytics with continuous aggregates
- Row-level security policies enforced in PostgreSQL, not the application layer
- Kafka-based ingestion pipeline with exactly-once delivery semantics
- Automated audit trail meeting SOC 2 audit logging requirements
A platform built on an event-sourced ledger
The architectural heart of FinFlow is an immutable, event-sourced transaction ledger. Rather than storing the current state of accounts directly, every financial event is written as an immutable fact. Current balances and P&L figures are projections derived from this ledger. This gave us audit trails, point-in-time reporting, and replay capabilities for free.
The ingestion layer is a set of Go microservices, one per banking API, each publishing normalised events to a Kafka cluster. Consumers on the other side validate, enrich (FX rates, category ML model), and write to the PostgreSQL ledger. The entire pipeline is idempotent — replaying any segment produces the same result.
We deliberately chose PostgreSQL over a dedicated OLAP database for the v1. By pairing it with TimescaleDB's continuous aggregates and carefully designed partial indexes, we achieved sub-200ms p99 query times. This kept operational complexity low and avoided introducing a separate data warehouse that the client's small infrastructure team would struggle to manage.
14 weeks from kick-off to production
We ran the project in four phases, each building on the last, with a production deployment at the end of every phase — not just at the end of the project.
Chosen for correctness, performance, and operability
What actually changed for the team
Measurable outcomes, six months post-launch
Cognate didn't just build what we asked for — they built what we actually needed. The event-sourced architecture they proposed felt complex at first, but six months in, it's the reason we can answer any historical question in seconds and why our last SOC 2 audit was the smoothest we've ever had. The team was sharp, honest, and completely transparent about trade-offs every step of the way.