A lending team in Bengaluru gets a customer grievance about a rejection from October. The question is simple: why was this applicant declined? The answer takes four days, because the rule set has been edited nine times since, the bureau pull is gone from cache, and the model in production is on its third version. The decision was probably correct. It is just not defensible.
Reserve Bank guidelines on digital lending expect lenders to communicate the reasons behind a decision and retain the basis for it. Beyond regulation, the same capability is what lets a risk team improve. You cannot tune a policy you cannot reconstruct.
Snapshot The Inputs, Not Just The Outcome
The instinct is to log the score and the verdict. That is the least useful part. What matters is everything the decision consumed at the moment it was made.
- Bureau payload, stored verbatim. CIBIL, CRIF or Experian responses change as lenders report. The report you pulled on 12 October is not the report you would pull today, so keep the raw response, not a parsed summary.
- Bank statement derivations. Average balance, salary credits, bounce count, and the exact statement period they were computed from. Derived fields drift when the parser is upgraded.
- Policy version. A content hash of the rule set, not a human label like “v2 final”.
- Model version and feature vector. The exact 40 or 60 numbers fed to the model, plus the model artefact identifier.
- External signals. GST filings, EPFO checks, device or alternate data, each with the timestamp it was fetched.
Store these as an immutable decision record keyed by application ID and attempt number. It is a few kilobytes per application. At 50,000 applications a month that is well under a gigabyte a year, which is nothing against the cost of one regulatory query.
Rules And Models Are Different Animals
Hard policy rules, age bands, minimum income, negative area lists, sanction screening, should live in a versioned, human readable rule file that a credit officer can read without a developer present. Deploying a policy change should be a reviewed pull request with an effective date, not a database update.
Scores are different. A model is a probability, not a decision. Keep the threshold outside the model so that risk can move a cutoff from 0.62 to 0.58 without a retraining cycle, and record which cutoff was live. When a portfolio sours, the first question is almost always whether the population shifted or the cutoff did, and only versioned decisions answer that.
Shadow Mode Before Live Mode
Before a new policy or model touches a real applicant, run it in parallel against live traffic for two to four weeks and record what it would have done. You get an approval rate delta, an overlap matrix against the current policy, and a list of applicants where the two disagree. That disagreement list is the most valuable artefact in the whole exercise, because it is where the credit team’s judgement gets tested cheaply.
Teams that skip this stage discover the effect of a change through collections, roughly 90 to 120 days later, which is the most expensive feedback loop available.
The overhead is real but modest. Decision snapshots, versioned policy, an isolated threshold, and a shadow pipeline are maybe three weeks of work on a lending stack that already exists.
At Invexa, we build underwriting systems where every decline can be reconstructed line by line, because a credit policy you cannot audit is a credit policy you cannot improve.