Back to Work
SaaS Platform 2023 — 14 weeks

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.

3x
Faster reporting
99.98%
Uptime SLA
4.2M+
Txns / day
14wk
Delivery time
FinFlow — Q4 Overview
Revenue Trend

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.

The Core Problem

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.

⚠️
Key Constraints
  • 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
💡
Our Approach
  • 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.

Event-Sourced Ledger
Every financial event is an immutable fact. State is a projection, never stored directly. Supports point-in-time queries across any historical date with no performance penalty.
Real-Time Aggregations
TimescaleDB continuous aggregates pre-materialise hourly and daily rollups. Dashboard queries consistently return in under 200ms even against 50M+ row datasets.
SOC 2 Compliance Built In
Immutable audit logs, automated evidence collection, and encryption at rest and in transit were designed in from day one, not bolted on after the fact.
Multi-Entity RBAC
Row-level security in PostgreSQL enforces entity isolation at the database layer. Application code cannot accidentally leak data across legal entities regardless of bugs.
ML Auto-Categorisation
A fine-tuned classifier assigns accounting categories to incoming transactions with 94% accuracy, eliminating the manual categorisation step that previously consumed 30% of analyst time.
Custom Report Builder
A drag-and-drop report builder lets finance teams compose P&L, balance sheet, and cash-flow views with custom date ranges, entities, and currency consolidations without engineering support.
Architecture Decision

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.

Weeks 1–2
Discovery & Architecture
Mapped all 9 source systems. Defined data model, event schema, and security architecture. Produced an Architecture Decision Record (ADR) document and got sign-off before writing code.
Weeks 3–6
Ingestion Pipeline & Core Ledger
Built and deployed the Kafka ingestion pipeline, ledger schema, and first three banking API connectors. The client's team could watch real transactions flowing into the system by end of week 6.
Weeks 7–11
Dashboard & Reporting UI
Built the Next.js dashboard with live WebSocket updates, the report builder, and the RBAC admin panel. All 18 entities and 6 currencies were fully supported by end of week 10. Remaining week focused on performance tuning and accessibility.
Weeks 12–14
Security Hardening & Launch
Completed penetration testing, SOC 2 evidence collection, load testing at 2x expected peak, and trained the finance team. Went live on week 14 with zero critical issues at launch.

Chosen for correctness, performance, and operability

Frontend
Next.js 14
UI Library
React + TypeScript
Charts
Recharts + D3
API Layer
Go 1.22
Message Bus
Apache Kafka
Database
PostgreSQL 16
Time-Series
TimescaleDB
Cache
Redis 7
ML / Categorisation
Python + FastAPI
Auth
Auth0 + SAML SSO
Infrastructure
AWS EKS + Terraform
CI / CD
GitHub Actions

What actually changed for the team

Before FinFlow
Month-end close took 10 business days with 3 analysts
Financial data lived in 12 disconnected systems
CFO reports had a 30-day data lag
No real-time cash position visibility
Manual FX reconciliation consumed 8 hours per week
No audit trail — compliance reviews were painful
After FinFlow
Month-end close completed in under 2 business days
Single source of truth across all 18 entities
CFO dashboard updates live, every 30 seconds
Real-time consolidated cash position in 6 currencies
Automated FX materialisation with zero manual steps
Immutable audit log; last compliance review took 4 hours

Measurable outcomes, six months post-launch

80%
Reduction in close time
Month-end close dropped from 10 days to under 2 days, freeing the team for higher-value analysis.
3x
Faster ad-hoc reporting
Finance team produces ad-hoc reports 3x faster than before, without any involvement from the engineering team.
4.2M+
Daily transactions
The platform comfortably handles peak loads of 50k transactions per minute with no data loss or ordering issues.
99.98%
Production uptime
Six months post-launch with zero data incidents, zero security incidents, and no P1 bugs in production.
94%
Auto-categorisation accuracy
ML model correctly categorises transactions on first pass, eliminating the bulk of manual review work.
4hrs
Last compliance review
SOC 2 evidence collection that previously took weeks now takes a single afternoon, thanks to the automated audit log.

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.

SR
Sarah Reynolds
CEO, FinFlow Inc.
Next Case Study
Helio — Health Tracking App
View Case Study