Exploratory Testing Charter Writing: From Vague Missions to Focused Sessions

Exploratory Testing Charter Writing: From Vague Missions to Focused Sessions

A charter is the mission statement for an exploratory testing session. Done right, it focuses a tester's attention without scripting their behavior. Done wrong, it produces either aimless wandering or checkbox execution.

Writing good charters is a skill. This post covers the mechanics.

The Charter Formula

The standard charter template is:

Explore [target area] using [resources/techniques] to discover [information/risks]

Examples:

  • "Explore the payment flow using declined card codes to discover error handling gaps and user experience failures"
  • "Explore user profile settings using concurrent tab edits to discover race conditions and data loss scenarios"
  • "Explore the file import API using malformed XML and oversized files to discover input validation and resource limit behavior"

Each part does specific work:

  • Target area: defines scope — what system, feature, or flow
  • Resources/techniques: constrains the approach — forces intentional method selection
  • Discovery goal: focuses attention — what kind of information are you hunting?

The formula isn't mandatory. Short charters work for experienced testers: "Hammer the notification system with rapid state changes." But the formula prevents the two worst charter failures: no scope and no purpose.

Charter Scope: The Goldilocks Problem

Too broad: "Test the application"

Too narrow: "Verify that clicking the Save button with a valid form saves the record"

Just right: "Explore the bulk import feature using CSV files with encoding edge cases (UTF-16, BOM markers, mixed line endings) to discover data corruption and parsing failure modes"

The 90-minute test: Can a skilled tester do meaningful exploration of this charter in 90 minutes? If yes, the scope is workable. If no, split it.

The coverage test: If the session produces zero bugs and zero interesting observations, does the tester know they've done something valuable? A scoped charter should make that clear.

Common scope mistakes:

  • Feature-list charters: "Test feature X" with no technique or goal
  • Infrastructure charters: "Test the database" — usually too broad unless narrowed to specific behavior
  • Redundant charters: charters that overlap heavily with existing automated tests

Risk-Framed Charters

The best charters start from risk, not requirements.

Requirements tell you what the system should do. Risk analysis tells you what could go catastrophically wrong. Charter from risk, and you explore the scenarios that matter most.

Risk dimensions to charter from:

Data risks: What happens with boundary values? What about malformed, missing, or malicious data?

Concurrency risks: What happens when multiple users hit the same resource? What if a user edits in two browser tabs?

State transition risks: What happens if the user interrupts a multi-step process? What if an action is triggered twice?

Integration risks: What happens when a third-party API is slow, returns unexpected data, or times out?

Load risks: What happens when the system processes 10x normal volume? What degrades first?

Security risks: What happens when an attacker probes inputs, manipulates tokens, or exceeds authorization boundaries?

Converting risk to charter:

Risk: "Bulk delete might affect wrong records if pagination is involved" Charter: "Explore bulk delete using paginated record sets — select all, navigate pages, delete — to discover incorrect record selection and partial deletion scenarios"

Risk: "Password reset flow might be vulnerable to token reuse" Charter: "Explore password reset as an attacker — attempt to reuse tokens, share tokens across accounts, manipulate token expiry — to assess security of the reset flow"

Charter Categories

Maintain a typology of charter types. Different types surface different bugs.

Function charters: Test that the feature does what it's supposed to do. Basic coverage.

Scenario charters: Follow realistic user journeys through the system. Find integration failures.

Stress charters: Push limits — volume, concurrency, boundary values. Find resource and scaling failures.

Security charters: Probe for vulnerabilities — injection, authorization bypass, information disclosure.

Regression charters: Explore areas affected by recent changes. Find regressions automated tests missed.

New user charters: Approach the system as a first-time user. Find onboarding and usability failures.

Expert user charters: Use power features, keyboard shortcuts, advanced configurations. Find failures in non-default paths.

A balanced charter backlog includes all types. Teams that only write function charters miss the bugs that actually cause production incidents.

Building a Charter Backlog

The charter backlog is the queue of exploration work. It needs active management.

Sources for new charters

Code changes: When a feature ships, generate a charter. "Explore [feature] as released in [version] to discover integration issues and regressions."

Production bugs: Every production incident should produce at least one charter. "Explore [area where incident occurred] using [conditions similar to incident] to discover related failure modes."

User feedback: User complaints point at real failure modes. Convert them to charters.

Spec gaps: Where documentation is vague or missing, write exploration charters. Exploration often discovers what the spec should have said.

Automation gaps: Areas where automated coverage is thin or absent need manual exploration.

