Invariant Workshop
Collaborative sessions to identify the properties your system must always maintain. This is the foundation—get the invariants right and the tests practically write themselves.
Example-based tests prove your code works for the cases you thought of. Property-based tests prove it works for cases you didn't know existed.
The hardest bugs to find are the ones you never thought to test for. Property-based testing flips the script: instead of writing individual test cases, you define the rules your system must always obey, and the framework generates thousands of inputs trying to break those rules. I help teams implement this approach with meaningful invariants, well-designed generators, and integration into existing CI/CD pipelines—not just academic exercises.
Collaborative sessions to identify the properties your system must always maintain. This is the foundation—get the invariants right and the tests practically write themselves.
Custom data generators refined for your specific domain. Good generators are the difference between finding real bugs and wasting CPU cycles on irrelevant inputs.
Implementation with PropEr, Hypothesis, or custom frameworks matched to your stack. Includes shrinking strategies so failing cases are minimal and debuggable.
Property-based tests wired into your existing test suites and pipelines. Configured to run fast in CI but deep on nightly builds for maximum coverage.
Property-based tests that caught integer overflow bugs, off-by-one errors, and boundary violations that example-based tests never exercised.
Generators that found concurrency bugs in supposedly thread-safe code by exploring interleavings no developer would think to test manually.
Input generation focused on the boundaries that actually break your system—not random noise, but informed exploration of your domain's edge cases.
Property-based testing isn't about writing more tests—it's about writing tests that explore the space your code operates in. If you're building anything where correctness matters, let's talk about what your invariants actually are.