Case Study 12 · CModel Data, Inc · Pipeline Architecture

Asked to Build a New Pipeline. Found a Record Type Gap That Had Been Invisible for Years.

Pipeline Architecture · Salesforce · Sales Process · Record Type · Data Integrity

Salesforce Sales Process Record Type Data Integrity
$8.3M
Services RFP moved onto the correct pipeline, history intact
79
Opportunities being reconciled into Salesforce
6
Stages in the new dedicated Services pipeline

The Ask

Every deal — software or services — ran through the same six stages built for software.

The organization had never separated Services opportunities from its core Software pipeline in Salesforce. Every deal — regardless of whether it was a core software sale or a hands-on services engagement like implementation, migration, training, or managed services — ran through the same six-stage sales process, using fields and stage names built for software deals.

Leadership wanted a dedicated Services pipeline: its own stages, its own required fields at each stage, and enforcement so deals couldn't silently skip steps like NDA collection or SOW sign-off. Alongside that, 79 services opportunities sitting in a separate task-tracking tool — never entered into Salesforce — needed to be reconciled and loaded.

The ask arrived with a hand-drawn stage diagram, a spreadsheet, and the instruction that the data load was needed the same day.

The Ask, As Written

Two requests, framed as one same-day task.

Both were framed as needed the same day.

Surfacing the Real Scope

The stages in the diagram didn't exist yet. The data load depended on stages that hadn't been built.

The gap between the request and what it actually required became clear almost immediately.

This was raised directly and in writing before any build work began: the data load was achievable same-day; the stage and field architecture was not.

Record Type vs. Sales Process

Stage is one shared field across the whole org. Record Type is a lens on top of it, not a new field.

A key early misconception, worth naming because it shaped the whole build: Salesforce's Stage field is a single, shared field across every Opportunity in the org — there's no way to give Services its own independent Stage field. What actually creates separation is a new Sales Process, a named, curated subset of Stage values, paired with a new Record Type, which determines which Sales Process — and therefore which subset of Stage values — a given rep sees in their dropdown.

Record Type doesn't create a new field. It's a lens on top of one shared field. That distinction mattered later, when a pre-existing data issue caused the entire historical Stage picklist to leak into records that weren't properly typed.

Avoiding Duplicate Fields

Auditing before building cut an initial 13-field list down to 8.

Before building anything, the Opportunity object's existing fields were audited against the diagram's required-fields list. This caught several near-duplicates before they were built:

Net result: of an initial 13-field build list, only 8 fields were genuinely new.

Enforcing "Required," and Where Validation Rules Hit a Wall

Two required fields couldn't be enforced with a validation rule — so they weren't, on purpose.

The diagram's stage plan showed dotted "Required" brackets — fields that must be filled in before a deal could advance. The natural tool for this is a validation rule. Two of the required fields, however, are multi-select picklists, and Salesforce's validation rule formula engine does not reliably support blank-checking on multi-select fields, even using documented workarounds.

Rather than fight platform limitations for marginal gain, those two were enforced via page-layout required instead of a validation rule — a deliberate, documented trade-off, bypassable via API or import unlike a true validation rule, rather than an oversight.

Turning "Uploaded" Checkboxes Into Something Trustworthy

A checkbox anyone can check isn't proof of anything. So the checkbox became a byproduct, not a claim.

The diagram called for checkboxes like "NDA Uploaded" and "MSA Uploaded." A plain checkbox has an honesty problem: nothing stops a rep from checking the box without actually attaching a document. The fix was four Screen Flows, each triggered by a dedicated Quick Action button. Each Flow presents a file-upload component scoped to the current record, and only checks the corresponding box once a real file has landed on it — making the checkbox a byproduct of the upload, not a manual claim.

Four separate buttons, rather than one button with a document-type dropdown, were chosen specifically to remove the chance of a rep mislabeling which document they'd uploaded.

Bugs Caught Through Live Testing

None of these would have surfaced from a code review.

They only showed up by actually clicking through real records:

Deployment

One component looked deployable and wasn't. Post-deploy verification caught it.

The build was packaged into a single production change set: Record Type, all new fields, the Services-specific page layout, a dedicated Lightning Record Page, four Flows and Quick Actions, and four validation rules. One component didn't survive the change set as expected — the Sales Process showed in the component list but didn't deploy cleanly, and was rebuilt manually in production in under five minutes. A reminder that Salesforce change sets, even when a component looks deployable, warrant post-deploy verification rather than blind trust.

The Discovery: A Data Integrity Gap That Had Existed for Years

The entire sales org had been defaulting to Salesforce's internal fallback Record Type. For every deal. For years.

While configuring which user profiles could see the new Service Opportunities Record Type, a much bigger, entirely unrelated problem surfaced: the sales team's profile had never been assigned the org's existing standard Opportunities Record Type. Every AE — the whole active sales org — had been defaulting to Salesforce's internal fallback ("Master") for every opportunity they'd ever created. Only admin accounts had the correct Record Type properly assigned.

The practical effects:

This had almost certainly existed for years, invisible because the fallback type still rendered a normal-looking layout — nothing was ever visibly broken, so nobody had reason to look.

"The most valuable finding wasn't the one being looked for. A Record Type audit for a new feature surfaced a systemic, years-old data integrity gap affecting the entire sales org."

Resolution

Fixed the same day it was found, and proven live on a real record.

Flagged immediately to leadership, fixed the same day once approved — the correct Record Type was set as the default for the sales profile, and verified live with an active rep successfully creating a properly-typed opportunity. The fix addresses all new records going forward; a mass reassignment of historical, incorrectly-typed records remains a separate, still-open decision.

One live opportunity — an $8.3M Services RFP that had been miscategorized under the old Software process — was manually converted to the correct Record Type and Stage as a proof point, preserving its full activity and stage history through the conversion.

Validation

Two independent checks, not just the builder's own testing.

The Outcome

A separated pipeline, live and validated — plus a years-old gap found and closed as a byproduct.


What Was Built