Plans and runs time-boxed exploratory testing when tester hours are scarce before a release - one tester with two free 45-minute blocks before code freeze, a high-stakes window such as year-end payroll, or a device and environment the scripted suite never touches. Session-based per the Bachs' SBTM: charters (Explore X with Y to discover Z), 60-90 minute sessions, session sheets with TBS metrics, and the PROOF debrief. Bundles the exploration heuristics as references - Whittaker's seven tours, Kelly's FCC CUTS VIDS, Bach's SFDPOT. Broader than exploratory-charter-author, which writes one charter document: this owns the whole cycle from budgeting the available hours to debriefing what was found. Use when deciding what to explore with the time available, and how to run and record those sessions.
97
94%
Does it follow best practices?
Impact
98%
1.00xAverage score across 10 eval scenarios
Passed
No findings from the security scan
Deep reference for exploratory-testing SKILL.md. SFDPOT is James Bach's
"San Francisco Depot" heuristic - a catalogue of what can be varied
during testing. Published at
satisfice.com
and in James Bach's testing-curriculum materials.
If HICCUPPS-F (hiccupps-f.md) catalogues what to compare against (oracles), SFDPOT catalogues what to change during exploration. Together they form a complete "how to think about a session" pair.
The worked example below applies exactly these steps to a checkout charter.
SFDPOT names six axes of variation. Pick one or more per session.
| Dim | What to vary | Sample variables |
|---|---|---|
| S - Structure | how the system is built | code paths, build options, module topology, cache / buffer state, cluster vs single instance |
| F - Function | what the system does | individual features, feature combinations, error / recovery paths, undo / redo / rollback |
| D - Data | the values it handles | boundaries (0, max, max+1), encodings, volumes (empty to 1B), corruption, null / NaN / Infinity |
| P - Platform | the environment it runs on | OS, browser, device, hardware, network (bandwidth / latency), locale |
| O - Operations | how it is used | workflows, user goals, novice vs expert pacing, concurrency, frequency |
| T - Time | when / how long things happen | duration, order (A then B vs B then A), race conditions, clock edges (DST, leap day), TTLs, session expiry |
Data varies what values; Operations varies how the user moves through.
What can I vary about how the system is built?
The internals of the system. Includes:
A "Structure" exploration might toggle internal options, route through a non-standard code path, or inspect how the system behaves under a non-default build.
What can I vary about what the system does?
The feature surface area. Includes:
A "Function" exploration runs each function - and especially combinations - that the test plan didn't enumerate.
What can I vary about the values the system handles?
The input + state space. Includes:
A "Data" exploration feeds pathological inputs - see
malicious-payload-bank for canonical payloads.
What can I vary about the environment the system runs on?
The deployment platform. Includes:
A "Platform" exploration tests across the matrix - compose with the browser/OS matrix skills in qa-web-e2e / qa-ci-integration for systematic matrix testing.
What can I vary about how the system is used?
User behaviour patterns. Includes:
An "Operations" exploration simulates real user workflows rather than test scripts.
What can I vary about when / for how long things happen?
Temporal dimensions. Includes:
A "Time" exploration is the hardest to plan - many time-related bugs require deliberate clock manipulation.
Charter: "Explore the checkout flow to discover bugs."
Apply SFDPOT to plan the session:
- **S - Structure:** Toggle the `feature-new-checkout=true` flag
in middle of the session to compare old vs new code paths.
- **F - Function:** Stack multiple promos; combine with gift card;
combine with store credit. Trigger refund mid-checkout.
- **D - Data:** Cart with 0 items, 1, 100, 1000 items. Cart with
free items only. Cart with $0.01 total. Cart with $9999.99
total. Invalid product IDs.
- **P - Platform:** Safari iOS (autofill / Apple Pay), Chrome
desktop, low-bandwidth Android.
- **O - Operations:** Add, remove, re-add an item. Navigate
away and return. Refresh during payment processing.
- **T - Time:** Apply a promo that expires in 1 minute, then
delay 70 seconds. Open two tabs simultaneously and check out
from each.This shapes a richer session than "click around the checkout page." Each bullet becomes one mission line in the charter.
| Heuristic | What it catalogs |
|---|---|
| SFDPOT | What to vary during exploration |
| HICCUPPS-F | What to compare against when interpreting observations |
| FCC-CUTS-VIDS | What to list about the system (specification-style) |
| CRUSSPIC-STMPL | Quality criteria to evaluate against |
| Tours (Whittaker) | Themed exploration missions |
They're complementary, not competing - a strong session uses multiple. Bach + Bolton's Rapid Software Testing curriculum teaches all of them as a toolkit.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Picking one dimension only | Other dimensions yield bugs the chosen one misses | Mention each dimension's pick in the charter |
| Skipping Time | Time bugs are common but easy to forget | Always consider T in any session involving state |
| Confusing Data + Operations | Variants overlap | Data = what values; Operations = how the user moves through |
| Pre-scripting SFDPOT into test cases | Defeats exploration | SFDPOT is for generating ideas; the tester decides moment-to-moment |
| Operations as "user persona testing" | Not exactly: Operations is variant-of-use, not variant-of-user (which is Platform's locale + skill / familiarity) | Treat O as variation of use-patterns |