planning-exploratory-testing
Skill118 starsChanged 2 months agoMITView on GitHub
Runs session-based exploratory testing: writes charters, timeboxes sessions, applies coverage heuristics and tours, captures notes as evidence, debriefs, and converts findings into bug reports and automation candidates. Use when a feature needs testing before requirements settle, when scripted cases keep passing while users hit problems, when a release needs a risk sweep with limited time, or when the request mentions charters or exploratory sessions.
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 8 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Use this skill when the useful question is "what do we not know about this yet", and a list of pre-written test cases cannot ask it.
- Distinctive: line 29
Follow the surprise: When something is unexpected, chase it and record the detour.
- Very specific: line 44
If the area is a diff or a release candidate, take the blast radius from analyzing-regression-scope rather than re-deriving it.
- Distinctive: line 81
when a surprise appears, follow it, and write down that you did and what you dropped to do it
- Distinctive: line 82
when blocked, record the blocker and switch charters rather than burning the box
- Very specific: line 88
Every session ends with a debrief, using ./resources/debrief-checklist.md.
- Distinctive: line 127
no timebox, so coverage cannot be counted and sessions run until interest runs out
- Distinctive: line 132
every finding turned into an automated test, including the ones that will never regress
- Distinctive: line 156
every charter names a target, its resources, and what it should discover, and none of them contain steps
- Distinctive: line 160
every charter's "to discover" question is answered or explicitly recorded as open
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Planning Exploratory Testing
Use this skill when the useful question is "what do we not know about this yet", and a list of pre-written test cases cannot ask it.
Exploratory testing is not unscripted clicking. It is simultaneous learning, test design, and execution, made accountable by three things: a charter that says what the session is for, a timebox that makes coverage measurable, and notes that make the session reviewable by someone who was not there. Without those three it is indistinguishable from a demo, which is why it gets dismissed.
When to Use
- a feature is testable but its requirements are still moving
- scripted regression passes while users keep reporting problems
- a release needs a risk sweep and there is not time to write cases first
- a bug was found and its neighbourhood needs sweeping for siblings
- a third-party integration, migration, or legacy area has no coverage and no documentation
- an automation suite needs candidate scenarios grounded in real observed behaviour
Operating Principles
- A charter is a mission, not a script. It names an area, a purpose, and often a specific risk. It never lists steps.
- Timeboxed, so coverage is countable. Sessions are 45, 60, or 90 minutes. "We explored for a while" cannot be planned against or reported.
- Notes are evidence. What was tried, what happened, what was questioned. Written during the session, not reconstructed afterwards.
- Bugs are a by-product, not the objective. The deliverable is information about risk. A session that found no bugs but mapped an area is a successful session, and the notes prove it.
- Follow the surprise. When something is unexpected, chase it and record the detour. That is the mechanism working.
- The charter's questions get answered or explicitly left open. An unanswered question that nobody wrote down is lost coverage.
Workflow
Phase 0: Frame the mission
Establish before any charter is written:
- what changed, or what area is under-known
- what would hurt most if it were broken (feeds charter priority)
- who the users are and what they are trying to accomplish
- what environment, data, and accounts are available
- how much time exists in total
If the area is a diff or a release candidate, take the blast radius from analyzing-regression-scope rather than re-deriving it.
Phase 1: Write the charters
The house format, from ./resources/charter-templates.md:
Explore [target] With [resources: roles, data, tools, devices] To discover [information: risks, behaviours, inconsistencies]
Charter quality rules:
- one area per charter; a charter covering "the whole checkout" produces notes nobody can act on
- name the resource, because it constrains the session usefully: "with an expired card", "on a throttled 3G connection", "as a read-only admin"
- the "to discover" clause is the completion criterion; make it something a reader can tell was answered
- prioritize before writing more. Five charters aimed at real risk beat twenty aimed at surface area
Split charters into three buckets: must run, run if time, and backlog. Say which bucket each is in.
Phase 2: Choose the heuristics
Pick the lenses for each charter from ./resources/heuristics-cheatsheet.md rather than improvising in the moment. The usual starting set:
- SFDIPOT to derive coverage across structure, function, data, interfaces, platform, operations, and time
- CRUSSPIC STMPL for quality criteria beyond "does it work"
- Tours (money, landmark, back-alley, saboteur, obsessive-compulsive) when a charter needs a repeatable angle
- Boundary and state heuristics for input-heavy and workflow-heavy areas
Name the heuristics in the charter. It makes the session repeatable by someone else and reviewable afterwards.
Phase 3: Run the session
Timebox strictly. During the session:
- take notes continuously, in the format from
./resources/session-notes-template.md - record setup, test ideas tried, observations, questions, bugs, and detours
- capture evidence as you go: screenshots, HAR files, console output, request ids, exact timestamps
- when a surprise appears, follow it, and write down that you did and what you dropped to do it
- when blocked, record the blocker and switch charters rather than burning the box
Track the session's time split as you go, roughly: test design and execution, bug investigation and reporting, setup and environment. The split is the most useful number in the debrief.
Phase 4: Debrief
Every session ends with a debrief, using ./resources/debrief-checklist.md. Cover, in order:
- Past: what happened in the session
- Results: what was learned about the area
- Obstacles: what got in the way
- Outlook: what is still unexplored and what the next charter should be
- Feelings: the tester's confidence in the area, stated plainly
The last one is not a soft extra. "I do not trust the refund path and I cannot say why yet" is a valid, actionable finding, and it is the one a status report loses.
Phase 5: Convert the output
A session produces four kinds of output. Route each:
| Output | Goes to |
| Reproducible defect | reporting-bugs |
| Non-reproducible observation | Logged with evidence and a repro attempt count; do not discard |
| Repeatable high-value scenario | Automation candidate list, then designing-functional-tests |
| Requirement gap or ambiguity | Back to the requirement owner; feeds verifying-acceptance-criteria |
| Area still unknown | The next charter |
Automation candidates need a stated reason: it is high risk, it is expensive to check by hand, it will regress. Not everything found by exploring deserves a permanent test.
Phase 6: Report the coverage
Report in sessions and charters, not in feelings. The coverage summary in ./resources/session-notes-template.md gives:
- charters planned, run, and outstanding
- session count and total time
- the time split across design, investigation, and setup
- areas covered, with a confidence level per area
- areas deliberately not covered, with the reason
That last line is what makes an exploratory report usable in a release decision. Hand it to assessing-release-readiness.
Common Failure Modes
- charters that are scripts: numbered steps and expected results, which is a test case wearing a charter's name
- no timebox, so coverage cannot be counted and sessions run until interest runs out
- notes written from memory after the session, which lose the surprises and the detours
- measuring the session by bug count, which rewards shallow sweeps and punishes deep ones
- exploring the area that is easy to reach rather than the area that carries risk
- the tester learned something important and it stayed in their head because there was no debrief
- every finding turned into an automated test, including the ones that will never regress
- exploratory results reported as "we tested it and it looked fine", which no release decision can use
Resource Map
./resources/charter-templates.md- charter format, worked examples per context, and charter smells./resources/heuristics-cheatsheet.md- SFDIPOT, CRUSSPIC STMPL, tours, and input, state, and data heuristics./resources/session-notes-template.md- during-session note format, coverage summary, and a worked example./resources/debrief-checklist.md- the PROOF debrief, questions to ask, and the routing decision per finding
Related Skills
designing-functional-tests- when exploratory findings should become structured cases or a regression sliceanalyzing-regression-scope- when the area to explore should be derived from a diffreporting-bugs- when a session finding becomes a defect reportdesigning-test-data- when a charter needs deliberate inputs prepared in advanceverifying-acceptance-criteria- when exploration exposes a gap between built and specified behaviourassessing-release-readiness- when session coverage feeds a go/no-go decisiontesting-application-security- when a charter targets authorization or input handling
Definition of Done
This skill is complete when:
- every charter names a target, its resources, and what it should discover, and none of them contain steps
- charters are prioritized by risk into must-run, if-time, and backlog
- each session is timeboxed and its heuristics are named up front
- notes were written during the session and carry evidence for every observation
- every charter's "to discover" question is answered or explicitly recorded as open
- each session has a debrief covering past, results, obstacles, outlook, and confidence
- findings are routed to bugs, automation candidates, requirement questions, or the next charter
- the coverage report states what was not covered and why
In this repository51 other files it gives its agents.
- analyzing-quality-metricsSkill
- analyzing-regression-scopeSkill
- api-playwright-test-developerSkill
- assessing-comprehension-debtSkill
- assessing-release-readinessSkill
- attesting-manual-verificationSkill
- auditing-accessibilitySkill
- code-review-advancedSkill
- code-reviewSkill
- communicating-quality-findingsSkill
- creating-custom-agentsSkill
- creating-hooksSkill
- creating-instructionsSkill
- creating-orchestration-packsSkill
- creating-pluginsSkill
- creating-promptsSkill
- creating-skillsSkill
- deriving-a-quality-contractSkill
- designing-functional-testsSkill
- designing-test-dataSkill
- documenting-test-suitesSkill
- generating-quality-gate-workflowsSkill
- governing-quality-waiversSkill
- handling-sensitive-test-dataSkill
- migrating-tests-to-playwrightSkill
- mocking-network-and-timeSkill
- prd-generatorSkill
- recording-change-intentSkill
- reporting-bugsSkill
- requirements-test-coverage-mapperSkill
- reviewing-ai-output-groundednessSkill
- running-visual-regression-testsSkill
- scoping-change-relevanceSkill
- static-code-analysis-typescriptSkill
- tech-debt-analysisSkill
- test-driven-development-quickSkill
- test-driven-developmentSkill
- testing-agent-skillsSkill
- testing-api-contractsSkill
- testing-application-securitySkill
- testing-llm-featuresSkill
- testing-llm-guardrailsSkill
- testing-performance-and-loadSkill
- tracing-requirements-to-codeSkill
- tracking-quality-trendsSkill
- unslop-answersSkill
- unslop-testsSkill
- verifying-acceptance-criteriaSkill
- verifying-change-coverageSkill
- writing-unit-tests-quickSkill
- writing-unit-testsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

