Ensure stability at scale
Trading software crashes or bad market data can wipe out your trading edge instantly.
Equally, flaky tests — often caused by multithreading issues in complex code — signal an unstable codebase that’s killing developer productivity and risks million-dollar bugs making it to production.
These issues are hard-to-reproduce, so they either go unfixed (posing hidden risks to production) or consume weeks of engineering effort, delaying releases.
SHIP WITH FEWER BUGS AND BOOST DEVELOPER PRODUCTIVITY
Enable your engineers to examine the full state of the program at any point in time during its execution – across sub-systems and threads. Tracing the data flow by stepping back in code execution couldn’t be easier.
- RECORD a process and capture everything the code did during a failing run in a single file containing the whole execution history – every line in every thread, every variable, every I/O – giving engineers an instant reproducer, so they can start debugging straight away without wasting time trying to reproduce the issue.
- REPLAY the recording back and forth, step back to any point in the execution history to see what happened and why.
- RESOLVE by tracing from the error back to the root cause in a single debug cycle (without having to restart the debug session or recompile). No known bug remains unsolved.
This simple workflow significantly reduces the time the team spends debugging quant libraries, low-latency trading systems, or real-time market data distribution platforms.
Race conditions in multithreaded code are particularly difficult and time-consuming to identify.
So Undo comes with a capability called thread fuzzing. It’s a way of manipulating the way that threads are scheduled, making concurrency bugs statistically more common. Engineers can shake the CPU scheduler and see what falls out.
Thread fuzzing is typically enabled in existing unit tests or continuous integration tests to shake the codebase and expose hidden race conditions. Because the failures are recorded, they become a lot easier (and faster) to fix.
Thread fuzzing is used by engineering teams who need to ensure their codebase is stable and issues are caught early before they go anywhere near deployment.