Salesforce Email-to-Case AI Classification ③ Accuracy Is Built in Operations

In the previous two posts, I kept following one small requirement as it expanded into a broader enterprise AI design problem.

In Part 1, the customer’s request was simple: when Salesforce Email-to-Case creates a Case, let AI determine the Level 1 and Level 2 Category instead of making one manager read every new inquiry manually.

In Part 2, the question changed. Even if AI can understand that the customer’s intent has changed, it does not follow that the model should immediately change the Case Category, owner, Queue, and operating history.

That led to a design where the LLM handles ambiguous language, while Human Accept and deterministic application logic control actual business-state changes.

At that point, the customer’s original pain point is largely solved.

The manager no longer needs to read every new Case just to select L1 and L2.

But imagine the project has been running for three months.

A different question appears.

Which inquiries has the AI repeatedly misclassified, and how much better is the classification logic now than it was when we first deployed it?

If the system cannot answer that question, something is missing.

We may have built an AI classification feature without building the capability to improve it from real operations.

This post is about what should happen after automation starts producing data.

It is not simply about storing more logs.

It is about which signals to preserve, what should count as a real misclassification, how production signals become an Evaluation Dataset, how improvement candidates should be tested, and how validated changes can return to Production without turning the system into an uncontrolled feedback loop.

1. Automation Can Be Complete Before the Improvement System Is

For a practical delivery project, this can already be a successful implementation:

Incoming Email
      ↓
Salesforce Case
      ↓
AI Classification
      ↓
L1 / L2
      ↓
Assignment Rule
      ↓
Right Team

The manual classification bottleneck is reduced.

The API works.

The Structured Output is valid.

The Case Category is updated.

The Assignment Rule executes.

If we look only at the contracted requirement, the work is done.

The harder questions arrive later.

A few months into operations, someone may ask:

“Which Categories does the AI confuse most often?”

“We changed the Prompt last month. Did it actually improve the result?”

“How many Cases were sent to the wrong Queue?”

“When a Case is recategorized, how much longer does resolution take?”

If the required data was never captured, those questions are difficult to answer after the fact.

In AX, useful data is not automatically created as a by-product of running the system. We need to think in advance about what we may want to understand later.

That is slightly different from Implementation Scope.

The customer may only have requested automated classification.

The delivery team may fully satisfy the contract by implementing exactly that.

But whether we also close off the system’s future Improvement Capability is a separate architecture decision.

2. Current State and Historical Events Are Different Data Problems

Suppose a Salesforce Case stores only its current Category.

The AI initially sets:

Billing

Later, an agent changes it to:

Product Support

If we query the Case now, we may only see:

Current Category = Product Support

But the questions we may want to answer later are much richer.

What did the AI originally predict?

What was the model’s Confidence?

Which EmailMessage and Context did it use?

Which model and Prompt version produced the prediction?

Which Queue received the Case first?

When did an agent first pick it up?

When was the Category changed, and by whom?

Why was it changed?

Which Category was final?

How long did the actual Resolution take?

Saving the Current State and preserving the History are different problems.

This is why, in Part 2, I deliberately considered timestamps such as Category Started At, Transition Accepted At, First Pickup At, and Resolved At.

Even if nobody is building a Dashboard today, an event that may matter later needs to be recorded when that event happens.

3. Prediction Data Has to Be Connected to Business Outcomes

I do not think of AI Observability as simply keeping model-call logs.

A Prediction record might contain:

Case ID
EmailMessage ID

Predicted Category Key
Confidence
Predicted At

Model Version
Prompt Version
Taxonomy Version
Rule Version

The actual business workflow may then produce:

Assigned Queue
First Pickup At

Transition Proposed
Accept / Reject

Category Changed
Changed From / To
Changed At

Final Category
Resolved At
Escalated

Keeping both sets of data is useful, but keeping them separately is not enough.

The important part is connecting them as one operational chain:

Prediction
      ↓
Assignment
      ↓
Human Operation
      ↓
Correction / Transition
      ↓
Outcome

Then we can move beyond a statement like:

“AI classified the Case as Billing.”

We can say:

“AI classified the Case as Billing and it was assigned to the Billing Queue. An agent picked it up 12 minutes later. Eighteen minutes after that, the Category was changed to Product Support. The issue was then resolved 42 minutes later in Product Support.”

