The Dollar Bet that Fuzzed Figma: Exploding Laptops and UI Reliability with Jonathan Chan
Categories: Podcasts , The BugBash Podcast
FuzzMap automates React UI stress-testing using coverage-guided fuzzing inspired by AFL, facing challenges in instrumentation, state visualization, and Reacts pure-function model, while employing Babel and state reduction for efficiency. Future goals include full-stack fuzzing, LLM integration, and balancing coverage depth with computational limits in testing frameworks.
The BugBash Podcast
Tool vendor Antithesis podcast. Also the Bug Bash conference with videos on YouTube
Episode Details
- Show Notes: https://podcasters.spotify.com/pod/show/antithesis1/episodes/The-Dollar-Bet-that-Fuzzed-Figma-Exploding-Laptops-and-UI-Reliability-with-Jonathan-Chan-e3guspc
- Published: 2026-03-25T13:02:01Z
- Duration: 00:51:12
- Author: Antithesis
Overview
The podcast discusses FuzzMap, a tool designed to stress-test React user interfaces by automating fuzz testing to uncover crashes and edge cases. Inspired by conversations at Figma, the project aimed to replicate the thoroughness of human-led “Bug Bash” testing but through automated, coverage-guided methods. The technical approach involved adapting principles from tools like AFL (American Fuzzy Lop), such as branch coverage tracking, but required complex instrumentation of Reacts internal state transitions. Challenges included visualizing and debugging complex UI states, as well as the limitations of Reacts pure-function model, which simplified instrumentation but made simulating certain state interactions difficult. The team used Babel for compile-time instrumentation and explored techniques like state reduction (e.g., collapsing loop iterations) to improve fuzzer efficiency, though this sacrificed some granularity in tracking edge cases.
The discussion also highlighted practical hurdles in testing, such as reliance on Selenium scripts running on an unreliable MacBook and the need to manually maintain test environments. Future directions for FuzzMap included expanding to full-stack fuzzing and integrating with large language models (LLMs) to enhance automated testing. The project blended academic rigor (e.g., applying linear temporal logic for system property analysis) with pragmatic experimentation, such as hacking Reacts internal structure to prioritize purity for fuzzing. Visualizing state transitions through a “fuzz map” posed challenges due to the complexity of tracking inputs and UI changes, especially when incorporating network interactions or handling asynchronous events. The tools development also touched on broader issues like balancing coverage depth with computational efficiency and the limitations of current testing frameworks in capturing real-world interactions.
What If
-
What if you automated end-to-end testing with a headless browser and CI/CD integration?
- Move: Set up a headless Chrome instance via Docker on a cloud provider (e.g., AWS or GitHub Actions) for reliable, hardware-agnostic test runs. Replace the “MacBook in the closet” setup with automated job triggers.
- Why now: The text highlights the unreliability of physical hardware (e.g., battery failure, sticky notes) and the inconvenience of manual 15-minute test cycles. Modern CI/CD tools and headless browsers solve these pain points.
- Expected upside: Eliminate hardware dependency, reduce manual intervention, and ensure tests run consistently at scale.
-
What if you applied AFL-style coverage-guided fuzzing to React components with Babel instrumentation?
- Move: Use Babel plugins to instrument React code for branch coverage tracking and integrate with a fuzzing framework like FuzzMap to generate state transitions and detect crashes.
- Why now: The text describes FuzzMaps struggle with Reacts pure-function model and the need for coverage-guided strategies. Babels tooling is already part of React workflows, making this a practical integration.
- Expected upside: Identify edge-case bugs in UI components faster than manual testing, improving reliability without relying on network-heavy or unstable tools.
-
What if you prototyped an LLM-driven test-case generator for Playwright or Cypress?
- Move: Train a small LLM (e.g., using a fine-tuned model on your apps UI structure) to generate action sequences (e.g., clicks, form inputs) for Playwright/Cypress tests, focusing on state transitions.
- Why now: The text discusses LLMs potential to break down UI components into testable parts and generate test cases, despite efficiency challenges. Solo developers can experiment with lightweight LLMs or APIs (e.g., Replicate).
- Expected upside: Reduce manual test scripting effort and discover hidden edge cases via creative input sequences, even if LLMs arent perfect for deterministic tasks.
Takeaway
- Implement coverage-guided fuzzing with Babel instrumentation for React apps to detect edge-case crashes, using branch coverage tracking similar to AFL (American Fuzzy Lop) and state mutation techniques discussed for FuzzMap.
- Automate UI testing environments using cloud-based services (e.g., AWS, GitHub Actions) instead of relying on unstable local hardware (e.g., the “MacBook in a janitorial closet” example) for end-to-end tests.
- Leverage state reduction strategies like exponential bucketing and collapsing loop iterations (e.g., 0/1/2) to improve fuzzing efficiency, avoiding redundant state persistence while maintaining meaningful coverage.
- Integrate LLM-generated test cases for React apps using tools like Playwright, but prioritize cost-effective microtasks (e.g., targeted component breakdowns) to avoid high token usage and unreliable large-scale LLM outputs.
- Create abstract state transition maps for UIs, prioritizing conceptual branches (e.g., additive vs. distinct validation errors) and using visualization frameworks to balance detail with usability, as demonstrated in the “fuzz map” concept.
For a PDF of longer Software Testing Podcast Episode Summaries with Briefing Notes and more detailed summary notes, visit EvilTester Patreon Podcast Summaries.