Of all 17 design aspects, non-repudiation may be the most overlooked – possibly because the term itself is largely unknown to most people. Surprisingly, it turns out to be a design goal that contributes significantly to the auditability, integrity, testability, operability and recoverability of your design.

Non-repudiation ensures that your architecture captures proof of every interaction with external systems. This helps during development and testing when there’s confusion about whether transactions between systems happened or not, and whether they were received and accepted as valid, or rejected as invalid.