Only at that point can we discuss how the AI judgment affected the actual work.

4. A Human Category Change Does Not Automatically Mean the AI Was Wrong

The easiest way to detect a possible error seems obvious.

AI Prediction
Billing

Human Final Category
Product Support

Why not simply label that as:

AI Wrong

Because, as Part 2 showed, real email operations are messier than that.

The original email may genuinely have been a Billing inquiry, while the customer introduced a new device issue later.

The definitions of the two Categories may themselves be ambiguous.

An agent may move a Case to another Queue for operational convenience.

The AI Category may have been correct while the Assignment Rule was wrong.

The same Category Changed event can therefore have very different causes:

AI Misclassification
Intent Changed
Taxonomy Ambiguity
Operational Override
Assignment Rule Issue
Other

That leads to an important distinction.

Human Correction is not Ground Truth.

Human Correction is a very important signal.

But it should not automatically become the answer label.

The better question is not:

“Was the AI wrong?”

It is:

“Why did the human change the AI’s judgment?”

That question tells us what kind of improvement is actually needed.

A Salesforce Case changed from Billing to Product Support, illustrating that human correction can reflect AI misclassification, intent change, taxonomy ambiguity, operational override, or an assignment-rule issue.
A Category change is an important signal, but it does not prove that the AI was wrong. The reason for the human correction has to be established before it becomes a trusted label.

5. Making Managers Review Every Correction Recreates the Work We Removed

If Human Correction is not automatically Ground Truth, another solution seems available: ask a manager to review every changed Case.

Suppose one month produces:

Total Cases
10,000

Human Recategorization
430

We could ask the manager to read all 430 cases and answer:

AI Wrong?
Yes / No

Technically, that creates reviewed labels.

Operationally, it creates an odd loop.

Originally, the manager manually classified every Case.

We introduced AI to remove that repetitive work.

Then we created hundreds of AI-review tasks and gave them back to the same manager.

There is little value in removing manual classification only to recreate it under the name of AI review.

Instead of looking at every Case first, I would start by looking for repeated patterns.

6. Review Patterns Before Reviewing Individual Cases

Suppose one change appears:

Technical Support
Device Failure
        ↓
Billing
Warranty Charge

Once may be noise.

But if the same transition appears 37 times in the last 30 days, it becomes a useful candidate for investigation:

Technical Support / Device Failure
→ Billing / Warranty Charge

37 Cases

Now there is evidence that the model may be repeatedly confusing a particular boundary.

Frequency alone is still not enough.

Consider two patterns.

Pattern A

General Inquiry
→ Product Inquiry

150 Cases

Average Pickup Delay
+3 min

Pattern B

General Inquiry
→ Critical Incident

14 Cases

Average Pickup Delay
+47 min

Pattern A is much larger by count.

Pattern B may matter more to the business.

So a Review Candidate can conceptually consider several dimensions together:

Frequency
×
Business Impact
×
Ambiguity / Confidence

The point is not to invent a sophisticated score on day one.

The principle is simpler:

Do not send every Case back to a human. Find the patterns that are most worth human attention.

7. The Manager’s Role Can Move from Classifier to Governor

The original operating model looked like this:

Every New Case
      ↓
Manager
      ↓
L1 / L2 Classification

With AI and operational data, the role can become:

Every New Case
      ↓
AI Classification
      ↓
Operation
      ↓
Pattern Detection
      ↓
High-value Edge Cases
      ↓
Manager Review

The manager no longer needs to classify every Case.

Instead, they can review patterns such as:

Pattern A
AI: Technical / Device Failure
Human: Billing / Warranty Charge
Cases: 37
Avg Delay: +18 min

Pattern B
AI: General Inquiry
Human: Critical Incident
Cases: 14
Avg Delay: +47 min

Then they inspect representative cases and determine the cause:

AI Misclassification
Taxonomy Ambiguity
Intent Changed
Operational Override
Rule Issue

The role moves from:

Classification Operator

to:

Classification Governor

I find this a more interesting way to think about how AX changes human work.

The goal is not simply to remove people from the loop.

It is to move people out of repetitive judgment and into the role of deciding which judgments should become trusted policy and which changes are safe to accept.

8. Production Logs Should Not Be Used as an Evaluation Dataset Directly

