Swasthya Sarathi
A healthcare-companion platform for Swasthya Sarathi
A website and mobile app development project for a multi-service healthcare companion — It helps peo...
Read itRBI · UPI/NPCI · eKYC · PCI-DSS
In fintech a bug is a reconciliation break. We build double-entry ledgers that match the bank every day. Our UPI integrations handle the ways the UPI system really fails. We build KYC as clear steps from the first sprint.
Last updated
The most common thing we are called in to fix in fintech is a product where the user's balance is just a number in a table. It gets updated inside a transaction. Somebody writes a data fix to correct a mismatch. Within a year the total of the balances does not match the money in the bank. A stored balance has no history, so nobody can say why. A balance is the sum of a double-entry ledger that can never be changed, only added to. A correction is a new reversing entry, never an edit. You can work out any account's balance at any moment in the past. It is matched against the bank statement every day, automatically, with an alarm on any mismatch. We build that first — before the app, before sign-up, before anything a founder wants to show. Everything else in a fintech product depends on the money being provably correct.
Talk about your productEvery day we match the books to the bank statement, automatically. A mismatch raises an alarm. It does not wait to be found at month end.
Every payment request carries an idempotency key. A retry cannot debit twice. That is the bug you cannot say sorry for.
Against the NPCI settlement file. A payment succeeding and the money arriving are two different events — we track both.
No card number ever touches your servers. We use tokens and hosted fields. PCI becomes a questionnaire instead of a big project.
Fintech is the one domain where a bug is not a bug. It is a reconciliation break, a regulatory breach, or somebody's salary that did not arrive. The way we build is different, and it starts before the first line of code with a question most teams answer too late: what licence are you working under, and whose?
The most common design failure we are called in to fix is a fintech product where the balance is a column on the users table. It gets updated in a transaction, somebody writes a data fix for a mismatch, and within a year nobody can explain why the total of the balances does not match the money in the bank.
A balance is not a number you store. It is the sum of a ledger that can never be changed. Every movement of value is a double-sided entry, entries can only be added, and a correction is a reversing entry that leaves the original safe and visible. For any account at any moment in the past, the system must work out a balance from its entries. That balance must match the bank statement, every single day, automatically, with an alarm on any mismatch. This is not optional and it is not something you add in year two.
UPI is a bank-to-bank rail, and it fails in its own ways. A collect request can be approved by the user thirty seconds after your system timed it out. A callback can arrive twice, or never. A transaction can sit in a state where you cannot be sure it worked or failed — and the only right action is to keep asking for the status, waiting a little longer each time, until the rail tells you.
So: idempotency keys on every request, so a retry cannot debit twice. A status check job that sweeps pending transactions instead of waiting for callbacks to arrive. Never mark a payment successful on a callback alone; check with the rail. And match the money against the NPCI settlement file, because a payment succeeding and the money arriving are two different events, a day apart and sometimes split by a dispute.
eKYC through Aadhaar has limits on who may use it and how. Video KYC has a process set by RBI with recording, geotagging and a real person. Minimum KYC limits what a wallet may hold and what it may do. CKYC lets you fetch an existing record instead of collecting it again.
These are product decisions dressed up as rules, and they must be made before design, not during it. A wallet whose limits change when a user completes full KYC needs that built as clear steps from the first sprint. Adding it later means changing every transaction path in the code, and you will miss one.
Data localisation: payment data stays in India, full stop. PCI-DSS scope, kept small by never touching a card number — use tokens and the gateway's hosted fields, and keep your servers out of scope entirely. Audit logs that can only be added to and that an engineer with live-system access cannot edit. Separate environments with test rails. And a guide for the day the rail is down, because it will be, and "we will figure it out then" is not a plan when money is on the way.
Never changed, only added to, every movement double-sided. Balances worked out, never stored. Corrections are reversing entries.
Daily automatic matching against bank statements and NPCI settlement files, with an alarm on every mismatch we cannot explain.
Idempotency keys, status check jobs for payments that are not clear, and never taking a callback as proof of success.
Minimum, full eKYC, video KYC and CKYC fetch — built as clear steps where limits and permissions follow the tier.
Speed checks, device fingerprinting, a rules engine an analyst can edit without a new release, and a queue of cases for review.
Aadhaar eKYC, PAN and bank penny-drop verification, with drop-off measured at every step, because that is where CAC is decided.
The reports the regulator asks for, made from the ledger and not put together by hand in a spreadsheet the night before.
Two-person approval on every manual change, a full audit trail, dispute handling and a refund flow that cannot be run twice.
Biometric unlock, certificate pinning, no sensitive data stored on the phone, and security built to pass a review.
None of this is advice from a compliance consultant. It is what the rules mean for how we build, and we have built to these rules before.
Payment system data stays in India. That includes an overseas error tracker that logs full request data, which is where teams quietly fail an audit.
Tokens and hosted fields keep card numbers off your servers entirely, which turns PCI from a big project into a questionnaire.
Minimum KYC, full eKYC, video KYC set by RBI with recording and geotag, CKYC fetch. The tier decides what the product may do.
Idempotency, status checks, settlement file matching. A payment succeeding and the money arriving are separate events.
Only added to, and not editable by an engineer with live-system access. If your audit log is a table someone can UPDATE, it is not an audit log.
A managed vault, regular key changes, and no credentials in environment files or CI logs. Assume the code repository will leak one day and plan for it.
Uptime is the basic minimum and nobody will thank you for it. These are the numbers that decide whether the business works. Every one of them should come from the ledger without anyone opening a spreadsheet.
Talk to usBy rail, by bank, by hour. A drop on one issuing bank is a warning sign, not noise, and it should alert somebody.
Per step, not overall. The step that leaks is where the cost of winning a customer is really set.
And every one of them is looked into. A mismatch you put up with becomes a habit.
Median. A customer whose money is missing is not checking your uptime.
A fleet, ePOD and route-planning platform that works offline first, for drivers on roads with poor signal. The two ready...
A Shopify store for a Surat ethnic-wear label. It has 200+ SKUs of lehengas, sarees and suits, sorted by type, colour, f...
A Shopify storefront for a Surat watch and eyewear retailer — where shoppers can browse by gender, brand, style and comb...
Not at month end — today, automatically, with an alarm if it does not. If that question makes you uncomfortable, it is the right time to talk. It is much cheaper to fix now than after you hold live customer balances.
The stack
FAQ
Proof
Swasthya Sarathi
A website and mobile app development project for a multi-service healthcare companion — It helps peo...
Read itMV Tech Education
A website development project for a Bihar vocational institute. It is a course list and admissions s...
Read itPatna Taxi
A website development project for a Patna and Muzaffarpur cab operator. It is a fast taxi-booking si...
Read itLogistics platforms fail in the money, not the map. We build hub-and-spoke networks, drive...
ExploreHealthcare software where the identity system is national, consent is required by law, and...
ExploreEdtech does not fail on engineering. It fails when nobody notices a learner has stopped sh...
ExploreLet's talk fintech software development
A senior engineer reads every enquiry. You'll get a real answer — scope, risk and a number — within one business day.