Skip to content
← Back to projects
Salesforce application update (Digit Learning) — cover image
Training project — RNCP 6 diploma

Salesforce application update (Digit Learning)

Salesforce application update (Digit Learning)

Quality audit of a 2-year-old Salesforce org, then modernization: a junction object to lift the "one student = one training" limit, automated enrollment and mentor assignment, 3 management reports, data migration — with a quantified impact analysis.

Context

Digit Learning, an online professional training school, had been using Salesforce for about 2 years with dedicated business objects (Student, Mentor, Training). The project manager commissioned an internal quality audit followed by a modernization plan.

This isn't a greenfield project: it's the most common real-life case on a Salesforce team — improving an existing org without breaking it. The audit, the right structural fix, the data migration, and measuring the gain are the heart of the work here.

The quality audit

Method: interviews with key users — sales reps and management, to cross-check perspectives rather than starting from a single voice.

FindingFlagged byImpact
The data model only links a student to a single trainingSales + managementCentral finding: sales and pedagogical tracking impossible for multiple enrollments
Enrollment + mentor assignment > 30 min/student, no automationSales repsSales time consumed by data entry
No structured former-client trackingManagementNo loyalty lever, no way to measure satisfaction
Insufficient reports and metricsSales + managementDecisions made without reliable visibility

The structural fix: the junction object

The fix isn't a workaround — it's the right model. A new Purchased Training object in master-detail to Student and to Training turns the relationship into a proper many-to-many:

  • carries its own attributes: start/end dates, type, price;
  • permanently lifts the "one training per student" limit and enables multiple enrollments;
  • unlocks roll-up summaries (available seats / maximum headcount on Training) — remaining capacity becomes a computed value, not a hand-maintained field.

Existing objects are enriched accordingly: Student (training history, active-client / former-client status), Mentor (availability), Training (available seats, maximum headcount).

Automation

  • Enrollment + mentor assignment automated — a direct audit recommendation, implemented to give sales reps back the time data entry was costing them.
  • Structured former-client tracking + a process for periodic review of training relevance: the catalog no longer drifts for lack of being reviewed.

The 3 reports delivered

ReportFor whomDecision it supports
Trainings with available seatsSales repsWhich session to offer, in real time
Students by status and mentorSales repsPortfolio tracking
Prospect → active client conversion rateManagementCommercial performance tracking

Deployment & migration

  • Deployment of the app via Workbench (zip package, Migration > Deploy).
  • Migration of existing data (students, mentors, trainings) via Data Loader, in dependency order — the risky part of any org change: carrying over the existing data with no loss or duplicates.

Measured impact

ProcessBeforeAfterMeasurement
Mentor assignment + enrollment> 30 min / student5 min / studentPer-student timing, before/after
Former-client tracking> 15 min / contact10 min / contactPer-contact timing
Catalog management & review> 30 min / review15 min / reviewPer-review timing

The impact analysis is qualitative and quantitative: time saved is quantified per process, not in aggregate — which is what makes it defensible.

Decisions & assumed limitations

DecisionAlternative rejectedWhy
Master-detail junction objectMultiple lookup fields on StudentA clean many-to-many, with per-enrollment attributes and roll-up summaries; multiple lookups would have hit a ceiling and broken computed capacity
Roll-up summary for available seatsA counter maintained by automationA platform-computed value doesn't drift out of sync
Data Loader migration in dependency orderObject-by-object import with no sequencingMaster-detail relationships require the parent to exist before the child

Assumed limitations:

  • Master-detail cascades deletes: deleting a Student deletes their Purchased Trainings. Acceptable here (an enrollment with no student is meaningless), but it's a constraint to know up front, not a side effect discovered later.
  • Gains measured on Dev Org datasets, not on Digit Learning's full production volume — the order of magnitude is solid, the exact figure would need confirming at scale.
  • Time saved per process, not team-wide throughput: the measurement covers an isolated task, not the full commercial pipeline.

Results

MetricValue
Structural limitation lifted"1 student = 1 training" → multiple enrollments
Management reports delivered3
Gain on the heaviest process30 min → 5 min per student
RNCP diploma evaluation5/5 competencies validated

What this project demonstrates

The most-used skill on a real Salesforce team: modernizing an existing org without breaking it. An audit built on cross-checked interviews, a fix that chooses the right data model over a shortcut, a sequenced migration of existing data, and a per-process quantified impact analysis that proves the gain rather than asserting it.

Fil-rouge project from the RNCP Level 6 "Développeur Concepteur Logiciel" diploma (OpenClassrooms): imposed context, org and constraints, deliverable defended before a jury. It is expanded here with the audit / model-choice / migration / impact-measurement reading expected in a professional context — beyond the strict scope of the exercise.

Screenshots

Salesforce application update (Digit Learning) — screenshot 1 of 6