7 engagements across payments, platform and reliability work. Clients are
anonymised where confidentiality requires it — the descriptors say what kind of
business it was, not which one.
Payments & settlement
Multi-PSP routing for an FX & CFD broker
Online FX / CFD trading broker
Challenge
Traders depositing in multiple currencies were funnelled to a single payment provider, so deposits failed whenever that provider had localised outages or weak success rates in specific corridors — stalling onboarding in regulated regions.
What we built
A routing layer that selects a PSP per request on currency, region, KYC tier and live success rates, with per-provider adapters behind one internal contract, idempotent request handling, and a fallback chain for failed authorisations.
Outcome
One provider's outage no longer fails a deposit — an affected corridor falls back to another PSP on the same request, instead of returning the trader an error. Onboarding a new provider dropped from weeks to days.
C#.NET CoreEF CorePostgreSQLRabbitMQ
Idempotent deposit & withdrawal engine
Regulated trading platform
Challenge
Retries from upstream PSPs and asynchronous webhook deliveries occasionally produced duplicate postings against trader wallets, forcing finance into manual clawbacks and exposing the firm to regulator-flagged clawback risk.
What we built
A deposit and withdrawal pipeline rebuilt around deterministic idempotency keys persisted in PostgreSQL, with an explicit state machine per in-flight transaction, replay-safe webhook handlers, and workers that retry to a terminal state — plus a dead-letter queue and operator tooling for stuck entries.
Outcome
Eliminated double-postings in production. Nightly reconciliation moved from manual review to an automated daily report with exceptions only.
C#.NET CorePostgreSQLRabbitMQRedis
Reconciliation pipeline for trader funding
Online trading broker — finance operations
Challenge
Reconciling internal wallet ledgers against PSP statements was a manual end-of-day exercise that could not keep up with trade volume; discrepancies surfaced hours or days after the fact.
What we built
A pipeline that ingests PSP statements (CSV, API, SFTP-delivered) into a normalised event store and matches them against the internal ledger on deterministic and fuzzy rules, surfacing unmatched entries in an operations UI with one-click resolution.
Outcome
Daily reconciliation dropped from a multi-hour manual review to an automated run with a small exception queue. Discrepancies are now caught the same day they occur.
C#.NET CorePostgreSQLRabbitMQDocker
APIs & platform
API gateway for a regulated B2B platform
Compliance & licensing SaaS
Challenge
Internal services exposed inconsistent authentication schemes and rate limits, blocking partner onboarding and pushing security policy into every team's backlog.
What we built
A gateway across .NET Core, Node.js and Azure API Management fronting all partner-facing services with unified OAuth2, throttling, request shaping and routing — with services migrated behind it incrementally, without disrupting active integrations.
Outcome
Partner integration time dropped from weeks to days. Security policy is now enforced in one place rather than audited per service.
C#.NET CoreAzure APIMNode.jsAzure
Greenfield microservices for a project-management product
Enterprise project-management SaaS
Challenge
A monolithic legacy product could not be extended to support multi-tenant deployments and hierarchical project-group structures without taking the whole system down for every release.
What we built
A distributed architecture designed from scratch around domain-driven service boundaries, with structured project-lifecycle workflows, role-based access over hierarchical data, clean service contracts and message-driven coordination.
Outcome
Each service ships independently, enabling continuous delivery for the first time. New tenants onboard without code changes and team-level rollouts no longer block product-wide releases.
C#.NET CoreSQL ServerDocker
Reliability & delivery
Performance tuning of a trading platform's hot path
Online trading broker
Challenge
As trader volume grew, several backend services were hitting tail-latency budgets — slow synchronous database queries and chatty service-to-service calls dominated the hot path during market opens.
What we built
An end-to-end profile of the hot path, then Redis caching for read-heavy reference data, non-critical work moved onto RabbitMQ workers, the affected services containerised with sized resource limits, EF Core query patterns tuned, and per-endpoint latency budgets enforced in CI.
Outcome
The endpoints that were breaching their tail-latency budgets now hold them through market open — and each budget is enforced per endpoint in CI, so a regression fails the build instead of reaching traders.
C#.NET CoreRedisRabbitMQDockerPostgreSQL
Automated infrastructure setup for client deployments
Managed-services consulting firm
Challenge
Every new client deployment required engineers to provision and configure servers by hand — slow, error-prone and inconsistent. Environment drift led to reproduction-only bugs in production.
What we built
A provisioning toolchain: an Angular operator UI, a .NET Core Web API as the control plane, and Ansible playbooks doing the infrastructure work — every deployment idempotent and parameter-driven.
Outcome
New client environments now stand up in minutes instead of days. Environment drift between clients and across release cycles has effectively been eliminated.
C#.NET CoreAngularAnsible
Get in touch
Have a problem worth solving?
Tell us what you are working on — we read every message and reply within a day.
Or take half an hour with the architect who will own the design.