What CXOps is
Link to section “What CXOps is”In 30 seconds
Link to section “In 30 seconds”CXOps, as this Atlas uses the word, is the operating system behind customer experience: it collects what customers say and do across the whole journey, routes each problem to someone who owns it, makes sure the fix happens, and checks that the experience actually improved. Surveys are one part; the others are journey maps, an inner loop that calls unhappy customers back, an outer loop that funds cross-team fixes, and metrics that report their own error.
Written for newcomers, voice-of-the-customer (VoC) managers and analysts, service designers and executive sponsors.
At a glance
Link to section “At a glance”| Question | Short answer |
|---|---|
| Goal | Feedback that changes processes and products, with improvements that are measured |
| Primary users | CX and VoC teams, journey owners, service designers, executives, every team that touches customers |
| In scope | Journey mapping and moments of truth, VoC programme design, NPS/CSAT/CES design and limits, closing the loop, CX governance, omnichannel consistency, text analytics |
| Handed off | Support queues → SupportOps; health scores → CustomerOps; research participants → ResearchOps; roadmap intake → ProductOps; metric layer → AnalyticsOps |
| Prerequisites | None; basic spreadsheet skills and a little statistics help |
| Key outputs | Signal register, journey maps, survey specifications, closed-loop SOP, issue log with owners, CX scorecard |
| Term status | Ambiguous: no standard definition and several competing uses (below) |
| Evidence status | Partially verified: footnoted claims checked against opened sources; paywalled originals (HBR, Gartner) read in summary only |
The naming problem: three meanings of “CX operations”
Link to section “The naming problem: three meanings of “CX operations””No standards body, professional association or foundation defines “CXOps” or “CX operations”. Sources opened for this page use the words in at least three ways:
- Running customer service. Outsourcing vendors describe a contact-centre provider as running “an entire CX operation (people, processes, and technology)”.[1] In this usage “CX” is a newer word for support.
- Running the experience programme across the journey. Front notes that some organisations use “a broader definition of customer experience operations to track the full buyer journey from start to finish”.[2] The Customer Experience Professionals Association (CXPA) does not use the label, but its competency framework describes this work: designing VoC programmes, mining unsolicited feedback from calls, web data and emails, KPI ownership, and executive accountability.[3]
- A services market. Constellation Research’s 2026 shortlist says “Customer experience (CX) operations services span everything from shaping organizational models and defining required technology capabilities to implementing CX technologies and, in some cases, providing technology and operations outsourcing.”[4]
Usage also blends: one vendor blog gives CX Ops ownership of “the sum total” of touchpoints and also the job of making sure “there are enough people to keep the phones answered”.[5] This page takes meaning 2. Forrester draws a similar line: “CX looks across the entire customer journey” and is measured on sentiment such as NPS and CSAT, while customer success is post-sale and outcome-measured.[6] The split used across this Atlas, with reactive service on SupportOps, post-sale success on CustomerOps and journey-wide measurement and governance here, is an editorial distinction, not an industry standard.
What CXOps is not
Link to section “What CXOps is not”- Not a survey team. Surveys without owners for what they find produce a dashboard. Bain’s outer loop exists because most customer-friendly changes cut across functions and need investment.[7]
- Not the front line, user research or marketing measurement. Tickets and renewals belong to the neighbours above; studies to ResearchOps; brand tracking and attribution to MarketingOps.
- Not a delight programme. Gartner reports that service interactions are “nearly four times more likely to lead to disloyalty than loyalty”;[8] CXOps mostly removes friction.
The problem it solves
Link to section “The problem it solves”Without a feedback operation, customers repeat themselves in surveys, tickets and reviews and nobody joins the pieces. Each team improves its own touchpoint while the journey stays broken: Rawson, Duncan and Jones argued in HBR that a narrow focus on touchpoint satisfaction can make customers look happier than they are and distract from the end-to-end journey.[9] And scores become targets (see gaming).
Does better experience pay? The evidence is real but contested. Fornell and colleagues found that ACSI satisfaction scores were significantly related to firms’ market value and that satisfaction-based portfolios beat the market at low risk;[10] Jacobson and Mizik’s re-analysis found little evidence of widespread mispricing, with earlier results driven largely by a few computer and Internet firms.[11] Treat “CX drives growth” as a hypothesis to test in your own business.
Where CXOps comes from and where it sits
Link to section “Where CXOps comes from and where it sits”Origins and evolution
Link to section “Origins and evolution”The parts are older than the label:
- Voice of the customer was formalised in quality engineering. Griffin and Hauser’s 1993 paper treated it as the first stage of Quality Function Deployment (identifying, structuring and prioritising customer needs) and found a self-selection bias in satisfaction measures used for incentive programmes.[12]
- Moments of truth. Jan Carlzon, chief executive of the airline SAS, popularised the phrase; his book (English edition 1987) made employees at all levels responsible for turning these customer contacts to the company’s advantage.[13] It counts ten million customers meeting about five employees for 15 seconds each: 50 million moments a year[14] (the 1988 German edition says 12 and 60 million).[15]
- Net Promoter Score was introduced by Frederick Reichheld in HBR in December 2003,[16] and Bain later published the inner-loop and outer-loop practices for acting on it.[17][7]
- Customer effort came from CEB research[18] popularised in a 2010 HBR article, “Stop Trying to Delight Your Customers”.[19]
- Standards: the current ISO editions date from 2018 and 2021 (methods and standards); CXPA’s five-area competency framework was validated by a 2020 job-task analysis with more than 300 practitioners.[3]
Glossary and mental model
Link to section “Glossary and mental model”| Term | Meaning on this page | Example |
|---|---|---|
| Signal | Any evidence about the experience: a survey answer, complaint, review, call transcript, repeat contact, drop-off | A detractor comment about a missing refund |
| Solicited / unsolicited | Asked for / volunteered | NPS email vs. an app-store review |
| Relationship / transactional survey | About the whole relationship / after one interaction | Twice-yearly NPS / CSAT after a ticket |
| Journey | The customer’s end-to-end attempt to reach a goal across channels | “Move house and keep my broadband” |
| Moment of truth | A step where the customer forms a lasting judgement | First bill after switching |
| Journey owner | The executive accountable for one journey’s outcome across teams | Director of Onboarding |
| Inner loop | Follow-up with an individual customer by the person or team that served them | Call back a detractor within two working days |
| Outer loop | Prioritised, funded fix of a cause no single team can remove | Change the refund policy and system |
| Effect verification | Checking a fix against a defined metric for the affected journey | Repeat contacts for refunds before vs. after |
| Failure demand | John Seddon’s term: demand caused by failing to do something, or to do it right, for the customer[20] | “Where is my refund?” calls |
| NPS (Net Promoter Score) | “How likely are you to recommend us …?” (0–10): % promoters (9–10) minus % detractors (0–6); 7–8 are passives[21] | 50% − 20% = NPS 30 |
| CSAT (customer satisfaction) | “How satisfied were you with …?”, usually on a 1–5 scale | CSAT after a ticket |
| CES (customer effort score) | Agreement that the company made it easy to handle the issue (often 1–7)[18] | CES after a password reset |
| Top box | Share of answers in the highest point(s) of a scale | 6s and 7s on a 7-point CES |
| Interval | The range in which the true score plausibly lies, given the sample | NPS +19 on 36 answers: 90% interval −2 to +38[22] |
| Nonresponse bias | Error because people who answer differ from people who do not | Only the very happy and very angry reply |
| Cohen’s kappa | Agreement between two coders beyond what chance would give (1 = perfect, 0 = chance level) | Human vs. model theme codes |
The mental model is a loop with four stations, and the job is to keep every signal moving around it:
Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 120, "nodeSpacing": 20, "rankSpacing": 40}}}%%
flowchart TB
S["1. Signal: survey, complaint, review, call, repeat contact"]
O["2. Owner: a named person or journey owner accepts it"]
F["3. Fix: inner loop for one customer, outer loop for the cause"]
M["4. Measured effect: the journey metric moves, or it does not"]
S --> O --> F --> M
M -->|"no effect: reopen"| O
M -->|"confirmed: close, tell customers"| S
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class S,O,F core
class M decision
Text equivalent: Four stations in a vertical loop. A signal (survey answer, complaint, review, call or repeat contact) is accepted by a named owner; the owner fixes it, through the inner loop for one customer and the outer loop for the underlying cause; the effect is measured on the journey. If there is no effect, the item is reopened and returns to the owner with new evidence. If the effect is confirmed, it is closed and customers (and staff) are told, which feeds new signals.
How CXOps relates to other Ops
Link to section “How CXOps relates to other Ops”Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 140, "nodeSpacing": 22, "rankSpacing": 44}}}%%
flowchart TB
SU["SupportOps: tickets, queues, transactional CSAT"]
CO["CustomerOps: health, renewals"]
MO["MarketingOps: brand and campaign measures"]
CX["CXOps: survey method, loops, journey governance"]
RO["ResearchOps: studies, participants"]
PO["ProductOps: roadmap intake"]
AN["AnalyticsOps: metric layer, models"]
SU -->|"ticket themes, CSAT"| CX
CO -->|"churn reasons"| CX
MO -.->|"brand tracking"| CX
RO -->|"study findings"| CX
CX -->|"survey rules"| SU
CX -->|"coded issues with evidence"| PO
CX -->|"metric definitions to publish"| AN
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class CX core
class SU,CO,MO,RO,PO,AN neutral
Text equivalent: CXOps is in the middle. SupportOps sends ticket themes and transactional CSAT; CustomerOps sends coded churn reasons; ResearchOps sends study findings; MarketingOps shares brand tracking (dotted, weaker link). CXOps returns survey rules (method, NPS, CES) to SupportOps, sends coded issues with evidence to ProductOps, and hands metric definitions to AnalyticsOps to publish. Green: CXOps. Grey: neighbours.
| Neighbour | CXOps owns | Neighbour owns |
|---|---|---|
| SupportOps | Survey design, NPS/CES, the journey-wide loop | Queues, SLAs, transactional CSAT in the helpdesk |
| CustomerOps | Survey method, coded churn reasons | Health scores, renewals, success plans |
| ResearchOps | Continuous signals and the loop | Studies, participant panels, research consent |
| ProductOps | Evidence, themes and sizing | Roadmap intake and prioritisation |
| AnalyticsOps | Experience metric definitions | Metric layer, data models, dashboards |
| KnowledgeOps | Effort signals from help journeys | Knowledge practice and content |
Principles and operating model
Link to section “Principles and operating model”A proposed charter and principles
Link to section “A proposed charter and principles”The charter below is this Atlas’s proposal; no official CXOps manifesto exists.
Mission: make sure every important thing customers tell us reaches someone who can act, gets acted on, and is checked.
- Every signal has an owner, or a recorded decision not to act.
- Close both loops. Follow-up without systemic fixes exhausts the front line; fixes without follow-up lose customers’ trust.[17][7]
- Journeys over touchpoints. Measure the outcome the customer wanted across channels.[9]
- Report the error bar: sample size, response rate and interval beside every score.
- Do not pay people on scores they can influence by asking.[17][23]
- Ask less, use more. Every question feeds a decision; survey burden is a cost to customers.
- Fix, then verify. Close a fix only after its effect metric is reviewed.
Non-goals: answering tickets, owning the product roadmap, designing campaigns, running user-research studies.
Building blocks
Link to section “Building blocks”| Block | Minimum viable version |
|---|---|
| Signal register (every feedback source, owner, sample, retention) | A spreadsheet with ten rows |
| Journey maps with moments of truth and owners | Three journeys, built from data and customer calls |
| Survey specifications | One per survey, under change control |
| Coding frame for free text | 15–30 defined codes, reviewed quarterly |
| Issue log (owner, evidence, size, effect metric) | A tracker the sponsor reviews |
| Closed-loop SOP | One page, tested on real detractors |
| Scorecard | Eight metrics, each with a formula and owner |
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”Small organisations combine these roles; the point is that each duty has one accountable person.
| Activity | CX lead | VoC analyst | Journey owner | Front-line manager | Executive sponsor | Data protection |
|---|---|---|---|---|---|---|
| Signal register and survey specs | A | R | C | C | I | C |
| Inner-loop follow-up | C | I | I | A/R | I | I |
| Coding and theme reporting | A | R | C | I | I | I |
| Outer-loop prioritisation | R | C | C | C | A | I |
| Fix delivery | I | I | A | R | I | I |
| Effect verification | A | R | C | I | I | I |
| Privacy review of new signals | C | R | I | I | I | A |
R = responsible, A = accountable, C = consulted, I = informed.
The feedback lifecycle
Link to section “The feedback lifecycle”Each signal moves through captured → triaged → owned → acted → verified → closed; the CX lead watches for items that stall. An issue stays “acted” until its effect is checked, and “closed without effect” is allowed only if the issue is reopened or explicitly abandoned. Customers who gave feedback hear the outcome, as Bain’s outer loop recommends where relevant.[7]
Operating model and governance
Link to section “Operating model and governance”| Cadence | Forum | Inputs | Decisions |
|---|---|---|---|
| Daily | Team huddle (front line) | New detractor and complaint items | Who calls whom today; what to escalate |
| Weekly | Triage (CX lead, VoC analyst, journey owners’ delegates) | Coded themes, escalations, operational data | New issues, owners, sizing requests |
| Monthly | CX council (executive sponsor, journey owners) | Issue log, effect reviews, scorecard | Fund, defer or close issues; resolve ownership disputes |
| Quarterly | Survey and metric review | Response rates, burden, method changes | Change, add or retire surveys and metrics |
Bain’s outer loop is similar: a central team prioritises input with explicit criteria, recommends owners to executives, and insists on root causes before solutions.[7]
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture: the feedback system
Link to section “Reference architecture: the feedback system”Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 130, "nodeSpacing": 22, "rankSpacing": 40}}}%%
flowchart TB
subgraph IN["Signals"]
SV["Surveys: relationship, transactional"]
UN["Unsolicited: complaints, reviews, chats, calls"]
OP["Operational data: repeat contacts, drop-offs, delays"]
end
subgraph CORE["CXOps core"]
ID["Identity and consent check"]
CD["Coding and theme model"]
HUB["Feedback store with journey and segment keys"]
end
subgraph ACT["Action"]
IL["Inner loop: case to front-line team"]
OL["Outer loop: issue log, owner, budget"]
SC["Scorecard and effect reviews"]
end
SV --> ID
UN --> ID
OP --> HUB
ID --> CD --> HUB
HUB --> IL
HUB --> OL
OL --> SC
IL --> SC
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
class ID,CD,HUB core
class SV,UN,OP neutral
class IL,OL,SC decision
Text equivalent: Three layers from top to bottom. Signals: surveys, unsolicited feedback and operational data. CXOps core: survey and unsolicited feedback pass an identity and consent check, are coded into themes, and land in a feedback store keyed by journey and segment; operational data goes straight to the store. Action: the store feeds the inner loop (cases to front-line teams) and the outer loop (issue log with owner and budget); both feed the scorecard and effect reviews.
Design choices that matter more than the tool:
- Join keys: a customer and a journey key on every signal, or comments cannot be linked to the order, ticket or channel.
- Consent and purpose checks at intake, not after analysis (privacy and compliance).
- Operational data beside sentiment: Bain lists it as a separate outer-loop input;[7] behaviour often shows a problem before anyone complains.
End-to-end workflow: one detractor, one systemic issue
Link to section “End-to-end workflow: one detractor, one systemic issue”Diagram source (Mermaid)
sequenceDiagram
participant C as Customer
participant T as Front line
participant X as CX triage
participant J as Journey owner
C->>T: 3/10: "refund took 3 weeks"
T->>C: Call-back in 2 working days
alt Not reached after 2 attempts
T->>X: No contact: counts as missed
end
T->>X: Coded "refund delay" (policy)
X->>J: Issue: 140 similar comments
J->>X: Accepts, funds, sets metric
J->>X: Fix shipped
X->>T: Customers to inform
T->>C: "Here is what changed"
X->>J: Effect review at 8 weeks
Text equivalent: A customer scores 3 and writes that a refund took three weeks. The front-line team calls back within two working days (if two attempts fail, the case closes as “no contact” and counts as missed) and passes a coded note to CX triage: “refund delay”, caused by policy. Triage raises an issue with the journey owner, citing 140 similar comments. The owner accepts, funds the fix, names the effect metric and later reports the fix shipped. Triage gives the front line the affected customers, who are told what changed. After eight weeks triage and the owner review whether repeat refund contacts fell.
Exception paths. (a) The customer cannot be reached (shown above): it still counts against the closed-loop rate. (b) No owner accepts the issue within one monthly council: the executive sponsor assigns one or records a decision not to act. (c) The effect review shows no change: reopen with the new evidence instead of declaring success. (d) The comment contains a safety, legal or data-protection matter: route it to the owning process (complaints, incident, privacy) immediately; it is not a “theme”.
Practices, methods and tools
Link to section “Practices, methods and tools”Core practices and playbooks
Link to section “Core practices and playbooks”| Practice | Trigger | Owner | Output | Verification |
|---|---|---|---|---|
| Journey mapping | New priority journey; theme crossing teams | CX lead with journey owner | Map with moments of truth and owners | Built from data and customer conversations |
| Survey design | New signal need; quarterly review | VoC analyst | Specification under change control | Pretested; analysis plan before launch |
| Inner loop | Detractor, low CSAT, complaint | Front-line manager | Call-back and coded note | Closed-loop rate |
| Outer loop | Theme above threshold; severe case | Journey owner | Funded issue with effect metric | Effect review |
| Omnichannel consistency | Channel launch, policy change | Journey owner | Shared policy text, visible status | Repeat contacts across channels |
| Text coding | New free text | VoC analyst | Coded themes | Agreement with human sample |
Playbook: journey mapping that leads to action
Link to section “Playbook: journey mapping that leads to action”- Choose one actor and one scenario. NN/g defines a journey map as “a visualization of the process that a person goes through in order to accomplish a goal” and recommends one point of view per map.[24]
- Start from evidence: drop-off and contact data, coded complaints, customer interviews. A workshop-only map records internal beliefs.
- Mark the moments of truth (first bill, first failure, cancellation); CXPA lists identifying them as a design skill.[3]
- Add the backstage. A service blueprint adds what the customer cannot see: frontstage and backstage actions, support processes and the line of visibility. NN/g calls it a “part two” to the journey map.[25]
- Name an owner for every pain point and a metric that would show it improved. A map without owners is wall art.
- Revisit when the journey’s metrics move or the process changes; date every version.
Playbook: designing a survey
Link to section “Playbook: designing a survey”- Write the decision first: “If reset CES falls below X, the identity journey owner funds Y.”
- State relationship or transactional; Bain’s practice adds a “why?” question either way.[17]
- Keep wording and scale stable; AAPOR’s advice for trend data is “If you want to measure change, don’t change the measure.”[26]
- Pretest with a few real customers (AAPOR recommends cognitive interviews or another qualitative method) and order questions so earlier ones do not steer later answers.[26]
- Cap contact frequency across all surveys. Qualtrics, for example, lets an administrator limit how often a contact receives messages and advises spacing invitations 30–60 days apart.[27]
- Make it accessible (WCAG 2.2)[28] and short enough to finish on a phone; a survey screen-reader users cannot complete biases the sample.
Playbook: omnichannel consistency
Link to section “Playbook: omnichannel consistency”Gartner’s 2019 research found that “Only 9% of customers report resolving their issues completely via self-service” and that customers switch channels during a single issue.[29] The UK Service Standard requires public services to “Provide a joined up experience across all channels”.[30] In practice: one policy text in every channel, case status visible to every agent, and a journey metric that follows the customer across channels.
Methods, standards and frameworks
Link to section “Methods, standards and frameworks”| Source | Type | Use it for | Mandatory? |
|---|---|---|---|
| ISO 10004:2018 | International guideline | Designing satisfaction monitoring and measurement processes[31] | No (voluntary guidance) |
| ISO 10002:2018 | International guideline | Complaint-handling process design[32] | No; sector regulators may set their own complaint rules |
| ISO 23592:2021 | International standard | Service-excellence principles and model[33] | No |
| CXPA CX Framework | Professional competency framework | Skills, job tasks, team design[3] | No; basis of the association’s CCXP credential |
| Net Promoter System (Bain) | Proprietary method | NPS, inner and outer loops[21][17][7] | No; NPS is a registered trademark |
| GOV.UK Service Standard | Government standard | Joined-up channels in public services[30] | Yes, for UK central government services in scope |
| Journey maps and service blueprints | Design methods | Seeing the journey and its backstage causes[24][25] | No |
Tooling landscape
Link to section “Tooling landscape”| Category | Job | Selection questions | Lock-in and risk |
|---|---|---|---|
| Survey and experience-management platforms | Send, collect, analyse; case management for follow-up | Contact frequency rules, case routing, API export, accessibility | Historical data and coding frames may not export cleanly |
| Helpdesk survey features | Transactional CSAT after tickets | What triggers the survey? (see the worked runbook) | Trigger rules silently change who is sampled |
| Text and speech analytics | Themes and sentiment from comments and calls | Editable codes? Measured agreement with humans? | Opaque models; voice emotion carries legal duties |
| Issue tracker, BI and behaviour analytics | Outer-loop log; scorecards; drop-offs | Linked keys; metric layer with AnalyticsOps | Definitions drifting inside dashboards; cookie rules |
Automation and AI
Link to section “Automation and AI”Automation helps where volume is high and judgement is low: routing cases, deduplicating comments, suggesting codes. Large language models can code text well; in one study on 2,382 tweets, ChatGPT’s zero-shot labels beat crowd workers on four of five annotation tasks.[34] That was tweets, not your customers’ comments in your categories, so measure agreement against a human-coded sample before trusting the counts (Lab 3 shows how) and re-check after any model or coding-frame change.
Three cautions:
- Automated outcomes can flatter. Intercom counts an “assumed resolution” when a customer leaves its AI agent without asking for more help.[35] Pair such figures with repeat contacts across channels.
- Emotion from voice is regulated in the EU: banned for workers, high-risk for customers; see privacy and compliance.
- Inferred sentiment is not a survey. It covers everyone who talked to you but measures tone, not the customer’s judgement; see the judgement call.
Survey metrics: design and limits
Link to section “Survey metrics: design and limits”This Atlas teaches survey metric design once, here; SupportOps and CustomerOps apply it.
NPS, CSAT and CES compared
Link to section “NPS, CSAT and CES compared”The questions and scales are in the glossary.
| NPS (Net Promoter Score) | CSAT (customer satisfaction) | CES (customer effort score) | |
|---|---|---|---|
| Best for | Relationship tracking, inner-loop triggers; a transactional NPS after an interaction also exists,[17] but CSAT or CES usually fits one interaction better | One interaction or feature | Service and self-service journeys |
| Evidence and limits | Claim of superiority for predicting growth not replicated in a Norwegian panel study[36] | Wording and scales vary widely, so benchmarks rarely compare | Gartner links effort to disloyalty;[8] wording varies between vendors |
| Typical trap | Treated as a growth forecast or a bonus target | Survey trigger decides who is asked[37] | Asked after journeys that were not service interactions |
Choose by question: advocacy (NPS), one interaction (CSAT), ease (CES); never all three on the same moment.
Sampling, response and nonresponse bias
Link to section “Sampling, response and nonresponse bias”A score describes the people who answered. Bain’s guidance treats response rates below about 40% for consumers or 60% for businesses as a red flag in its experience, and gives an example: with a 20% response rate, responders scored an NPS of 50 while nonresponders scored −40, so the true figure was −22.[38] Practical rules:
- Report response rate by segment; a segment’s falling response can move the score with no change in experience.
- Check who is invited: triggers, exclusions and channel mix decide the sample.
- Run scenario bounds for nonresponse (Lab 2).
Precision: intervals and comparing scores
Link to section “Precision: intervals and comparing scores”NPS is a difference between two proportions, so it is noisy. A good default is the adjusted-Wald interval that Lewis and Sauro recommend, based on Rocks (2016): add 3 to the sample size and ¾ to the promoter and detractor counts, then use the variance of the difference.[22] Comparing two periods uses the same pieces in a two-sample test.[39] For CSAT, report a Wilson interval, as the SupportOps page does.
Gaming and incentives
Link to section “Gaming and incentives”Bain wrote in 2012 that car-dealership staff “are notorious for begging for top-box scores”;[38] in 2021 it called linking scores to frontline bonuses an abuse that made staff “care more about their scores than about learning to better serve customers”.[23] Reward the loop (call-backs made, issues fixed and verified), not the number, and never rank individuals: two or three responses each are noise.
Changing a survey without breaking the trend
Link to section “Changing a survey without breaking the trend”Any change to wording, scale, trigger, channel, timing or sample is a method change: run old and new in parallel on split samples for a reporting period, record the break, and never splice the series silently.[26]
CXOps in practice
Link to section “CXOps in practice”Reference implementation: operating artefacts
Link to section “Reference implementation: operating artefacts”Assumptions for this reference build: a mid-sized consumer business with a website, an app, a contact centre and three priority journeys (join, get help, leave). The artefacts are templates to adapt, not a certified method.
Signal register (extract)
Link to section “Signal register (extract)”| Signal | Type | Owner | Trigger and sample | Frequency cap | Retention |
|---|---|---|---|---|---|
| Relationship NPS | Solicited | VoC analyst | Random 20% of active customers, twice a year | 1 survey per 60 days per person | Answers 24 months; comments redacted after 12 |
| Help CES | Solicited | Help journey owner | After a closed contact, 1 in 3 | Shared cap | As above |
| Complaints | Unsolicited | Complaints manager | Every complaint, all channels | n/a | Per complaint-handling policy |
| App-store reviews | Unsolicited, public | VoC analyst | All, weekly pull | n/a | Public data; keep codes only |
| Repeat contacts within 7 days | Operational | Help journey owner | All contacts | n/a | Per data policy |
Survey specification
Link to section “Survey specification”Example status: syntax-checked by the validator (YAML), not connected to any survey platform.
survey: help-ces
version: 3
owner: help-journey-owner
decision_it_feeds: >
If CES top-box for password resets is below 70% for two months,
the identity journey owner reviews the reset flow.
type: transactional
trigger:
event: contact_closed
require_resolution_set: true # do not survey on status alone
exclude: [auto_closed, complaint_open, legal_hold, under_16]
sample:
rate: 0.33
frequency_cap_days: 60 # shared with all other surveys
questions:
- id: ces
text: "[Company] made it easy for me to handle my issue."
scale: {min: 1, max: 7, labels: [Strongly disagree, Strongly agree]}
- id: why
text: "What is the main reason for your answer?"
type: free_text
redaction: [card_number, email, phone, health_terms]
analysis:
report: [n, response_rate, top_box_share, wilson_interval_95]
break_by: [channel, contact_reason]
inner_loop:
case_when: "ces <= 3"
route_to: team_that_closed_contact
contact_within_working_days: 2
change_control: parallel_run_one_period
Closed-loop SOP (one page)
Link to section “Closed-loop SOP (one page)”- A case is created for every detractor (NPS 0–6), every CES of 1–3, and every complaint flagged “call me”.
- The team that served the customer owns the call. Target: first attempt within two working days; two attempts, then close as “no contact”.
- The caller fixes the individual problem within existing authority and does not promise policy changes.
- The caller codes the reason and adds one sentence of root cause if known.
- Safety, legal, vulnerability or data-protection matters leave this process at once for the owning process.
- Huddles review the week’s calls for learning; individual scores are not ranked.[17]
Outer-loop issue intake form
Link to section “Outer-loop issue intake form”Issue title: <journey> - <symptom in the customer's words>
Journey and step: e.g. Get help > refund after return
Evidence: coded comments (n, period), complaints (n), repeat contacts,
operational facts (e.g. median refund time), 3 verbatim quotes
Size: customers affected per month; revenue or cost at risk (method)
Suspected cause: frontstage / backstage / policy / product / partner
Proposed owner: journey owner or function head
Effect metric: one metric, baseline, target, review date
Decision (council): fund / defer until <date> / decline with reason
Customers to inform: who, how, when the fix ships
Hands-on labs
Link to section “Hands-on labs”All three labs use Python 3.8+ (standard library) and synthetic data, with no cost or accounts. The expected outputs are real outputs from runs on 2026-10-23 with Python 3.8.10.
Lab 1: NPS with an honest error bar
Link to section “Lab 1: NPS with an honest error bar”Objective: compute NPS with an adjusted-Wald interval and test whether two periods differ. Prerequisites: Python 3.8+; a terminal; an empty working folder.
Example status: executed locally with Python 3.8.10; reproduces the published MeasuringU example.
"""NPS with an adjusted-Wald confidence interval and a two-sample test.
Method: Rocks (2016) as described by Lewis and Sauro (MeasuringU, 2021).
Usage: python3 nps_ci.py DET PAS PRO [DET2 PAS2 PRO2] [--conf 0.90]
"""
import argparse
from statistics import NormalDist
def adjusted(det, pas, pro):
n = det + pas + pro
if n == 0:
raise ValueError("no responses")
n_adj = n + 3
p_pro = (pro + 0.75) / n_adj
p_det = (det + 0.75) / n_adj
nps_adj = p_pro - p_det
var_adj = p_pro + p_det - nps_adj ** 2
raw = (pro - det) / n
return {"n": n, "raw": raw, "adj": nps_adj, "var": var_adj, "n_adj": n_adj}
def interval(s, conf):
z = NormalDist().inv_cdf(1 - (1 - conf) / 2)
moe = z * (s["var"] / s["n_adj"]) ** 0.5
return s["adj"] - moe, s["adj"] + moe
def compare(a, b):
diff = a["adj"] - b["adj"]
se = (a["var"] / a["n_adj"] + b["var"] / b["n_adj"]) ** 0.5
z = abs(diff) / se
p = 2 * (1 - NormalDist().cdf(z))
return diff, z, p
def main():
ap = argparse.ArgumentParser()
ap.add_argument("counts", type=int, nargs="+", help="det pas pro [det pas pro]")
ap.add_argument("--conf", type=float, default=0.90)
args = ap.parse_args()
if len(args.counts) not in (3, 6) or min(args.counts) < 0:
ap.error("give 3 or 6 non-negative counts")
groups = [adjusted(*args.counts[i:i + 3]) for i in range(0, len(args.counts), 3)]
for i, s in enumerate(groups, 1):
lo, hi = interval(s, args.conf)
print(f"sample {i}: n={s['n']} NPS={s['raw'] * 100:+.1f} "
f"{args.conf:.0%} CI {lo * 100:+.1f} to {hi * 100:+.1f}")
if len(groups) == 2:
diff, z, p = compare(*groups)
print(f"difference (adjusted) {diff * 100:+.1f} points, z={z:.3f}, p={p:.3f}")
if __name__ == "__main__":
main()
Steps. (1) Save the file as nps_ci.py. (2) Validate the method against the published example (8 detractors, 13 passives,
15 promoters versus 12, 12 and 7).[22][39] (3) Run the illustrative quarters at 95%.
python3 nps_ci.py 8 13 15 12 12 7
python3 nps_ci.py 41 63 108 45 60 82 --conf 0.95
Expected output:
sample 1: n=36 NPS=+19.4 90% CI -2.4 to +38.3
sample 2: n=31 NPS=-16.1 90% CI -36.2 to +6.8
difference (adjusted) +32.7 points, z=1.815, p=0.070
sample 1: n=212 NPS=+31.6 95% CI +20.8 to +41.5
sample 2: n=187 NPS=+19.8 95% CI +8.1 to +30.8
difference (adjusted) +11.7 points, z=1.489, p=0.137
Validation: the first block must match MeasuringU’s published values (−0.02 to 0.38, −0.36 to 0.07, z = 1.815, p = .07);
the interval is centred on the adjusted NPS, so it is not symmetric around the raw score. Interpretation: an 11.8-point fall
on about 200 responses per quarter is not statistically clear. Troubleshooting: give 3 or 6 non-negative counts
means a count is missing; different numbers usually mean the order (detractors, passives, promoters) is wrong.
Teardown: delete the folder.
Lab 2: how much could nonresponse move the score?
Link to section “Lab 2: how much could nonresponse move the score?”Objective: see how the silent majority could change an NPS, using Bain’s scenarios.[38] Prerequisites: as Lab 1.
Example status: executed locally with Python 3.8.10; reproduces Bain’s published example.
"""How far could nonresponse move an NPS? Scenario bounds, not an estimate.
Usage: python3 nonresponse.py INVITED DET PAS PRO [SILENT_NPS]
Scenarios for people who did not answer:
same - they score like responders (the hidden assumption of most dashboards)
half - a 50-50 mix of passives and detractors (Bain 2012: for many consumer firms)
detractor - all detractors (Bain 2012: probably close in B2B settings)
custom - an NPS you assume for them, e.g. from a follow-up sample
"""
import sys
def nps(det, pro, n):
return 100.0 * (pro - det) / n
def main(argv):
if len(argv) not in (4, 5):
sys.exit(__doc__)
invited, det, pas, pro = (int(x) for x in argv[:4])
resp = det + pas + pro
if resp == 0 or invited < resp:
sys.exit("need at least one response and INVITED >= responses")
silent = invited - resp
print(f"response rate {resp / invited:.0%} ({resp} of {invited})")
print(f"same NPS {nps(det, pro, resp):+.1f}")
print(f"half NPS {nps(det + silent / 2, pro, invited):+.1f}")
print(f"detractor NPS {nps(det + silent, pro, invited):+.1f}")
if len(argv) == 5:
mix = (resp * nps(det, pro, resp) + silent * float(argv[4])) / invited
print(f"custom NPS {mix:+.1f} (silent group assumed {float(argv[4]):+.0f})")
if __name__ == "__main__":
main(sys.argv[1:])
python3 nonresponse.py 1000 20 60 120 -40
python3 nonresponse.py 640 41 63 108
Expected output:
response rate 20% (200 of 1000)
same NPS +50.0
half NPS -30.0
detractor NPS -70.0
custom NPS -22.0 (silent group assumed -40)
response rate 33% (212 of 640)
same NPS +31.6
half NPS -23.0
detractor NPS -56.4
Validation: the custom line of the first run must equal Bain’s −22. Interpretation: these are bounds, not estimates;
if the range is wide, phone a random sample of nonresponders before reporting a trend. Troubleshooting: the usage text means
an argument is missing. Teardown: delete the file.
Lab 3: closed-loop metrics and coder agreement
Link to section “Lab 3: closed-loop metrics and coder agreement”Objective: compute the closed-loop rate, time to contact and the share of detractors linked to an outer-loop issue, and check how well an automated theme coder agrees with a human. Prerequisites: as Lab 1. The data are twelve invented rows.
Example status: executed locally with Python 3.8.10 on the synthetic file below.
id,score,received,contacted,human_theme,model_theme,issue
f01,2,2026-09-01T09:10,2026-09-01T15:00,delivery,delivery,ISS-14
f02,9,2026-09-01T10:00,,praise,praise,
f03,5,2026-09-01T11:30,2026-09-04T10:00,billing,billing,ISS-09
f04,6,2026-09-02T08:45,,delivery,returns,
f05,3,2026-09-02T12:00,2026-09-02T16:30,app,app,ISS-21
f06,10,2026-09-02T13:00,,praise,praise,
f07,4,2026-09-03T09:00,2026-09-03T11:00,delivery,delivery,ISS-14
f08,7,2026-09-03T10:20,,returns,returns,
f09,1,2026-09-03T17:55,2026-09-07T09:00,billing,delivery,
f10,6,2026-09-04T08:00,2026-09-04T12:00,returns,returns,ISS-30
f11,8,2026-09-04T09:30,,app,praise,
f12,5,2026-09-04T14:10,2026-09-05T16:40,delivery,delivery,ISS-14
"""Closed-loop metrics and coder agreement from a feedback export.
Usage: python3 loop_metrics.py feedback.csv [SLA_HOURS]
Eligible for follow-up: score 0-6 (detractors). Times are local ISO strings.
The SLA is in clock hours; a working-day SLA needs a business calendar.
"""
import csv
import sys
from collections import Counter
from datetime import datetime
from statistics import median
def hours(a, b):
fmt = "%Y-%m-%dT%H:%M"
return (datetime.strptime(b, fmt) - datetime.strptime(a, fmt)).total_seconds() / 3600
def kappa(pairs):
n = len(pairs)
observed = sum(a == b for a, b in pairs) / n
left = Counter(a for a, _ in pairs)
right = Counter(b for _, b in pairs)
expected = sum(left[k] * right[k] for k in left) / (n * n)
return observed, (observed - expected) / (1 - expected)
def main(argv):
if len(argv) not in (1, 2):
sys.exit(__doc__)
sla = float(argv[1]) if len(argv) == 2 else 48.0
with open(argv[0], newline="") as fh:
rows = list(csv.DictReader(fh))
eligible = [r for r in rows if int(r["score"]) <= 6]
waits = [hours(r["received"], r["contacted"]) for r in eligible if r["contacted"]]
on_time = sum(w <= sla for w in waits)
linked = sum(bool(r["issue"]) for r in eligible)
print(f"rows {len(rows)}, eligible detractors {len(eligible)}")
print(f"contacted within {sla:.0f} h: {on_time}/{len(eligible)} = "
f"{on_time / len(eligible):.0%}")
print(f"never contacted: {len(eligible) - len(waits)}")
print(f"median hours to contact (contacted only): {median(waits):.1f}")
print(f"linked to an issue: {linked}/{len(eligible)} = {linked / len(eligible):.0%}")
obs, k = kappa([(r["human_theme"], r["model_theme"]) for r in rows])
print(f"theme agreement human vs model: {obs:.0%}, Cohen's kappa {k:.2f}")
top = Counter(r["human_theme"] for r in eligible).most_common(3)
print("top detractor themes (human-coded):", top)
if __name__ == "__main__":
main(sys.argv[1:])
python3 loop_metrics.py feedback.csv
python3 loop_metrics.py feedback.csv 24
Expected output (first run; the second differs only in “contacted within 24 h: 4/8 = 50%”):
rows 12, eligible detractors 8
contacted within 48 h: 5/8 = 62%
never contacted: 1
median hours to contact (contacted only): 5.8
linked to an issue: 6/8 = 75%
theme agreement human vs model: 75%, Cohen's kappa 0.68
top detractor themes (human-coded): [('delivery', 4), ('billing', 2), ('app', 1)]
Validation: by hand, eight scores are 6 or less; f03 (70.5 h) and f09 (87.1 h) missed 48 clock hours and f04 was never
called, so 5 of 8 met the target. Interpretation: the median looks excellent while 3 of 8 detractors missed the target.
The lab uses clock hours; under the SOP’s two-working-day rule f09 (Thursday 17:55, called Monday 09:00) would be on time, so
fix one clock definition before reporting the rate. f09, the angriest customer, was also mis-coded and linked to no issue.
Kappa on twelve rows is very unstable; use at least 100 coded comments, as the assurance
audit does. Troubleshooting: a ValueError on time data
means a timestamp is not YYYY-MM-DDTHH:MM; a KeyError means a missing column; real exports also need time zones. Teardown: delete the two files.
Use cases and scenarios
Link to section “Use cases and scenarios”All three scenarios are illustrative; the public-service one applies a published standard but describes no real service.
| Scenario | Context and method | Trade-off | Success measure |
|---|---|---|---|
| B2B software onboarding | 400 accounts; relationship NPS to several contacts per account; account team runs the inner loop; outer loop on onboarding defects | Few responses per account; Bain’s 60% B2B response threshold is hard to reach[38] | Year-one renewal for accounts with closed loops vs. without (confounded by engagement: compare with a holdout or matched accounts) |
| Public benefit claim | Online, phone and paper; map the journey across channels and count failure demand, which the Service Standard aims to reduce[30] | Take-up targets tempt teams to hide phone numbers; teams should show take-up plans do not make other channels harder to find. The standard asks for the mix of channels users need, not every channel | Claims completed without a progress-chasing contact |
| Retailer delivery promise | Detractor themes cluster on late parcels; join comments to carrier data; outer-loop issue for logistics | A carrier change may move cost, not remove it | Delivery CES; “where is my order?” contacts per 1,000 orders |
Measure, govern, pay
Link to section “Measure, govern, pay”Metrics and KPIs
Link to section “Metrics and KPIs”Experience scores show how customers feel; loop metrics show whether the operation works. The loop metrics are this page’s proposals.
| KPI | Formula | Type | Pitfall | Cadence |
|---|---|---|---|---|
| Closed-loop rate | Eligible cases contacted within target ÷ all eligible cases | Leading | Dropping “no contact” cases | Weekly |
| Time to first contact | Median and 90th percentile | Leading | Median hides the tail | Weekly |
| Issue linkage rate | Coded detractor comments linked to an issue ÷ coded detractor comments | Leading | One vague catch-all issue | Monthly |
| Issue cycle time | Issue accepted → effect review completed | Lagging | Closing at “fix shipped” | Monthly |
| Effect verification rate | Issues closed with a completed effect review ÷ issues closed | Lagging | Reviews with no baseline | Quarterly |
| Journey outcome | Journey-specific: e.g. resolved without a second contact on any channel | Lagging | Measuring one channel only | Monthly |
| Relationship NPS / journey CES | As defined above, with n, response rate and interval | Lagging | Treated as precise | Per survey wave |
| Survey burden | Survey invitations per active customer per year | Guardrail | Ignored until response collapses | Quarterly |
Worked calculation (illustrative). In September the get-help journey produced 640 eligible cases (detractor CES or complaint with “call me”). 512 were contacted within two working days, 71 later, and 57 never. Closed-loop rate = 512 ÷ 640 = 80%. Of 410 coded detractor comments, 287 were linked to issues: linkage = 287 ÷ 410 = 70%. Three issues were closed in the quarter and two had effect reviews: verification = 2 ÷ 3 = 67%. Survey burden: 96,000 invitations for 60,000 active customers = 1.6 per customer per year; the 60-day per-person cap allows at most about six. The weakest number is verification: the operation is busy but not yet learning whether fixes work.
Targets. Set them from your own baseline, with a fixed definition of “eligible”.
Quality, privacy and compliance
Link to section “Quality, privacy and compliance”What applies depends on jurisdiction; the points below are examples as of October 2026, not legal advice.
- Surveys versus marketing (UK example). The ICO says “Contacting people to conduct genuine market research is not direct marketing”, but research messages that include promotional material, or research done in order to market to the people involved, are direct marketing (“sugging”, selling under the guise of research).[40] Keep offers out of survey emails.
- Free text collects sensitive data you did not ask for, such as illness or religion; UK GDPR protects special category data, and the ICO’s guidance covers inferences too.[41] Redact, restrict raw comments, set retention.
- Emotion recognition (EU AI Act). A system that infers emotions or intentions from biometric data is an emotion recognition system;[42] the Future of Privacy Forum’s (FPF) summary of the Commission’s guidelines gives the voice or a facial expression as examples.[43] Using one on workers (say, scoring agents’ emotions on calls) is prohibited except for medical or safety reasons, since February 2025.[44][45] A permitted one, for example on customers’ voices, is high-risk under Annex III point 1(c),[46][43] with those obligations moved by the AI Omnibus to 2 December 2027 (as of October 2026).[45] Article 50, applicable from 2 August 2026, already requires deployers to “inform the natural persons exposed thereto of the operation of the system”.[47] FPF also notes that the Commission’s guidelines treat systems capturing both workers and customers only superficially and put emotions inferred from written text outside the prohibition.[43] Sentiment on transcript words alone uses no biometric data; data-protection rules still apply.
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”The large costs are people: front-line call-backs, analyst coding and journey owners’ fixes. Size the inner loop as a workload: 640 cases a month at 12 minutes each is 128 hours, close to one full-time person. Without that capacity, narrow eligibility (for example, detractors who asked for contact) rather than let the closed-loop rate decay. Customer time is a cost too: cap invitations.[27] Repeat contacts, drop-offs and complaints cost customers nothing to give.
Assurance of the operating model
Link to section “Assurance of the operating model”Check monthly that the operation is honest:
- Sample audit: 20 random detractor cases: call, timing, code.
- Coding audit: re-code 100 comments by hand each quarter (Lab 3 method).
- Trigger audit: after any helpdesk, app or CRM workflow change, confirm who is surveyed.
- Orphan and burden audits: themes with no issue, issues with no effect metric, customers over the invitation cap.
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Remediation | Prevention |
|---|---|---|---|---|
| Score jumps after a tool change | Survey trigger or sample changed | Compare invited population before and after | Restore trigger or restate the series | Trigger audit; change control |
| Response rate falls steadily | Over-surveying; mobile-unfriendly survey | Invitations per customer; completion by device | Frequency cap; shorten | Burden guardrail |
| Detractors not called | No capacity or unclear owner | Closed-loop rate by team | Narrow eligibility; assign owner | Capacity sizing |
| Same theme for a year | No outer loop, or no budget | Issue log age; council minutes | Escalate to sponsor; fund or decline explicitly | Monthly council with decision record |
| Fixes “done” but complaints continue | Root cause not found; effect never checked | Effect reviews missing | Reopen with evidence | Close only after review |
| Automated themes drift | Model or coding frame changed | Agreement with human sample | Re-map; restate trend | Quarterly coding audit |
Worked runbook: the CSAT jump that was not real
Link to section “Worked runbook: the CSAT jump that was not real”1. Detect (day 0). The weekly scorecard flags a change larger than the interval. Before anyone celebrates, the VoC analyst opens a ticket “CSAT step change, cause unknown”.
2. Check the instrument (day 1). Invitations rose 40% while contact volume was flat. The change log shows that on day −3, tickets auto-closed after seven days without a reply began moving to a Done status. In products such as Jira Service Management Cloud a CSAT survey fires when a work item reaches the Done status category, whether or not a resolution is set,[37] so customers whose tickets lapsed (many of whom had solved the problem themselves) are now surveyed.
3. Contain (day 2). Restore the original trigger: survey only when a resolution is set, and make sure auto-close leaves the resolution empty (or exclude the auto-close status). In Jira Service Management Cloud that means changing the workflow and customer-notification settings, not one toggle (as of October 2026).[37] Mark the two weeks in the scorecard as a method break.
4. Restate (day 3). CSAT on the original population is 77.9%: no real change. Tell everyone who saw the 86%.
5. Prevent (week 2). Add survey triggers to the helpdesk change checklist, show “invitations per contact” beside every score, and log the incident in the survey specification.
What made it hard: the wrong number was good news, so nobody wanted to question it.
Anti-patterns and myths
Link to section “Anti-patterns and myths”- “NPS predicts our growth.” The originators claimed a strong link; an independent longitudinal study did not reproduce the claimed superiority over other measures.[36] Test the link on your own retention data before relying on it.
- Survey everything after every contact. Burden rises, response falls, and the remaining responders are less typical.
- Only call angry customers. Bain calls this a misconception: happy customers can have unresolved issues and promoters give constructive suggestions.[17]
- The dashboard is the programme. If no issue has an owner and an effect review, it is reporting, not CXOps.
- “The AI will tell us what customers feel.” It measures tone, may mis-code, and is regulated when it uses voice.
Deciding and adopting
Link to section “Deciding and adopting”When to use and when not to use
Link to section “When to use and when not to use”Use a dedicated CXOps function (a person or a team) when:
- customers cross several teams or channels to reach one outcome, and complaints bounce between them;
- you already collect feedback in several places and nobody joins it;
- an executive is willing to own journey outcomes and fund cross-team fixes.
Do not build one yet when:
- one manager can still read every complaint: a weekly review and a fix list are enough;
- the real problem is the support queue (staffing, SLAs): start with SupportOps;
- the real problem is churn in a known segment: start with CustomerOps;
- no one will fund outer-loop fixes. Surveys without fixes teach customers that answering is pointless.
Exit condition: if after two quarters no issue has completed an effect review, stop adding surveys and fix the governance.
Decision framework
Link to section “Decision framework”Diagram source (Mermaid)
%%{init: {"flowchart": {"wrappingWidth": 150, "nodeSpacing": 22, "rankSpacing": 36}}}%%
flowchart TB
Q1{"Do customers cross several teams or channels for one outcome?"}
Q2{"Is the main pain the support queue?"}
Q3{"Will an executive fund cross-team fixes?"}
Q4{"More than a few hundred feedback items a month?"}
A1["No CXOps: weekly complaint review by a manager"]
A2["Start with SupportOps"]
A3["Not yet: secure a sponsor before adding surveys"]
A4["One CX lead: register, inner loop, monthly council"]
A5["CXOps team: coding, issue log, effect reviews"]
Q1 -->|"no"| A1
Q1 -->|"yes"| Q2
Q2 -->|"yes"| A2
Q2 -->|"no"| Q3
Q3 -->|"no"| A3
Q3 -->|"yes"| Q4
Q4 -->|"no"| A4
Q4 -->|"yes"| A5
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class Q1,Q2,Q3,Q4 decision
class A4,A5 core
class A1,A2,A3 risk
Text equivalent: First question: do customers cross several teams or channels to reach one outcome? If not, a manager’s weekly complaint review is enough. If yes: is the main pain the support queue? If yes, start with SupportOps. If not: will an executive fund cross-team fixes? If not, secure a sponsor before adding surveys. If yes: are there more than a few hundred feedback items a month? If not, one CX lead with a signal register, an inner loop and a monthly council; if yes, a CXOps team with coding, an issue log and effect reviews. Red: do not build CXOps yet. Green: build it.
The thresholds are judgement, not research: a few hundred items a month is roughly where one person stops reading everything.
Maturity model
Link to section “Maturity model”This is this Atlas’s model, not an industry standard.
| Level | Observable behaviour | Evidence | Exit criterion |
|---|---|---|---|
| 1. Collecting | Surveys exist; scores reported without n or intervals | Dashboards | Signal register complete; every survey has an owner |
| 2. Responding | Inner loop runs for detractors; codes applied | Closed-loop rate tracked | Closed-loop rate ≥ agreed target for a quarter |
| 3. Fixing | Outer-loop issues with owners and budget; monthly council | Issue log with decisions | Every closed issue has an effect metric |
| 4. Verifying | Effect reviews routine; method changes controlled | Verification rate; change log | Two quarters with verified effects on priority journeys |
| 5. Steering | Journey outcomes in executive goals; CX evidence used in investment cases | Planning documents cite CX evidence | Sustained, re-checked yearly |
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”| Window | Actions | Milestone | Metric |
|---|---|---|---|
| Days 1–30 | Build the signal register; pick three journeys; read 200 recent comments by hand; name a sponsor; agree the charter | Register and charter signed | Share of signals with an owner |
| Days 31–60 | Start the inner loop for one journey; write the coding frame; set up the issue log; first monthly council | First 3 outer-loop issues accepted | Closed-loop rate; time to contact |
| Days 61–90 | Survey specifications under change control; intervals on the scorecard; first effect review; retire one low-value survey | First verified (or failed) fix reported | Effect verification rate; survey burden |
Quick wins: call ten detractors yourself; delete one unused survey question.
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Quick start
- One executive sponsor and a written charter with non-goals
- Signal register listing every survey, complaint channel, review source and operational signal
- Three priority journeys, each with an owner
- Inner-loop SOP tested on ten real detractors
Before launching or changing a survey
- The decision it feeds is written down
- Relationship or transactional, stated; trigger and exclusions documented
- Pretested with real customers; accessible on a phone and with a screen reader
- Frequency cap shared with all other surveys
- No promotional content; privacy notice and retention set
- Analysis plan written; parallel run if it replaces a measure
Monthly governance
- Closed-loop rate and late tail reviewed by team
- Every theme above threshold has an issue or a recorded decision not to act
- Every closed issue has an effect review or a date for one
- Trigger and burden audits done
Templates
Link to section “Templates”One-page CXOps charter
Purpose: Every important thing customers tell us reaches an owner,
is acted on, and is checked.
Sponsor: <executive> CX lead: <name>
Journeys: 1. <journey> (owner) 2. ... 3. ...
In scope: signal register, surveys, inner and outer loops, scorecard
Out of scope: ticket queues, renewals, campaigns, research studies
Principles: owners for every signal; close both loops; report error bars;
no pay on scores; ask less, use more; fix then verify
Cadence: daily huddles, weekly triage, monthly council, quarterly review
Measures: closed-loop rate, issue linkage, effect verification,
journey outcomes, NPS/CES with intervals, survey burden
Review date: <date>
Effect review
Issue: <id and title>
Fix shipped: <date> Owner: <name>
Effect metric: <metric, definition, data source>
Baseline: <value, period, n>
After: <value, period, n> Interval or test: <method, result>
Comparison group: <unchanged journey, region or cohort: before, after>
Other changes in the period that could explain the movement:
Verdict: effect confirmed / no clear effect / worse
Next step: close / reopen with new hypothesis / roll back
Customers and staff told on: <date>
Worked effect review (illustrative). A refund fix ships in the north first. Repeat refund contacts per 1,000 refunds fall from 180 to 120 there and from 175 to 160 in the unchanged south. Before/after says −60; against the comparison group it is (120 − 180) − (160 − 175) = −45. This difference-in-differences logic assumes both regions would have moved alike without the fix, so check that their trends ran parallel for months before it.[48]
Deep comparisons
Link to section “Deep comparisons”| Question | SupportOps | CustomerOps | CXOps | ResearchOps |
|---|---|---|---|---|
| Unit of work | Ticket or contact | Account | Signal and journey issue | Study |
| Time horizon | Minutes to days | Contract term | Weeks to quarters | Project |
| Main metrics | Response and resolution times, FCR, transactional CSAT | GRR/NRR drivers, health | Closed-loop rate, effect verification, NPS/CES with intervals | Study throughput, participant quality |
| Owns survey design? | No (applies it) | No (uses results) | Yes | For studies only |
Is CXOps a real job title? Titles with “CX operations” exist, but vendors also use the words for contact-centre work[1] or a blend of staffing and journey ownership,[5] so read the job description, not the title.
Should we use NPS, CSAT or CES? One well-run measure per moment; see the comparison.
Our NPS fell five points. Should we worry? Check the interval and the instrument first, then read the comments.
Can we tie executive bonuses to NPS? Avoid it (why). If executives must have a customer goal, use verified journey outcomes and loop metrics they control through investment, and keep the survey method out of their hands.
Who owns CX if every department touches the customer? Journey owners own outcomes; the CX lead owns the method and the loop; the executive sponsor owns arbitration.
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”- Established: relationship and transactional surveys, the two loops, journey maps and blueprints, complaint-handling standards, adjusted-Wald NPS intervals.[22]
- Still settling: LLM coding with human audit;[34] testing which survey measure predicts retention in your business; Bain’s “earned growth”, an accounting-based counterpart to NPS.[23]
- Regulated or contested: inferring emotion from customers’ voices (EU duties phase in until December 2027);[45] replacing surveys with inferred satisfaction for every interaction; publishing NPS to investors, which Bain says has added to confusion without an explanation of the process.[23]
Learning path
Link to section “Learning path”| Stage | Do this | Output |
|---|---|---|
| Prerequisites | Spreadsheets; proportions and intervals | A percentage with an interval |
| 1 day | Run Labs 1–3; read 100 real comments | A view of your signals |
| 1 week | Map one journey from data and five customer calls; write one survey specification | Map with owners; spec |
| 30 days | Run the inner loop for one journey; hold the first council; code a month of comments | Closed-loop rate; three issues |
| Advanced | Effect reviews with controls; survey experiments; ISO 10002 complaint handling | A verified fix |
| Portfolio | Code a public review dataset with two coders, measure agreement, write an outer-loop issue | A worked case |
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”- What it is: signal → owner → fix → measured effect, across the journey; the label is ambiguous.
- Decide: build CXOps only when journeys cross teams and someone funds fixes.
- Practise: signal register, owned journey maps, survey specs under change control, two loops, monthly council.
- Measure: closed-loop rate, issue linkage, effect verification, journey outcomes, NPS/CES with n and interval, survey burden.
- Watch out: trigger changes, nonresponse, bonuses on scores, unverified fixes, emotion analytics.
- Next action: add n and interval to every score you publish this month.
A judgement call: replace the relationship survey with AI sentiment?
Link to section “A judgement call: replace the relationship survey with AI sentiment?”Situation (illustrative). A telecom company’s twice-yearly relationship NPS has a 12% response rate. A vendor offers sentiment scores for 100% of chats and calls, coded by a language model, and suggests retiring the survey.
Option A: retire the survey; coverage jumps to everyone who contacted the company, with no survey burden and daily data. Option B: keep a smaller random-sample survey (chasing some nonresponders by phone) and use sentiment as a separate signal for routing and theme discovery.
Assumptions. Most customers do not contact the company in a given month, and those who do are more likely to have problems. The vendor’s model infers emotion from voice as well as words.
Reasoning. Option A looks better because it removes nonresponse, but it swaps one bias for another: it measures only customers who made contact, and measures tone rather than a judgement of the relationship. If the model reads acoustic voice features, the EU AI Act’s emotion-recognition duties apply (privacy and compliance). Option B keeps a measure of the silent majority and uses sentiment for what it does well.
Decision. Option B, with a review: if after four quarters the survey adds no predictive value for retention beyond behavioural data and sentiment, retire it then, with evidence. Uncertainty: the answer depends on how many customers ever contact you and how well the survey predicts outcomes in your business.
Learning objectives and mastery check
Link to section “Learning objectives and mastery check”After this page you should be able to:
- Explain the three meanings of “CX operations” and the editorial distinction this Atlas uses.
- Design a survey specification that names the decision it feeds.
- Compute and interpret NPS with an interval and test a change between periods.
- Design inner- and outer-loop processes with owners and metrics.
- Diagnose a score change caused by the instrument rather than the experience.
- Decide whether an organisation needs a CXOps function.
A director says: “NPS rose from 22 to 30, so the new app worked.” What do you check first?
The interval and the instrument: responses, response rate by segment, and any trigger, channel or sample change at launch. Then a journey metric that does not depend on the survey, such as repeat contacts.
Why does the closed-loop rate keep unreachable customers in the denominator?
Dropping them makes the rate look better as the operation gets worse at reaching people.
A theme appears in 300 comments a quarter but no team accepts it. What happens next?
The monthly council: the sponsor assigns an owner with budget, or records a decision not to act with a reason and review date.
Your speech-analytics vendor offers “agent emotion scores” for coaching in an EU contact centre. What is the issue?
The EU AI Act prohibits inferring workers’ emotions at work except for medical or safety reasons; coaching does not qualify. Inferring customers’ emotions from voice is high-risk under Annex III and needs notice; text-only sentiment is not emotion recognition under the Act.
Lab 3 reports a median time to contact of 5.8 hours. Why is that not enough?
It hides the tail: three of eight missed the 48-clock-hour target, one never reached. And under two working days f09 would pass.
Conclusion
Link to section “Conclusion”“CXOps” is not a settled discipline. What is settled is the work beneath the label: hearing customers across the journey, getting each problem to someone who can fix it, and checking that the fix worked. The hard parts are not the survey tool but ownership across teams, error bars on every score, no pay on scores, and verified effects before victory is declared. An operation that does those four things earns the right to ask customers for more of their time; one that does not should ask less.
Sources and further reading
Link to section “Sources and further reading”Every source below was opened on 2026-10-23; dates are the source’s own. Claim-level support, caveats and sources that could not
be fetched are in the evidence ledger (research/cxops-ledger.md).
Changelog:
- 2026-10-23, first version (labs executed locally).
- 2026-10-23, revision 1 after independent review r1 (AI Act high-risk status, sources, glossary, Lab 3 clock rule, figures);
details in
reviews/cxops-r1-response.md. - 2026-10-23, post-score polish: AI Act and GOV.UK precision, worked effect review, repetition trimmed
(
reviews/cxops-polish.md).
What is a BPO call center? How outsourcing benefits enterprise CX — Parloa, 2026-10-16. Checked 2026-10-23. ↩︎ ↩︎
Customer Operations Ultimate Guide — Front, 2026 (undated page). Checked 2026-10-23. ↩︎
The CXPA CX Framework — Customer Experience Professionals Association, page © 2026 (job-task analysis 2020). Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Constellation ShortList™ Customer Experience (CX) Operations Services: Global — R “Ray” Wang, Constellation Research, August 2026. Checked 2026-10-23. ↩︎
Customer Experience - CX Ops — TextExpander blog, 2022-03-30. Checked 2026-10-23. ↩︎ ↩︎
Customer Success And Customer Experience: The Difference Is More Than Semantic — Shari Srebnick and Su Doyle, Forrester, 2026-06-10. Checked 2026-10-23. ↩︎
The Net Promoter System’s “Outer Loop” — Rob Markey, Bain & Company, 2015-06-12. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Create an Effortless Customer Service Experience — Gartner; Internet Archive copy of 2024-11-14 (live page blocks automated access). Checked 2026-10-23. ↩︎ ↩︎
The Truth About Customer Experience — Alex Rawson, Ewan Duncan, Conor Jones, Harvard Business Review, September 2013 (summary read; full text paywalled). Checked 2026-10-23. ↩︎ ↩︎
Customer Satisfaction and Stock Prices: High Returns, Low Risk — Claes Fornell, Sunil Mithas, Forrest V. Morgeson III, M.S. Krishnan, Journal of Marketing 70, January 2006 (author-hosted copy). Checked 2026-10-23. ↩︎
Customer Satisfaction-Based Mispricing: Issues and Misconceptions — Robert Jacobson and Natalie Mizik, Marketing Science 28(5), 2009 (read from an author-institution copy; see ledger). Checked 2026-10-23. ↩︎
The Voice of the Customer — Abbie Griffin and John R. Hauser, Marketing Science 12(1), 1993 (abstract). Checked 2026-10-23. ↩︎
Moments of Truth by Jan Carlzon — Kirkus Reviews, book released 1987-06-01. Checked 2026-10-23. ↩︎
Managing Moments of Truth: Earning Customers Trust — Harish B, Effective Executive (IUP), June 2006 (article abstract quoting the English edition of Moments of Truth). Checked 2026-10-23. ↩︎
Publikationen: Alles für den Kunden (Jan Carlzon) — NPO-Institut, WU Vienna, newsletter 2/2022 (in German, quoting the book). Checked 2026-10-23. ↩︎
The One Number You Need to Grow — Frederick F. Reichheld, Harvard Business Review, December 2003 (summary read). Checked 2026-10-23. ↩︎
The Net Promoter System’s “Inner Loop” — Rob Markey, Bain & Company, 2015-04-01. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
What is Customer Effort Score (CES) — Nicereply help centre (vendor; undated). Checked 2026-10-23. ↩︎ ↩︎
Stop Trying to Delight Your Customers — Matthew Dixon, Karen Freeman, Nicholas Toman, Harvard Business Review, July–August 2010 (opening read). Checked 2026-10-23. ↩︎
Is some demand unnecessary? (Capacity and demand management, section 12) — The Open University, OpenLearn (undated; read with WebFetch). Checked 2026-10-23. ↩︎
Measuring Your Net Promoter Score — Bain & Company (undated page). Checked 2026-10-23. ↩︎ ↩︎
Confidence Intervals for Net Promoter Scores — Jim Lewis and Jeff Sauro, MeasuringU, 2021-01-05. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Net Promoter 3.0 — Fred Reichheld, Darci Darnell, Maureen Burns, Bain & Company (Harvard Business Review article), 2021-10-18. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Journey Mapping 101 — Sarah Gibbons, Nielsen Norman Group, 2018-12-09. Checked 2026-10-23. ↩︎ ↩︎
Service Blueprints: Definition — Sarah Gibbons, Nielsen Norman Group, 2017-08-27. Checked 2026-10-23. ↩︎ ↩︎
Best Practices for Survey Research — American Association for Public Opinion Research (undated page). Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Step 2: Implement Your Directory — Qualtrics support (undated page). Checked 2026-10-23. ↩︎ ↩︎
Web Content Accessibility Guidelines (WCAG) 2.2 — W3C Recommendation, 2024-12-12. Checked 2026-10-23. ↩︎
Gartner Says Only 9% of Customers Report Solving Their Issues Completely via Self-Service — Gartner press release, 2019-09-25; Internet Archive copy. Checked 2026-10-23. ↩︎
Service Standard point 3: Provide a joined up experience across all channels — Government Digital Service (UK), updated 2025-12-16. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
ISO 10004:2018 Guidelines for monitoring and measuring customer satisfaction — ISO, 2018; Internet Archive copy of 2026-01-02. Checked 2026-10-23. ↩︎
ISO 10002:2018 Guidelines for complaints handling in organizations — ISO, 2018; Internet Archive copy of 2026-09-21. Checked 2026-10-23. ↩︎
ISO 23592:2021 Service excellence — Principles and model — ISO, 2021; catalogue page of the Estonian Centre for Standardisation and Accreditation. Checked 2026-10-23. ↩︎
ChatGPT Outperforms Crowd-Workers for Text-Annotation Tasks — Fabrizio Gilardi, Meysam Alizadeh, Maël Kubli, arXiv 2023 (published in PNAS 120(30)). Checked 2026-10-23. ↩︎ ↩︎
Fin AI Agent outcomes — Intercom Help Center (as of October 2026). Checked 2026-10-23. ↩︎
A Longitudinal Examination of Net Promoter and Firm Revenue Growth — Timothy L. Keiningham, Bruce Cooil, Tor Wallin Andreassen, Lerzan Aksoy, Journal of Marketing 71(3):39–51, July 2007 (DOI; abstract read via Crossref; also a repository record). Checked 2026-10-23. ↩︎ ↩︎
What are customer satisfaction surveys (CSATs)? — Atlassian, Jira Service Management Cloud documentation (as of October 2026). Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Net Promoter System: Creating a reliable metric — Rob Markey and Fred Reichheld, Bain & Company, 2012-02-14. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
How to Statistically Compare Two Net Promoter Scores — Jim Lewis and Jeff Sauro, MeasuringU, 2021-02-02. Checked 2026-10-23. ↩︎ ↩︎
Identify direct marketing — Information Commissioner’s Office (UK), updated 2025-08-20. Checked 2026-10-23. ↩︎
What is special category data? — Information Commissioner’s Office (UK), updated 2024-04-09. Checked 2026-10-23. ↩︎
AI Act, Article 3: Definitions — European Commission AI Act Service Desk, Regulation (EU) 2024/1689. Checked 2026-10-23. ↩︎
Red Lines under EU AI Act: Unpacking the prohibition of emotion recognition in the workplace and education institutions — Desara Dushi, Future of Privacy Forum, updated 2026-03-24. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
AI Act, Article 5: Prohibited AI practices — European Commission AI Act Service Desk. Checked 2026-10-23. ↩︎
The AI Act implementation timeline: What changes under the AI Omnibus? — Future of Privacy Forum, updated 2026-08-05. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
AI Act, Annex III: High-risk AI systems referred to in Article 6(2) — European Commission AI Act Service Desk. Checked 2026-10-23. ↩︎
AI Act, Article 50: Transparency obligations — European Commission AI Act Service Desk. Checked 2026-10-23. ↩︎
Difference-in-Difference Estimation — Columbia University Mailman School of Public Health, Population Health Methods (undated page). Checked 2026-10-23. ↩︎