( technical program management — systems & migration )

I turn fragmented operations into one system of record.

A self-directed program unifying a multi-family solar pipeline onto Salesforce — discovery through rollout, with a working org, migrated data, live automation, and a defect taken to closure.

9→1
TEAMS ONTO ONE SYSTEM OF RECORD
8
EPICS · ~40 STORIES, FULL LIFECYCLE
13/13
UAT CASES PASSED, 1 REAL DEFECT CLOSED
3
AUTOMATION FLOWS ACROSS ALL TRIGGER TYPES
15
CUSTOM FIELDS + VALIDATION RULES
7
EXTERNAL SYSTEMS MAPPED
( 01 — the problem )

Nine teams. Nine spreadsheets. Zero visibility.

A multi-family solar operation moved every project through nine specialized teams — Sales, Development, Site Survey, Design, Permitting & Interconnection, Incentives, Construction, Business Ops, and Project Management. Each team tracked its own work in its own spreadsheet.

The result was a pipeline nobody could see. Status lived in nine places and agreed in none. Handoffs happened by email and fell through. Data was re-keyed between stages, drifting a little more each time. Leadership had no reliable way to answer "where is this project?" or "how much capacity activates this quarter?"

The teams weren't the problem. The absence of a shared system was. The goal: unify the pipeline onto one system of record — without dragging the mess along, and without asking nine teams to simply work harder.

( 02 — approach )

I ran it as a program, not a build sprint.

Eight phases, managed through a Jira board from first ticket to Done. Each phase gated the next: discovery before design, a working system before migrating data into it, testing before rollout.

The organizing principle throughout was one source of truth for every definition — a single meaning for each stage, each required field, and for "at risk" — so no two parts of the system could ever contradict each other.

01 DISCOVERY & REQUIREMENTS02 PROCESS DESIGN03 SALESFORCE BUILD04 DATA MIGRATION05 AUTOMATION06 REPORTING & FORECAST07 UAT & DEFECTS08 ROLLOUT & SOPs
( 03 — the judgment layer )

Anyone can ship artifacts. The job is the tradeoffs.

Because this was a solo build, the judgment lives in the decisions. Four that mattered:

D — NORMALIZATION

A crosswalk table, not nested formula logic

Remapping legacy values ("New" → "Intake") is a business decision, so it belongs in a readable table anyone can review — not buried in a formula. Unmatched values fail loudly rather than pass silently.

D — AUTOMATION

Before-save and after-save, split by job

Two flows fire on the same stage-change event. I separated them because updating the record's own field and creating a related task are different operations that Salesforce optimizes differently.

D — DATA INTEGRITY

Validation rules stay ON during the load

Disabling the integrity guardrails to force known-bad data in would have recreated the exact problem the program existed to solve. Flagged rows get remediated instead.

( 04 — what broke )

My forecast produced confident, wrong numbers.

Spilled and manually-filled columns had drifted out of alignment, so a lookup was returning real-but-mismatched values — with no error. The fix, and the lesson: match every pull on the Project ID key rather than on row position. A formula is only as right as what feeds it.

UAT surfaced a genuine defect too — migrated records had blank stage-timing data because the bulk load bypassed the automation that normally sets it. I root-caused it to a documented load-plan gap, backfilled, and retested to closure. The defect lifecycle working exactly as intended.

And a standard Salesforce component failed silently inside the intake flow — a Lookup that hung indefinitely. Diagnosed and swapped for a Record Choice Set, the modern reliable pattern.

( 05 — outcomes )

Mechanisms, not invented metrics.

As a simulated program, I report what the system makes possible rather than fabricating numbers:

VISIBILITY

Measurable at a glance

Pipeline status, aging, and at-risk projects — previously invisible across nine spreadsheets.

INTEGRITY

Impossible to save bad data

Non-compliant records blocked by validation rather than by vigilance.

FORECAST

Capacity becomes predictable

Probability-weighted Commit / Weighted / Best Case tiers that didn't exist before.

( see the system )

Three minutes, nine spreadsheets to one pipeline.

The Jira lifecycle across eight epics, the Salesforce board re-stamping dates and spawning handoff tasks on a stage change, the validation rule blocking a project that skipped its site survey, the two conflicting exports reconciled into one dataset, and the weighted forecast a leader can plan against.

▶ Watch the walkthrough
( 06 — reflection )

The shape of the real job.

Conduit took a fragmented, spreadsheet-bound operation and delivered a working, governed, tested pipeline with a clear path to production — planned, built, migrated, automated, measured, tested, and handed off.

It's the shape of the real job: not one deliverable, but a whole program held together by traceable decisions and a single source of truth.

Honest scope: built at teaching scale with a small, fully-verifiable dataset and production behavior documented rather than simulated. Next steps are named — add the external-ID field and re-run the load as an upsert, build the v1 integrations, implement production queue routing, and calibrate forecast probabilities from real conversion history.