Tacnode™
← The lineup

The Scattered Balance

The order check adds up buying power from three systems that each saw a different moment.

Market open. $5,000 in cash, nothing on hold.

What’s true
$5,000
The stream job
$5,000
reads
Decision
Accept a $4,000 crypto order?
waiting

Illustrative figures.

Where this shows up

Multi-product brokersStocks, crypto and event contracts drawing on one cash balance.
Futures commission merchantsCustomers trading on several exchanges through one account.
Sports and prediction appsOne wallet shared by a sportsbook and an exchange product.
WithdrawalsWithdrawable cash has to net out deposits still on hold.

Why the stream job gets it wrong

LEDGERcash $5,000ORDER SERVICEhold $3,000VENUE FILLSfill on Kafka✗STREAM JOB COPY$5,000missed the holdreadsCRYPTO ORDER CHECK$5,000ACCEPTS $4,000Each piece of buying power comes from a different moment.

Buying power isn’t stored anywhere. It’s cash from the ledger, minus holds from the order service, minus orders whose fills haven’t come back, plus positions on other venues. A stream job assembles part of it into a serving copy, and the order check fills in the rest from the other systems. Each piece comes from a slightly different moment, and at the open those moments drift apart.

By the time the decision ran, its context was inconsistent. We call that a context gap.

Work out buying power from one moment’s data.

cashholdsvenue fillsTACNODE$2,000buying powerall three as of one momentORDER CHECK$2,000DECLINES $4,000hold written back

Venue fills and positions stream into Tacnode, and the order check reads buying power computed from cash, holds and fills as of the same moment. When a check places a hold, it’s written to Tacnode, so the next order on any product sees it.

What comes inSource data arrives via change streams, and decision state is written to Tacnode.
What staysCash stays in your ledger, and your order service still enforces it.
What the decision getsEvery screen and order check shows the same buying power.
If an engineer asks how

Buying power is a query over ingested cash, fills and positions plus the holds written to Tacnode, computed on demand against the latest committed data. Reads scale out over shared storage, so the open doesn’t add copies.

Questions to put to your team

  1. When a customer trades two products at the open, do both order checks see the same buying power?
  2. How many systems does that number get assembled from?
  3. Does withdrawable cash net out every deposit still on hold?

Is your buying power telling this lie?

Bring it to a demo, and we’ll trace what it reads and how old that data is by the time it runs.

Book a demo →