Payroll Testing: Why 'It Ran' Is Not 'It's Right'
A payroll run completing without error tells you the plumbing works, not that the numbers are correct. Real testing checks the answers.
The most dangerous phrase in a payroll project is 'the run completed successfully'. That tells you the process didn't crash. It says nothing about whether anyone was paid the right amount. Real payroll testing checks the answers, not just that the machine turned over.
Test scenarios, not just a clean run
Build a test population that covers the awkward cases, new starters, leavers, retros, overtime, salary sacrifice, garnishments, and verify each produces the right result. A clean run on simple cases proves almost nothing.
Compare to a known-correct source
Test results need something to check against, a hand calculation, the legacy system, an agreed expected value. A number with nothing to compare it to is just a number you're hoping is right.
Regression test every change
A config change to fix one thing can quietly break another. Re-run your test scenarios after every change so you catch the side effect before it reaches someone's payslip.
Real scenario: a client signed off payroll because every run 'completed'. Then a salary-sacrifice case that nobody had tested paid wrong in production and it took three months to notice. We built a proper scenario test pack checked against hand calculations. Bugs got caught in test, not in pay. 'It ran' is not 'it's right', test the answers.