It also helps to distinguish several data layers that can look similar:

Production Log

Human Correction

Confirmed Label

Evaluation Dataset

Suppose the system records:

AI
Billing

Human later
Product Support

That is a useful Production Signal.

It is not yet the answer.

Now suppose a manager reviews the actual Case and Email Context and concludes:

Reason
AI Misclassification

Expected Category
Product Support / Device Failure

That is much closer to a Confirmed Label.

After enough confirmed samples are collected, we can prepare them for repeatable Evaluation by:

  • reducing duplicates;
  • checking Category coverage;
  • preserving important Edge Cases;
  • preventing highly similar examples from dominating one side of the dataset.

Only then do we have something closer to an Evaluation Dataset.

Production Log, Confirmed Label, and Evaluation Dataset are different things.

This distinction matters.

A loop like this can look attractive:

Production
→ Human changes label
→ Automatic learning
→ Back to Production

But if the human changed the Case for the wrong reason, or because the intent changed later, automatically feeding that change back as truth can amplify error instead of reducing it.

A pipeline that turns Salesforce production signals and human corrections into reviewed patterns, confirmed labels, and a curated Evaluation Dataset.
Production changes and recategorizations should pass through pattern review and human validation before they become Confirmed Labels and reusable Evaluation data.

9. Ground Truth May Stop Being True When the Business Definition Changes

Even a curated Evaluation Dataset is not permanent.

The business taxonomy can change.

Suppose the current definition is:

Taxonomy v7

Billing
├ Refund
├ Invoice
└ Warranty Charge

A few months later, an organizational policy change moves Warranty Charge under Product Support.

A sample that was previously reviewed as:

Expected Category
Billing / Warranty Charge

may no longer be correct under the current taxonomy.

That means Evaluation Samples may also need context such as:

Taxonomy Version
Label Version
Reviewed At

Ground Truth is not necessarily timeless when the business definition itself changes.

Versioning in AI Evaluation is therefore more than a development convenience.

We need to be able to reproduce which definition of “Correct” was used when a result was evaluated.

10. A Misclassification Pattern Does Not Mean the Prompt Is the First Thing to Fix

When repeated misclassification appears, the most tempting response is often to edit the Prompt.

I also find that easy to think first:

“Maybe we can add one more sentence to the Prompt for this case.”

But the root cause may be somewhere else.

Taxonomy problem

The business definitions of two Categories overlap.

→ Fix the Category definitions first.

Prompt problem

The definitions are clear, but the instruction given to the model is insufficient.

→ Improve the Prompt.

Few-shot problem

The model lacks examples for a particular boundary condition.

→ Add or improve examples.

Input problem

Forwarded email text, signatures, and quoted history are creating noise.

→ Improve preprocessing or normalization.

Rule problem

A Salesforce Field or another deterministic condition already provides the answer.

→ Move that condition out of the LLM and into deterministic logic.

Context problem

The first Email alone does not contain enough information.

→ Adjust which Context is supplied.

Model problem

The current model cannot reliably distinguish the required meanings.

→ Evaluate another model.

Only after those options does Fine-tuning necessarily enter the discussion.

My rough order of consideration often looks like this:

Taxonomy
      ↓
Prompt
      ↓
Few-shot
      ↓
Input Normalization
      ↓
Deterministic Rules
      ↓
Context
      ↓
Model
      ↓
Fine-tuning

This is not an absolute sequence.

The principle is more important than the exact order:

Start with changes that are cheaper, more explainable, and easier to reverse whenever possible.

A stronger AI model is not automatically the right answer.

11. Runtime Classification and Offline Improvement Do Not Need the Same Model

Part 2 argued that the runtime classification itself may be simple enough for a relatively lightweight model.

For every inbound email, the job may be only:

L1 / L2 semantic classification

If a smaller model meets the required quality, it can be a sensible choice for Production because latency and cost matter at runtime.

Improvement analysis has a different profile.

Suppose we collect one month of confirmed misclassification patterns and representative cases and ask:

Why are these Categories repeatedly confused?

Is the current Taxonomy ambiguous?

Which Prompt instruction is missing?

Can any condition move to a deterministic Rule?

That work happens less frequently, but it can require deeper reasoning.

For that stage, using a stronger reasoning model can be justified.

