Benchmarking helped me avoid unnecessary novelty. QRIS was already understood by payers, so the design value came from placing that familiar behavior inside a cash-in use case that previously depended more on channels and account details.
The harder part started after the payer pressed pay. Because the amount was closed and reconciliation depended on one transaction identity, waiting, delayed status, expiry, and retry had to stay consistent with the same bill.
For the next iteration, I would add conversion from amount entry to successful top up, time to resolution, expiry rate, duplicate attempts, and recovery success. Channel share shows adoption, but it does not explain journey quality.