Real money, real movement, real reconciliation. The same discipline that keeps KodiiPay's books honest.
Before you read: Written from live engineering practice — the money-moving, million-user work our team runs on our own products, set down so anyone building something can learn from it.
01 · What it is
Money software is different from software. A bug in a content site costs a comment; a bug in payments costs cash and trust. We build payment systems with the discipline our own product demands: real M-Pesa integration through Daraja (STK Push, C2B, B2C, B2B), callbacks verified against the gateway so nothing is credited on faith, idempotency so retries never double-pay, ledgers that record every movement, and reconciliation that reconciles — against the gateway's statement, not just against our own records. If you move money in Kenya, this is where we earn our keep.
What a payment & transaction systems build covers:
Payment and transaction systems are the one category of software where 'the network probably retried' is not a footnote but the core design constraint. At TGJOF Enterprise, we build money software around a single conviction: the customer's balance is a promise, and a promise has to survive callbacks that arrive twice, networks that drop mid-charge and gateways that answer slowly. That is why the studio builds a rail-agnostic payments layer first — M-Pesa and Daraja as the lived home-turf example, with PayPal, Stripe, PayStack, cards, bank rails and any gateway a client already runs all treated as first-class adapters behind one ledger. The craft is in the machinery that keeps every one of those promises exact, auditable and safe at any volume.
What we do
How we do it
02 · The full discipline
A bug in a content site costs a comment. A bug in payments costs cash and trust — and by the time you discover it, it has usually already moved real money. Payment and transaction systems are the closest thing software has to civil engineering: the moment the numbers are wrong, people on both sides of every transaction pay for it.
We build payment systems the way a live platform has to — because KodiiPay is a payment platform we operate ourselves, in production, moving real money through M-Pesa on Safaricom's Daraja rails. This is not theory we read about; it is discipline we run every hour of every day: wallets, wallets-with-holds, STK pushes, paybills, tills, B2B runs, B2C withdrawals, subscriptions, fees, floats, ledgers, reconciliation and fraud — held to standards that a regulator would recognise and a customer can feel.
Below is how money software is really built when your own money depends on it. Every layer — the ledger, the lifecycle, the callback discipline, the arithmetic, the fraud posture, the reconciliation, the scale — is what we actually run, and we bring the same machinery to every transaction system we build for clients.
No payment build receives anything less than this. If you store balances, move money, take payments, disburse or charge, the architecture below is the floor, not the ceiling.
03
Most software failures are recoverable. A form that rejected a valid input can be fixed; a report that was wrong can be regenerated; a session that dropped can be started again. Money failures are not like that. A double credit, a lost payment, a ledger that disagrees with the statement, a fraudster who walked through an open door — each of these is a real, measured, sometimes un-recoverable loss. The entire discipline of payment engineering exists because of that asymmetry.
We have had years of that education on our own platform. Every 'we should have known' that a live system hands you, we have been handed — and every one of them is now a rule, a check, a constraint or a test below.
04
Kenya's money moves on M-Pesa, and M-Pesa moves through Safaricom's Daraja API — it is where this studio earned its production scars, and it is one rail among many. We integrate the rails the market actually uses: M-Pesa/Daraja, PayPal, Stripe, PayStack, cards, bank transfers and the gateways a client already runs, all as adapters behind the same ledger — never shoehorning an international mental model over a Kenyan reality, and never settling for 'it works in a sandbox'. These are the rails our own platform runs on:
The rail matters less than the discipline around it. We have wired all of these into the same architecture — one ledger, one lifecycle, one callback discipline — so a customer pays the same way the platform guarantees money, whichever rail carried it. The M-Pesa/Daraja path holds the deepest scars; the PayPal, Stripe, PayStack, card and bank paths clear the same verification, idempotency and reconciliation rules before a single shilling moves on them.
05
A payments platform we build is not a Daraja integration with the occasional bolt-on. It is a rail-agnostic payments layer: one ledger, one lifecycle, one set of money rules, and every payment provider as an adapter behind it. M-Pesa and Daraja are the rails where the studio has lived production scars — the callbacks that arrive twice, the sandboxes that lie, the statements that disagree — and every other rail earns the same standard before it carries a shilling:
The value of a multi-rail layer is that the customer pays the way they already pay, and the platform guarantees money the same way on every rail. A verified settlement is a verified settlement whether it arrived through a till, a checkout button or a bank ledger — and it is held to the same claim-then-verify, exactly-once and reconciliation discipline either way.
06
A wallet is more than a number on a screen. It is a double-entry ledger with a current state, a history, a float that backs it and a rulebook about who may touch it and how. We build wallets that behave — under concurrency, under dispute, under fraud, at scale:
A wallet we build must survive the moment a customer looks at it and sees the wrong number at the wrong time — survived means a proof was possible in minutes. That is the standard wallets are held to here.
07
Every payment we accept or disburse passes through a lifecycle with explicit states and explicit transitions. Nothing jumps states; nothing settles twice; everything can be asked 'what state is this in?' and get one true answer:
The discipline is simple to state and brutal to hold: credit each payment exactly once, no matter how many times the gateway, the network or the user says 'again'. The implementation below is how 'exactly once' is actually achieved.
08
On most rails — a Daraja/C2B callback, a PayPal or Stripe webhook, a PayStack notification, a card-processor response or a bank message — the gateway calls your server with 'the customer paid'. On mobile money and many rails, that callback arrives over the ordinary (forgable, replayable) internet. The single most dangerous assumption in payment engineering is that the callback is true. We treat every callback as a claim to verify:
On our own platform this exact loop is what separates the sandbox from production: the sandbox accepts the callback; production asks the gateway to prove it. We bring that proof requirement to every build.
09
At 3pm in a housing estate, a hundred tenants pay rent at once; behind them, a marketing batch triggers and a cron job sweeps stale transactions. If any two of those overlap on the same wallet, the result must still be exactly correct. This is the hardest discipline in the list, and it is non-negotiable for money:
Concurrency bugs are the most expensive bugs in money software because they only reproduce in production, under load, when real money is on the wire. We engineer them out of the architecture, and prove it with tests that simulate the exact overlaps production will throw at us.
10
Networks retry. Gateways redeliver. Humans double-tap. None of that should ever double-charge a customer, but without idempotency, all of it does. Idempotency is not a nice-to-have wrapper on a payment call — it is a property of the transaction itself:
Your payment gateway may be down, your phone may drop the network at the pin pad, and your customer may tap pay three times while nothing seems to happen. All of that is survivable if the transaction remembers itself. Ours do.
11
Fees are where payment platforms quietly leak or customers quietly get robbed — not by malice, but by floating-point arithmetic, static numbers and 'close enough' rounding. Every fee in our systems comes from a configured, maintained table and is computed exactly:
When a customer asks 'why KES 115 not KES 100?', the answer must be a short, exact, true sentence — and the receipt must show it. We engineer the arithmetic so the question is rare and the answer is always right.
12
Fraud is not stopped by a check we hope people run; it is prevented by rules that run always. On a payments platform the adversary is a feature of the environment — harvesters, clean-ups, self-payments, stolen devices, money laundering through features. Every control below is structural:
The design goal is deliberately asymmetric: the legitimate user completes a payment in seconds with zero friction, while the fraudster meets a wall at every feature. Structural rules, not hoping.
13
However good your ledger is, the ultimate truth is the gateway's statement — Safaricom's record of what actually moved on M-Pesa, PayPal's on its rails, the card processor's on cards, the bank's on transfers. Reconciliation is the daily proof that your ledger, your customers' wallets, your float and every gateway's statement all agree. We build it as a system, not a spreadsheet ritual:
We hold our own platform to this and we hold client platforms to it: if the gateway's statement disagrees with your books, someone must be able to explain it in minutes — and the system should have already found it.
14
A payment platform is a stack of accounts: user wallets, an operational float that holds customer money in aggregate, a company revenue account, and the gateway's settlement. The architecture must make it impossible to confuse them — a payout of customer funds should never be able to touch platform revenue by accident:
The moment a platform holds balances, it holds other people's money. Separating the pots is not accounting hygiene — it is the difference between a mistake a customer feels and a mistake a regulator finds first.
15
Recurring money is a particular kind of trust: a promise that keeps charging. Billing cycles, retries, grace and the quiet dignity of a customer who missed a payment — all of it must be exact, gentle and legally defensible:
We run subscription billing against real money on our own platform — trials, auto-renewal, grace windows, KES plans, wallet top-ups. These mechanics are precisely the ones we hold ourselves to, and we hold your platform to the same.
16
Payment systems hit scale spikes few other software sees: payday, rent day, the first of the month, a viral promotion, a disaster appeal. The system must be right and fast at all of them, and slow money software is money software users abandon:
A rent platform that is slow on the fifth of the month is a rent platform that taught its users to use cash again. We build payments that stay fast when it matters most — because that is when the money matters most.
17
Money attracts regulators the way blood attracts sharks, and the regulation is not optional theatre — it is the operating licence. We build systems that make the compliance conversation easy because the truth is inspectable:
We are not lawyers and we do not pretend to be — but we build the machinery that makes the legal team's life easy. When the books are provable, the compliance conversation stops being scary.
18
The process is the same whether we are building your money module or operating (and improving) the one that runs our own platform. It is disciplined, honest, and shipped in stages a business can absorb:
You own the ledger, the code, the gateway keys and every audit. No hostageware, no 'you must stay on our cloud to keep your finances' — the money machinery is yours.
19
Because money is involved, we are direct about the trade-offs — the ones a vendor who wants the logo would never mention:
We will tell you honestly when your model, your volumes or your market does not need a full blown ledger-and-float platform — and give you the smallest correct build. And when it does need the real thing, this is the real thing.
The toolchain
This is the exact stack powering a live, production payment platform on M-Pesa — the same machinery we bring to every transaction system we build. Every layer exists because a live system required it.
01
Where the truth lives
02
How money actually moves
03
Exactly once, under pressure
04
Structural walls, not hope
05
Running money while you sleep
06
One truth, many faces
07
Failure rehearsed before money moves
Lifecycle
Building and running a payment system is a standing discipline. This is the lifecycle every transaction system we build or operate passes through — including the one we run ourselves.
01
Map every money movement in the current system: double-fire risks, reconciliation gaps, fraud surface, fee leaks.
02
Accounts, entry types, references, states and the float/revenue split — the books decided before screens.
03
Every state and transition; 'exactly once' as a property of the schema.
04
Real keys, real callbacks, real verification loops against the gateway's own status APIs.
05
Locks, idempotency, rate limits, escrow, holds and the structural fraud rules.
06
Fees from the ranges table, exact amounts, shortfall messages, receipts agreed in numbers.
07
Daily match against the statement, drill-down, scheduled job and exception workflow.
08
Apps, web, admin, API — every surface wired to the one ledger.
09
Replays, races, double-callbacks, network drops, freezes, reversals — simulated in the build.
10
Monitoring on the money paths, cron sweeps, support logs, incident runbooks.
11
The statement matched every day; anomalies surfaced as workflows, never as surprises.
12
More rails, more volume, more markets — added to the architecture, never as a bolt-on.
Closing
Payment and transaction systems are where software stops being an app and starts being a promise with a ledger behind it. We build the promise so it holds — under concurrency, under fraud, under regulators and under your busiest hour. That includes:
A payment platform is a promise: that the money you see is the money you have. Everything above exists to make that promise true, all the time, at whatever volume lands on it.
We run one of these every day. When you need one, you get the system that survived being live — not the one that survived only a sandbox.
Previous capability
API Development
Next capability
Business Software
The discipline above is what we run on our own products every day. If it would help on yours, our door is open.