Multi-PSP routing for an FX & CFD broker
Online FX / CFD trading broker · Senior backend engineer
Problem
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.
Approach
Designed a routing layer that selects PSPs per request based on currency, region, KYC tier, and live success-rate metrics. Integrated multiple global providers behind a uniform internal contract, with per-provider adapters, idempotent request handling, and a fallback chain for failed authorisations.
Outcome
Deposit success rate improved measurably across affected corridors. Onboarding a new PSP dropped from weeks to days.
C#
.NET Core
EF Core
PostgreSQL
RabbitMQ
Idempotent deposit & withdrawal engine
Regulated trading platform · Senior backend engineer
Problem
Retries from upstream PSPs and async webhook deliveries occasionally produced duplicate postings against trader wallets, forcing finance to perform manual clawbacks and exposing the firm to regulator-flagged clawback risk.
Approach
Reworked the deposit and withdrawal pipeline around deterministic idempotency keys persisted in PostgreSQL, with explicit state machines per in-flight transaction. Made webhook handlers replay-safe. RabbitMQ-driven workers retry until a terminal state is reached, with 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 Core
PostgreSQL
RabbitMQ
Redis
Reconciliation pipeline for trader funding
Online trading broker — finance operations · Senior backend engineer
Problem
Reconciling internal wallet ledgers against PSP statements was a manual end-of-day exercise that could not keep up with trade volume; discrepancies were caught hours or days after the fact.
Approach
Built a reconciliation pipeline that ingests PSP statements (CSV, API, SFTP-delivered) into a normalised event store, then matches them against the internal ledger using deterministic and fuzzy rules. Surfaced unmatched entries in an operations UI with one-click resolution actions.
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 Core
PostgreSQL
RabbitMQ
Docker
RBAC for money-movement operations
Regulated trading platform — internal ops · Senior backend engineer
Problem
Permissions for sensitive operations — overriding KYC, approving large withdrawals, adjusting trader balances — were spread across services with inconsistent enforcement, making audits and least-privilege reviews painful.
Approach
Designed a scalable permission module centralising role definitions, resource scopes, and approval workflows. Modelled around domain-driven primitives so each service checks authorisation against a single source of truth. Added an audit log capturing every sensitive action.
Outcome
Audits that took weeks of evidence-gathering now run from a single query. Onboarding new operational roles became a configuration change rather than a multi-team effort.
C#
.NET Core
PostgreSQL
EF Core
Unclaimed-property compliance & state reporting
Financial services & insurance compliance vendor · Senior software engineer
Problem
Banks, insurers, and brokers across the US must report and remit unclaimed customer funds to each state under different escheatment rules. Maintaining accurate state-by-state reporting cycles was a manual exercise that exposed clients to regulatory fines whenever a rule changed.
Approach
Built a compliance platform handling owner-record ingestion at scale, due-diligence workflows (notifying owners before remittance), and per-state reporting formats with versioned rule packs. Mixed ASP.NET MVC for the operator interface with .NET Framework and .NET Core Web API services backing the workflow engine.
Outcome
State reporting that previously took weeks of analyst work compressed to a guided multi-day workflow. Per-state rule changes ship as data updates rather than code releases.
C#
.NET Framework
.NET Core
ASP.NET MVC
Web API
SQL Server