The architecture can separate the two roles:

Production Runtime
→ Lightweight Model
→ Fast, economical classification

and:

Offline Improvement
→ Stronger Reasoning Model
→ Pattern / Root Cause / Improvement Proposal

Instead of paying for the strongest model on every request, it can be more rational to match model capability to the kind of judgment being made.

This is another example of defining clear LLM boundaries instead of turning one large Agent into the owner of everything.

12. An Agent Can Propose Improvements Without Becoming the Validation Authority

This is where an Agent can become genuinely useful.

Suppose the manager has confirmed enough real misclassifications.

An Agent can orchestrate work such as:

Collect Confirmed Misclassifications
        ↓
Select Representative Cases by Pattern
        ↓
Analyze Root Cause
        ↓
Generate Prompt / Rule / Taxonomy Improvements
        ↓
Generate Candidate Logic
        ↓
Run Evaluation Dataset in Bulk
        ↓
Compare Current vs Candidate
        ↓
Write Improvement Proposal

That is a strong use case for an Agent.

It can call several tools, gather multiple data sources, run repeated evaluations, and summarize the evidence.

But there is still an important boundary.

The final claim that “the Candidate is better” does not need to depend only on an Agent’s natural-language judgment.

For the same Evaluation Dataset, the application can calculate the result deterministically.

For example:

Current Logic

Correct 910 / 1000
Accuracy 91.0%
Candidate Logic

Correct 943 / 1000
Accuracy 94.3%

The application can also compute per-Category Regression.

The Agent can explain those results.

But numerical metrics and Release Gates can remain explicit code wherever possible.

The same principle returns again:

The Agent can explore and propose improvements. The validation criteria should remain as deterministic as practical.

13. Higher Overall Accuracy Does Not Automatically Mean a Better System

Suppose a Candidate Prompt produces:

Metric                  Current   Candidate
Overall Accuracy        91%       94%
Warranty Edge Cases     62%       91%
Critical Incident       96%       94%

Overall Accuracy clearly improves.

Warranty cases improve dramatically.

But Critical Incident accuracy drops.

If Critical Incident is operationally important, a 2% Regression may not be acceptable even when the global number rises.

Higher overall Accuracy does not automatically mean a better business system.

Evaluation therefore needs more than a single headline metric:

Overall Metric
+
Category Metric
+
Critical Edge Cases
+
Regression

And even those Model Metrics are not the final outcome.

14. Model Accuracy and Business Performance Need to Be Read Together

This is where the timestamps from Part 2 become important again.

Suppose classification Accuracy improves:

91%
→ 94%

That is good.

But suppose, in the same period:

Average Resolution Time
42 min
→ 55 min

It would be difficult to claim that the actual operation improved.

Operational data can therefore include measures such as:

Recategorization Rate

Wrong Queue Rate

Time to First Pickup

First Response Delay

Resolution Time

Category Transition Frequency

Category Oscillation

Escalation Rate

In a messy real-world process such as Email-to-Case, accurate event data becomes especially important.

A single Case can move across multiple business Categories inside one thread.

If we only look at the Current Category, earlier handling segments disappear.

If we calculate work duration from a historical record’s CreatedDate instead of the real business-start timestamp, the result can be distorted.

That is why the explicit handling segments and timestamps from Part 2 become the analytical foundation of Part 3.

Model Metrics and Business Metrics need to be connected.

Then we can move beyond:

“Classification became more accurate.”

and ask whether:

“The Case reached the right team faster, and the customer’s inquiry was actually resolved faster.”

15. Managers Should See Evidence, Not Just a Proposed Change

At this point, an Agent may be able to produce a proposal such as:

Candidate Improvement #17

Target Pattern
Technical / Device Failure
→ Billing / Warranty Charge

Observed
37 confirmed misclassifications

Root Cause
Warranty inquiries tend to over-weight
device failure wording

Proposal
Prompt v8 → v9

Evaluation

Overall
91.2% → 94.0%

Warranty Edge Set
63% → 92%

Critical Incident
96% → 96%

Business Simulation
Wrong Queue -21 cases / month
Estimated Pickup Delay -6.4 min

The manager should not merely see:

“AI recommends changing the Prompt.”

The useful review surface is the evidence:

