Cancellation reason
Categorize why a customer is cancelling, for product and pricing insight. The cancellation always goes ahead.
F@fLimits to keep in mind
Never use the reason to delay, block or add steps to a cancellation.
Problem
Cancellation surveys get a free-text answer that nobody reads, or a forced dropdown that hides the real reason.
Goal
Turn cancellation comments into reasons product and pricing teams can count, while the cancellation itself is processed as asked.
Input / state
What the customer wrote when cancelling, and their plan.
- comment
- The customer's cancellation message or survey answer.
- plan
- Plan and tenure, for reporting.
Decision question
cancellation_reasonWhat is the main reason the customer gives for cancelling?
Options
too_expensivePrice, budget cuts or poor value for money.missing_featureNeeds a capability the product doesn't have.switching_toolsMoving to a named or unnamed competitor or an in-house tool.not_using_enoughNot using it, project ended, or team too small.technical_problemsBugs, outages, performance or integrations not working.temporary_pauseExpects to come back, for example seasonal work or a break.
Allowed outcomes
Decided in your code from the answer and its confidence. Thresholds are yours to set and test.
- Too expensiveChoice is too_expensive and confidence meets your threshold.
- Missing featureChoice is missing_feature and confidence meets your threshold.
- Switching toolsChoice is switching_tools and confidence meets your threshold.
- Not using enoughChoice is not_using_enough and confidence meets your threshold.
- Technical problemsChoice is technical_problems and confidence meets your threshold.
- Temporary pauseChoice is temporary_pause and confidence meets your threshold.
- Record as unclearConfidence is below your threshold: probability is spread across options.
Example scenarios
Predefined demonstrations. No model is called; the outcome shown is an illustrative judgment.
Example state
{
"plan": "Team, 14 months",
"comment": "Budget got cut for next quarter, can't justify it right now."
}Outcome
IllustrativeChoice is too_expensive and confidence meets your threshold.
Why
Budget is the stated reason.
Using it well
- Process the cancellation before or regardless of this answer. The reason is for insight, never a gate.
- Technical problems are worth a follow-up from support after the cancellation is confirmed.
Request definition
POST https://api.typesafe.ai/v1/systemone{
"model": "jev-latest",
"state": {
"comment": "<comment>",
"plan": "<plan>"
},
"questions": {
"cancellation_reason": {
"type": "choice",
"instructions": "What is the main reason the customer gives for cancelling?",
"criteria": {
"too_expensive": "Price, budget cuts or poor value for money.",
"missing_feature": "Needs a capability the product doesn't have.",
"switching_tools": "Moving to a named or unnamed competitor or an in-house tool.",
"not_using_enough": "Not using it, project ended, or team too small.",
"technical_problems": "Bugs, outages, performance or integrations not working.",
"temporary_pause": "Expects to come back, for example seasonal work or a break."
}
}
}
}Request shape from the System One API reference; a Kev server accepts the same body. Replace the placeholder state with your data. Requests need your own API key or server.
Version History
Initial version