Antithesis is an autonomous testing platform that finds bugs in your software with perfect reproducibility.

Connect with Will Wilson on

The Stack Overflow Podcast

In a deterministic simulation, you can debug with time travel

Key Takeaways

Deep Dive

Will Wilson's Journey into Software Engineering

- Did not study computer science in college - Initially believed tech innovation was "over" in the early 2000s - Discovered programming's value by writing a Python script to automate a tedious task

- Self-taught programming through online classes - Created personal projects including a ray tracer and compiler - "Bluffed" his way into tech jobs, starting with FoundationDB

Introduction to Deterministic Simulation Testing

- Company used "deterministic simulation testing" - Runs systems through thousands/millions of potential event scenarios - Enables organizations to mitigate risks when hiring less experienced engineers, enable faster team movement, and prevent bugs from reaching production

- Originally developed at FoundationDB as a testing technique - Converts systems into completely predictable, reproducible states - Addresses inherent non-determinism in real-world software from user inputs, clock checks, file system reads, network communications, and multi-threaded operations

- Enables precise testing of rare or complex scenarios - Can simulate specific system conditions (e.g., network connection drops) - Allows repeated reproduction of hard-to-catch bugs - More advanced and controlled than traditional chaos testing - Can run without impacting production systems

Technical Implementation and Capabilities

- Creates a deterministic computing environment that emulates a deterministic computer - Software runs identically each time with minimal modifications - Ensures consistent random number generation and can control random seeds to expose bugs

- Two approaches for managing external dependencies: 1. Run entire dependencies within the virtual machine 2. Use mocking/stubbing techniques with pre-built mock services

- Testing complex distributed systems and microservices - Helping customers understand potential system breakages during changes - Acts like a "time machine" for debugging with replay capabilities - Enables "counterfactual debugging" - pausing, rewinding, and investigating bug conditions - Particularly valuable for rare, hard-to-reproduce bugs

Philosophy and AI Integration

- Focuses on augmenting human productivity, not replacing engineers - Goal is eliminating the tedious 50% of software engineering work (primarily debugging) - Explicitly opposes AI vendors claiming engineers are obsolete

- At FoundationDB, they prioritized fixing simulator issues before production bugs - Current simulation requires software and dependencies to fit within single computer memory - Can leverage large cloud computing resources (tens of terabytes of memory) - Future plans include potential distributed simulation across multiple hypervisor instances

- Gen AI particularly useful for software testing because hallucinations can be a feature - Can generate both correct and incorrect usage scenarios - Helps explore diverse ways of potentially breaking systems

Implementation Strategies for Different Scenarios

- Start with "clean slate" with no existing bugs - Use simulation testing to prevent bugs from entering codebase - Maintain high productivity by immediately identifying and rolling back bug-introducing changes - Example: Carl Sphere's experience building Postgres SQL synchronization system

- Most common scenario: inheriting large, complex systems with existing bugs and flaky tests - Recommended approach when discovering numerous bugs: - Don't panic - First identify and address critical production issues - Prioritize high-priority bugs causing immediate customer problems - Maintain tracking system for discovered bugs to prevent future occurrences

Managing Technical Debt with New Features

- Focus on preventing new bugs rather than immediately addressing all existing bugs - Antithesis now allows configuration to highlight only new bugs - Benefits include stopping new bug accumulation, avoiding time-consuming root-causing of old bugs, and providing methodical technical debt management

- Acknowledges potential engineer skepticism about the approach - Emphasizes that while not perfect, this method can significantly improve workflow for teams overwhelmed by technical debt - Goal is systematic software quality improvement and production risk reduction

More from The Stack Overflow Podcast

Explore all episode briefs from this podcast

View All Episodes →

Listen smarter with PodBrief

Get AI-powered briefs for all your favorite podcasts, plus a daily feed that keeps you informed.

Download on the App Store