Why the change is proposed, which data supports it, how much better the Candidate performs than the Current Logic, and whether any important Category regresses.

Then the manager can choose:

[Reject]
[Request Review]
[Approve]

An AI-generated improvement should not automatically become Production logic.

Manager Approval becomes another Production Boundary.

In Part 2, Human Accept controlled the state transition of an individual Case.

Here, Manager Approval controls a change to the AI logic itself.

The same governance principle applies at a different level.

An AI improvement workflow where an Agent proposes candidate logic, bulk evaluation compares current and candidate performance, and a manager reviews evidence before Production deployment.
The Agent can generate and evaluate an improvement candidate, but Production change remains gated by deterministic metrics, regression evidence, business impact, and Manager Approval.

16. This Is Where the Closed Loop Becomes Real

The full structure now looks like this:

Incoming Case
      ↓
AI Classification
      ↓
Assignment
      ↓
Human Operation
      ↓
Correction / Outcome
      ↓
Observability
      ↓
Pattern Detection
      ↓
Manager Review
      ↓
Confirmed Labels
      ↓
Evaluation Dataset
      ↓
Improvement Analysis
      ↓
Candidate Logic
      ↓
Bulk Evaluation
      ↓
Regression / Business Metrics
      ↓
Manager Approve
      ↓
Deploy
      ↓
Incoming Case...

At a glance, this looks like a Data Flywheel.

What matters to me is that the loop is not fully autonomous.

It is not:

AI observes
→ AI rewrites its own Prompt
→ AI deploys to Production

A more realistic structure is:

Observe
→ Detect
→ Propose
→ Evaluate
→ Review
→ Approve
→ Deploy

AI can do a great deal inside that loop.

It can find patterns.

It can analyze likely causes.

It can generate improvement candidates.

It can act as an Agent that executes thousands of Evaluation runs.

But there is no requirement to give AI ownership of the system state, the evaluation standard, and the authority to change Production at the same time.

17. The Hardest Decision Is Often Choosing This Structure Before Anyone Asks for It

The hardest part may not be drawing the Closed Loop diagram.

The practical challenge is that the customer often says:

“We only need automatic email Category classification.”

And from a delivery perspective, this can satisfy the requirement:

LLM Call
Structured Output
Salesforce Update
Assignment Rule

Why store Prediction History separately?

Why preserve Category Transition timestamps?

Why record Prompt Version?

Why think about an Evaluation Dataset now?

If the customer did not request any of that, expanding the project Scope may not be justified.

I do not think that concern is wrong.

Projects have schedules.

They have budgets.

They need boundaries.

But there is an important difference:

Keeping Implementation Scope small is not the same choice as eliminating the possibility of future improvement.

We do not need to build a large Evaluation Platform from the beginning.

But even preserving a minimal set of events can change what becomes possible later:

Prediction
Model / Prompt Version
Category Change
Accept / Reject
Pickup
Resolved

Both architectures can solve today’s customer pain point.

In one architecture, several months later we also have the data required to improve the system.

In the other, we may only have the final Current State of each Case.

18. AX Data Is an Asset We Have to Design, Not a By-Product We Receive for Free

When I first looked at this project, the customer’s problem appeared simple.

One manager was reading every new Case and selecting an L1/L2 Category.

It seemed enough to let AI make that decision.

But the scope of the thinking changed as I looked at the real Salesforce structure, the way customers use email, the way agents move through operational states, and what needs to be preserved when Categories change.

Eventually, the design came back to data.

What was the AI actually wrong about?

Why was it wrong?

Does the error repeat?

How much business impact does it create?

What change could fix it?

Did the change really make the system better?

To answer those questions, we need to think about data when AI is introduced, not after the AI feature has already been running for months.

In AX, data does not become valuable simply because the system has been running. We need to decide in advance which Signals and Outcomes must be preserved so that tomorrow’s improvement can be evaluated from today’s operations.

In Part 1, I argued that Implementation Scope can stay small while Thinking Scope and Observability should not.

After following the same problem through three posts, that principle is clearer to me.

Implementation Scope can stay small. Improvement Scope does not need to be closed.

Solving the customer’s current pain point matters.

A well-designed AX system can go one step further: today’s operation leaves behind the evidence required to make tomorrow’s judgment better.

That is the part of this small Email-to-Case classification case that I ultimately found most important.