Previous session issues: Unexplored territory flagged in session sheets should become new charters.

Prioritizing the backlog

Prioritize charters by:

  1. Risk level: higher impact/probability failures first
  2. Change recency: newly changed areas need fresh exploration
  3. Production incidents: areas that have failed in production deserve immediate attention
  4. Staleness: charters that have never been run

Retire charters when:

  • The feature was removed
  • Multiple sessions show high coverage with no significant findings
  • The risk level dropped (e.g., the feature is now behind a feature flag, usage is negligible)

Charter backlog hygiene

Review the backlog before each sprint. Remove stale charters. Add charters for upcoming changes. Reprioritize based on current risk.

A backlog of 50 stale charters is worse than a backlog of 10 current ones. Staleness creates noise and erodes trust in the process.

Writing for Different Audiences

Who writes charters and who runs them affects how they should be written.

Expert writes, expert runs: Minimal detail needed. The charter is a reminder, not a guide.

Expert writes, junior runs: Add context. Explain why the risk matters. List specific techniques. Suggest starting points.

Business analyst writes: Likely to over-scope. The BA knows the requirements but may not know where the risk is. Review and split these charters before running sessions.

Tester writes their own: Best quality, but needs review. Testers who write their own charters tend to cover their comfort zones and avoid difficult areas.

Pair charter writing: one person drafts, one challenges scope and risk framing. Ten minutes of charter review prevents an unfocused 90-minute session.

Charter vs. Test Case: The Critical Distinction

A test case tells you exactly what to do: inputs, steps, expected outputs. It's a script.

A charter tells you where to explore and what to look for. It's a mission.

Dimension Test Case Charter
Steps Prescribed Tester's choice
Expected result Defined Unknown (you're finding out)
Coverage Exact scenario Area of concern
Execution time Predictable Variable (time-boxed)
Value Regression coverage Discovery

Use test cases for regression. Use charters for discovery. Treating a charter like a test case — following it step-by-step — defeats the purpose. The tester's judgment is the whole point.

Charter Writing Failures

The requirements restatement: Charter just rephrases what the feature should do. No technique, no risk focus. The session becomes ad hoc functional testing.

The impossibly broad charter: "Explore the entire user management system." Even an expert tester can't do this meaningfully in one session. Split it.

The hidden script: Charter actually prescribes steps but calls them a "charter." Kills exploration. If you know exactly what to do, write a test case.

The orphaned charter: Written, never run, never reviewed, sits in the backlog forever. Charter writing without charter execution is waste.

The coverage inflation: Marking a charter "done" after one shallow session. Honest coverage assessment is essential to knowing where you stand.

No risk framing: Charters that list features to touch but don't articulate what could go wrong. The session lacks focus.

Charter Templates by Context

New feature charter

Explore [feature name] as a [user persona] using [primary workflows] 
to discover [functional gaps and usability failures]

Notes: Feature shipped in [version]. Known risks: [brief risk notes].

Security charter

Explore [feature/endpoint] as an attacker using [attack techniques] 
to discover [specific vulnerability types]

Techniques: [SQL injection / XSS / auth bypass / etc.]
Reference: OWASP [relevant category]

Integration charter

Explore [system A] + [system B] integration using [edge case conditions] 
to discover [data integrity and failure handling issues]

Integration points: [API endpoints / events / database tables]

Regression charter

Explore [changed area] after [change description] using [normal workflows + edge cases] 
to discover [regressions introduced by the change]

Changed in: [PR/commit reference]
Previous behavior: [brief description]

Measuring Charter Quality

After each debrief, score the charter retrospectively:

  • Was the scope achievable? (Too broad = split next time)
  • Did the techniques generate findings? (Wrong technique = different approach)
  • Was the discovery goal accurate? (Wrong risk framing = update the risk model)
  • How would you rewrite this charter? (Do it — update the template)

After 20–30 sessions, patterns emerge. Your organization will develop a charter style that fits your product, your risk model, and your team's skills. That institutional knowledge is worth capturing.

Summary

Charter writing is the highest-leverage activity in session-based exploratory testing. A well-written charter produces a focused session. A poorly written one produces noise.

The formula — explore / using / to discover — is a starting point. The real skill is risk framing: writing charters that target the failure modes that matter, not just the features that exist.

Build and maintain a charter backlog. Write charters from risk, code changes, and production incidents. Review and retire stale charters. Pair-review new charters before running sessions.

The charter is not a script. It's a license to explore with a defined purpose.

Read more

Start now free