Loading...

Engineering

Ticket flow. Reliability. Throughput per developer.
DataOS reads Salesforce Ticket__c + history straight from the source — surfacing cycle time, MTTR, rework, intake wait, and release reliability without any spreadsheets.
Cycle Time (median)
...
days, dev-start → close
MTTR (P1/P2 defects)
...
hours
Throughput / Dev
...
weighted hours · per month
Rework Rate
...
% of tickets reopened
Ticket Explorer Live · Salesforce Ticket__c
Ticket Title Department Kind Severity Cycle (d) Status
Loading…
Delivery Flow Live
Loading distributions…
Cycle Time Trend Median days, per close month
MTTR Trend P1/P2 defect restore hours
Throughput Trend Weighted hours / active dev
Incident & Inflow P1/P2 incidents vs. tickets created
How to read this dashboard

This is the IT Development work stream — defect fixes and feature work delivered by the development team. Two KPIs tell the story. Delivery Cycle Time measures how long a ticket takes from a developer starting work to the hand-off into QA — the team’s speed. Critical Platform Reliability counts whole-system outages — and it counts incidents, not tickets, so duplicate reports and recovery work ride along without inflating the number. Each KPI reads top to bottom: headline tiles first, the last 90 days against targets in the strip beneath, then the monthly trend. The Outage Triage Register at the bottom is the audit trail — every ticket the outage triage examined, with the verdict it received and why.

  • Hover any i marker for the exact definition of the number beside it.
  • Nearly every number is a doorway: tiles and chips marked View tickets → open the exact tickets behind the figure, and clicking a point on a trend chart opens that month’s tickets.
  • In the register, click a row to see how that ticket was triaged; the ticket number deep-links to Salesforce.
Engineering Delivery Cycle Time i Dev start → QA hand-off · Ticket__History
Loading…
Dev → QA Monthly Trend i Median days by QA-entry month
Critical Platform Reliability i Whole-system outages · internal vs vendor origin
Loading…
Whole-System Outages Monthly Trend i Incidents by root-cause origin, per created month
Outage Triage Register i …
Ticket Title Created Scope Origin Response (h) Restore (h) Closed (h)
Loading…
How to read this dashboard

This is the Salesforce Operations queue — the team’s own ticket record type: reports, system updates, account merges, flows and projects. Demand & Completion shows how much new work arrived this year and how much was finished — completions include older backlog closed this year, because finishing old work is still work delivered. Open Queue & Resolution shows what is sitting open right now, split into the Active queue (assigned and being worked) and Pending (parked, awaiting prioritization, specification or review), plus how fast resolved work turns around. Each KPI reads top to bottom: headline tiles, the last 90 days against targets, then the monthly trend. The Open Queue Register at the bottom lists every open ticket, newest first.

  • Hover any i marker for the exact definition of the number beside it.
  • Nearly every number is a doorway: tiles, phase chips and View tickets → cues open the exact tickets behind the figure, and clicking a point on a trend chart opens that month’s tickets.
  • In the register, click a row to see how that ticket was classified; the ticket number deep-links to Salesforce.
Demand & Completion i Salesforce record type · created vs closed this year
Loading…
Created vs Completed Monthly Trend i Tickets created vs completed, per month
Open Queue & Resolution i Open by phase · median created → closed
Loading…
Resolution Time Monthly Trend i Median days created → closed, routine work by close month
Open Queue Register i …
Ticket Title Created Age (d) Phase Type Department
Loading…
How to read this dashboard

This is the Business Process stream — the Sales Operations request queue: contract requests, routing, proposals, opportunity creates, credit applications and invoicing. Request Turnaround measures how quickly requests close, reported as the share closed within a service window rather than an average, because most of this queue closes the same day and the close field records only a date. Queue Health watches what is still open and how long it has waited. Each KPI reads top to bottom: headline tiles, the last 90 days against targets, then the monthly trend. The Aged Open Register at the bottom lists the requests that have been waiting longest.

  • Hover any i marker for the exact definition of the number beside it.
  • Nearly every number is a doorway: tiles and chips marked View tickets → open the exact tickets behind the figure, and clicking a point on a trend chart opens that month’s tickets.
  • In the register, click a row to see how that request was classified; the ticket number deep-links to Salesforce.
Request Turnaround i Arrival → close · Sales Operations request queue
Loading…
Within-One-Day Rate, Monthly i Share closed ≤ 1 day, by close month
Queue Health i Open requests · age · inflow vs closed
Loading…
Inflow vs Closed, Monthly i Requests created vs closed, per month
Aged Open Register i …
Ticket Title Created Age (d) Phase Department
Loading…
Department Rollups Live
Department Tickets Median Cycle (d) Weighted Hours Unique Assignees Hours / Person Rework %
Loading…
Backlog Snapshot Live
Loading backlog…
Department Open Tickets
Loading…
IT Steering Committee Roadmap Read-only · Salesforce Initiative
Initiative records on Salesforce Ticket__c (Initiative record type). DataOS is a read surface — browse the roadmap here, then edit in Salesforce.
Loading roadmap…
Projects …
Priority Feature Department Status LOE Product Owner IT Lead Launch Target
Loading…
V2 ITSC Strategic Initiative Tracking — Salesforce Implementation Specs

Dual-write integration plan

Supersedes the v1 architecture recommendation. Locks in the Ticket__c + Strategic Initiative record type direction, fills the gaps v1 silently dropped (voter total, four-panel brief, exec sponsor, intake metadata), and defines the dual-write contract between the DataOS /dept/engineering ITSC tab and Salesforce.

1. Overview

Phase 1 (Firestore form) is retired. The live roadmap at /dept/engineering?tab=itsc reads and writes Ticket__c Initiative records in Salesforce directly. Use the audit banner above (loaded from the org) to see which V2 optional fields are still missing.

User edits inline on /dept/engineering ──► services/itsc_sf.py ──► Salesforce Ticket__c (Initiative RT)
Reports / Power BI / SF users ← SOQL ──► same records

Both sides see the same data. Either side can edit. Conflicts are resolved by LastModifiedDate.

2. Architecture

Use the existing Ticket__c object with a new Strategic Initiative record type. This decision (carried forward from v1) avoids a duplicate object hierarchy, inherits ticket lifecycle / ownership / sharing for free, and keeps reporting in one universe.

Three things that are different in v2:

  • Dual-write contract (§13) — the DataOS form remains the operational UI; the Firestore document is a cache, not the system of record.
  • Three additional brief fields (§4) — the workbook's per-project one-pager has 4 panels, not 1, and v1 only mapped one of them.
  • Total score + executive sponsor + intake metadata (§4) — preserves the upstream nomination/scoring artifacts the steering committee uses.

3. Record Type Configuration

New Record Type: Strategic Initiative

Represents strategic roadmap initiatives, cross-functional programs, and operational improvement efforts. Does not replace standard development / Salesforce-ops tickets, bug tracking, or support workflows — those keep their existing record types.

  • Profile assignment: Initial access to Engineering Leadership, IT, and Strategy users; broader once the workflow is validated.
  • Page layout: see §7.
  • Default record-type behavior: new Ticket created from /dept/engineering always carries this record type ID.

4. Field Additions on Ticket__c

20 new fields. Bold = additions beyond the v1 spec. Italic = clarifications.

4a. Strategic context

Field LabelAPI NameTypeNotes
Strategic GroupStrategic_Group__cPicklistRetention & Intelligence · Demand Gen & Efficiency · Cross-Functional · Operational AI Layer · Operational Excellence · Operational Reliability · AI & Engagement · AI & Personalization · AI & Decision Intelligence
Strategic ValueStrategic_Value__cText(255)Expected business value (e.g. "Lead quality ↑, faster follow-up")
Launch Target DateLaunch_Target__cDateTarget delivery date. Nullable — see Launch_Target_Raw__c for sentinel handling.
Launch Target RawLaunch_Target_Raw__cText(16)Preserves sentinels (?, TBD, N/A) the committee uses when the date is intentionally undecided. Formula populates Launch_Target__c only when this is a valid ISO date.
Level of EffortLevel_of_Effort__cPicklistHigh · Medium · Low (plain text — emoji stripped during migration)
Sort OrderSort_Order__cNumber(3,0)Manual within-band ordering for the roadmap table

4b. Alignment flags (5 booleans, unchanged from v1)

Field LabelAPI NameType
AlignmentAlignment__cCheckbox
High Impact WorkHigh_Impact_Work__cCheckbox
Retention FocusRetention_Focus__cCheckbox
Thought LeadershipThought_Leadership__cCheckbox
AI Ways of WorkingAI_Ways_of_Working__cCheckbox

4c. Brief one-pager new in v2 (four panels)

The workbook stores a four-panel one-pager per project. v1 mapped only the first panel to the existing Description field. v2 adds the missing three.

Field LabelAPI NameTypeNotes
Why It MattersWhy_It_Matters__cLong Text Area (8000)"What's broken today" — the cost / pain / hours-wasted justification.
Business ImpactBusiness_Impact__cLong Text Area (8000)Concrete outcomes once shipped — retention lift, lead quality, hours saved.
PunchlinePunchline__cText(500)The one-line metaphor the committee uses verbatim ("Think of this as fixing the plumbing").
What It Does(reuses Description)(existing)No change.

4d. Intake / scoring new in v2

Field LabelAPI NameTypeNotes
Executive SponsorExecutive_Sponsor__cLookup(User)Non-negotiable for leadership reporting. Free-text fallback acceptable until SF user reconciliation lands.
Submitted BySubmitted_By__cLookup(User)Person who originally nominated the project (distinct from CreatedBy, which is the SF DML actor).
Total ScoreTotal_Score__cNumber(3,0)Sum of voter scores from the nomination matrix. Recomputed by DataOS on every write and pushed to SF. Per-voter detail stays in the DataOS workflow today; can become a child object later (§8) without breaking this field.
Primary SystemPrimary_System__cPicklistSalesforce · CMS · Navigator · GTZenda · Hubspot · Other. The primary platform the work touches.
Dev T-ShirtDev_T_Shirt__cPicklistXS · S · M · L · XL. Engineering's effort estimate; complements Level_of_Effort__c (which is steering-committee LOE).
Dev ReadinessDev_Readiness__cPercent (0-100)Confidence the work is scoped enough to start. Validation: 0 ≤ value ≤ 100.
Intake Document URLIntake_Document_URL__cURLSharePoint / Google Doc link to the full nomination write-up.
Reviewer CommentsReviewer_Comments__cLong Text Area (8000)Free-form steering-committee notes — merge suggestions, dependency call-outs, duplicate flags. Distinct from Project_Notes.

4e. Hierarchy + identity

Field LabelAPI NameTypeNotes
Parent InitiativeParent_Initiative__cLookup(Ticket__c)Self-lookup. Filter on RecordType = Strategic Initiative.
DataOS External IDDataOS_Project_Id__cText(32) — Unique, External ID, indexedHolds the Firestore project_id. Join key for the dual-write upsert (see §13).
IT LeadIT_Lead__cLookup(User)Typo fix from v1 — added __c suffix.

4f. Audit (preserve original attribution through migration)

Field LabelAPI NameTypeNotes
Imported Created ByImported_Created_By__cText(200)Original created_by email — preserved because the Bulk API upsert overwrites CreatedById with the integration user.
Imported Updated ByImported_Updated_By__cText(200)Same rationale for updated_by.

5. Existing Fields to Reuse

DataOS fieldExisting Ticket__c fieldAction
feature_nameTitle (or Subject)direct map
statusStatusdirect map after picklist expansion (§9a)
priorityPrioritydirect map after picklist expansion (§9b)
departmentDepartmentdirect map — kept distinct from Strategic_Group__c (§10)
brief.what_it_doesDescriptiondirect map
(existing notes channel)Project_Notesunchanged — DataOS form does not write this

6. Parent / Child Initiative Structure

Parent_Initiative__c is a self-lookup on Ticket__c filtered to the Strategic Initiative record type. Validated needs from the 50 imported records:

  • 🧩 Feedback Platform (v1) ↔ (v2)
  • 🌐 Event Segmentation (v1) ↔ (v2)
  • 📱 Event App : PWA – In-House (v1) ↔ (v2)
  • ⚡ BidSpeed (cloverleaf) ↔ ⚡ BidSpeed (euna) (siblings under a new "BidSpeed" parent record)
  • 📊 Sponsor Portal Automation (Pre-Event) ↔ (Post-Event)
  • 3 × 🤖 Agent Phase 2 (Tell Me When Alerts / Proposal Generator / Personal Document Library) under a new "Agent Phase 2" parent
  • 3 × GTZenda items (Process Optimization / Full Autonomy / Grants Data API Integration) under a new "GTZenda" parent

Backfill creates the umbrella parent records where one doesn't already exist; assigns Parent_Initiative__c for each child during the same migration pass.

7. Page Layout

Sections, in order:

  1. Initiative Details — Title, Record Type, Status, Priority, Sort Order, Owner, IT Lead, Launch Target Raw, Launch Target Date (formula), Department, Strategic Group
  2. Strategic Context — Strategic Value, Level of Effort, Dev T-Shirt, Dev Readiness, Total Score, Primary System
  3. Goal Alignment — Alignment, High Impact Work, Retention Focus, Thought Leadership, AI Ways of Working (5 checkboxes inline)
  4. Brief — Description ("What It Does"), Why It Matters, Business Impact, Punchline
  5. Intake — Submitted By, Executive Sponsor, Intake Document URL, Reviewer Comments
  6. Hierarchy — Parent Initiative, Related list: Child Initiatives (filtered self-lookup)
  7. System — DataOS Project Id, Imported Created/Updated By, standard audit fields (collapsed by default)

8. Voter Scoring — Decision and Future Path

v2 decision: scoring lives in DataOS, only Total_Score__c syncs to Salesforce.

Rationale: the per-voter scoring exercise is upstream of becoming a real Ticket__c — six voters per nominee, scores 1-5, the committee tallies and picks. The total is what leadership reads; the per-voter detail is committee-internal. Putting per-voter rows in SF today would require a child object that only DataOS writes to.

Future path (additive, no migration of Total_Score__c): if SF needs per-voter history later, add an ITSC_Voter_Score__c master-detail child with Voter_Name__c / Voter_User__c / Score__c / Recorded_At__c, and convert Total_Score__c to a Roll-Up Summary. The DataOS sync then writes child rows instead of just the rolled-up total. Zero impact on existing reports.

9. Picklist Expansions

Validated against the 50 records currently in Firestore.

9a. Status

ValueCurrent countMap from
Yet to Start25direct
In Design3direct
In Development6direct
In QA0(new — replaces "In Proof")
In Progress5direct (distinct from In Development per workbook usage)
Completed5add
Paused1add
Unknown3maps from ?
N/A1direct

9b. Priority

ValueCurrent countMap from
P115direct (drop ⭐ emoji)
P214direct (drop 🔶 emoji)
TBD12direct (drop ⚪ emoji)
Not yet Prioritized9add — TBD ("we will decide") and Not yet Prioritized ("we haven't looked") mean different things to the committee

9c. Level of Effort

Plain High / Medium / Low. Emoji stripped at migration; no data loss (clean 50-of-50 map).

10. Department vs. Strategic Group — Two-Field Model

These are different concepts and stay in different fields:

  • Department (existing, free-text or picklist) = operational owner. The 50 records have 32 distinct values like "Product / Events / Sales Ops" or "Marketing / Demand Gen". Preserved as-is.
  • Strategic_Group__c (new picklist, §4a) = strategic lens. One project can be in dept "Marketing / Demand Gen" AND strategic group "Retention & Intelligence".

This avoids the lossy force-fit of 32 free-text departments into 9 strategic-group picklist values.

11. List Views

  • All Strategic Initiatives — RecordType = Strategic Initiative, sort by Priority ASC, Sort_Order__c ASC, Launch_Target__c ASC NULLS LAST
  • P1 Active — Priority = P1 AND Status NOT IN (Completed, N/A)
  • P2 Pipeline — Priority = P2 AND Status NOT IN (Completed, N/A)
  • Not Yet Prioritized — Priority IN (TBD, Not yet Prioritized)
  • Needs Attention — Status IN (Paused, Unknown) OR (Launch_Target__c < TODAY AND Status NOT IN (Completed, N/A))
  • Upcoming 90d — Launch_Target__c BETWEEN TODAY AND TODAY+90, Status NOT IN (Completed, N/A)

12. Validation Rules

  • Launch_Target_Raw_Valid — Launch_Target_Raw__c is blank OR matches ^\d{4}-\d{2}-\d{2}$ OR ∈ {?, TBD, N/A}
  • Dev_Readiness_Range — 0 ≤ Dev_Readiness__c ≤ 100
  • Total_Score_NonNeg — Total_Score__c ≥ 0
  • Parent_Cannot_Be_Self — Parent_Initiative__c ≠ Id

13. Dual-Write Contract (DataOS ⇄ Salesforce)

This is the v2-specific addition. The DataOS form remains the system of entry; Salesforce is the system of record. Both stay consistent through a deterministic dual-write keyed on DataOS_Project_Id__c.

13a. Write path (DataOS form → SF)

User submits the form at /dept/engineering
   │
   ▼
services/itsc_roadmap.py::create_project / update_project / delete_project
   │   (existing: validates + persists to Firestore)
   ▼
services/itsc_sf_sync.py::push_to_sf(project_id)        ← NEW MODULE
   │   - simple-salesforce upsert against Ticket__c using
   │     DataOS_Project_Id__c as the external ID
   │   - field map lives in one dict (mirrors §4)
   │   - on success: stores SF Id back on the Firestore doc
   │   - on failure: logged + queued for retry, does NOT fail the user request
   ▼
SF Ticket__c (Strategic Initiative record type) — system of record
  • Idempotent: upsert by external ID, safe to replay.
  • Fail-open from the user's perspective: a transient SF outage doesn't block the form save. The retry worker (scheduled every 15 min via the existing ETL scheduler) drains the queue.
  • Voter scores: when the form submits, the recomputed total_score is what gets pushed. Per-voter rows are NOT pushed (see §8).

13b. Read path (today: Firestore; tomorrow: SF)

Phase 1 (immediate after backfill): reads continue from Firestore for sub-50ms latency in the /dept/engineering tab. SF is shadow-of-truth.

Phase 2 (once SF UI exists and is in steady use): a nightly reconciliation job pulls every Ticket__c with RecordType = Strategic Initiative, diffs against Firestore by DataOS_Project_Id__c, and applies SF-side edits back into Firestore. Conflict resolution: LastModifiedDate wins.

Phase 3 (optional, future): cut over reads to SOQL directly, decommission the Firestore collection. Service signature doesn't change, only the loader behind services/itsc_roadmap.py::list_projects does.

13c. Reverse path (SF → DataOS, Phase 2 onward)

  • Triggered by either:
    • A scheduled reconciliation (15-min cadence), OR
    • A SF Outbound Message / Platform Event on Ticket__c update (if SF ops is comfortable adding it)
  • For each SF record where LastModifiedDate > Firestore.updated_at, write the SF state back to Firestore.
  • Skips records where DataOS write happened in the last 60 seconds (debounce so a DataOS write doesn't immediately echo back as a SF→DataOS overwrite).

13d. Source of truth for each field

FieldAuthoritative sideNotes
All §4 fields, all §5 reuse fields, auditWhichever side wrote last (LastModifiedDate wins)Single source of truth: the conflict-resolution rule
DataOS_Project_Id__cDataOS (immutable after first write)Never changes
CreatedById / CreatedDateSFStandard; DataOS preserves original via Imported_Created_By__c

14. Data Migration

Migration target: the 50 records currently in itsc_projects Firestore.

Steps:

  1. Export Firestore → flat CSV via a one-shot scripts/export_itsc_to_sf_csv.py (writes itsc_to_sf.csv with columns = SF API names per §4 + §5; emojis stripped from Priority and LOE; status remapped per §9a).
  2. Identify the 7 parent-record umbrellas from §6 — create them in SF first (manually or as separate CSV rows), capture their SF Ids.
  3. Backfill parent_id column in itsc_to_sf.csv using the umbrella SF Ids.
  4. Bulk upsert into Ticket__c keyed on DataOS_Project_Id__c. Validate row count = 50 + umbrella count.
  5. Spot-check the 5 emoji-heavy records (Custom Communication, Health Dashboard, both Feedback Platforms, GTZenda variants) to confirm round-trip.
  6. Turn on dual-write in DataOS (env flag ITSC_SF_SYNC_ENABLED=1). From that moment, all DataOS writes also push to SF.
  7. Run a one-time reconciliation read (SF → Firestore) to confirm parity.

Rollback: disable ITSC_SF_SYNC_ENABLED. DataOS reverts to Firestore-only operation. SF records remain but go stale until re-enabled.

15. Phasing / Rollout

PhaseOwnerDeliverablesGate to next
1. SF object buildSF opsAll §4 fields, validation rules (§12), page layout (§7), list views (§11), record type assignmentsSandbox sign-off from steering committee
2. DataOS sync wiringDataOS engservices/itsc_sf_sync.py, retry queue, ITSC_SF_SYNC_ENABLED env flag (off by default), unit tests against simple-salesforce mockAll 50 records dual-write cleanly in sandbox
3. BackfillDataOS eng + SF ops50 records imported via §14 steps, parent umbrellas linked, spot-check sign-offSteering committee verifies parity in SF
4. Production cut-overDataOS engFlip ITSC_SF_SYNC_ENABLED=1 in production, monitor for 1 weekZero sync failures over a week
5. SF-as-read-source (optional, future)DataOS engReverse-sync + Ticket__c reader in services/itsc_roadmap.pySteering committee actively using SF Lightning record pages

16. Benefits of This Approach

  • No duplicate object hierarchy — uses existing Ticket__c lifecycle, ownership, sharing, audit.
  • Single source of truth in Salesforce — Power BI, SF reports, and the rest of the company's data universe see initiatives in the same place they see tickets.
  • DataOS form remains the operational UI — the steering committee keeps the fast, purpose-built /dept/engineering tab they're already using.
  • Zero data loss from the current workbook — every field that today has a non-trivial value (brief panels, voter total, exec sponsor, intake metadata) has a home.
  • Additive future path for voter detail — when/if SF needs per-voter rows, it's an additive child object, not a migration.
  • Fail-soft on SF outage — user writes never block on SF availability.

17. Open Questions for Steering / SF Ops

  1. In Progress vs. In Development — are these two genuinely different statuses, or did the workbook accidentally accumulate both? Currently 5 records use In Progress and 6 use In Development. Recommend keeping both (committee call).
  2. Submitted_By__c vs. ownership — is the submitter the same as the eventual owner in 90% of cases? If yes, we can default Submitted_By__c to OwnerId on insert and skip the extra picker in the form.
  3. Intake docs — keep Intake_Document_URL__c as a URL field, or move to native SF Files (ContentDocument)? Files give versioning and access control; URL is simpler for the SharePoint links the committee already uses.
  4. Reviewer comments — Reviewer_Comments__c field, or Chatter? Chatter gives threading and notifications but is harder to migrate from the workbook's free-text field.
  5. Strategic_Group picklist values — the 9 listed are from v1. Should the committee add / rename / drop any before deployment, while picklist changes are still cheap?

18. Changes from V1

For anyone who's already read v1:

ChangeWhy
3 new brief fields — Why_It_Matters__c, Business_Impact__c, Punchline__cThe workbook's one-pager has 4 panels; v1 only mapped 1
8 new intake fields — Executive_Sponsor__c, Submitted_By__c, Total_Score__c, Primary_System__c, Dev_T_Shirt__c, Dev_Readiness__c, Intake_Document_URL__c, Reviewer_Comments__cPreserves the Sheet2 nomination matrix that drives committee decisions
Status picklist expanded to include Completed, Paused; In Proof becomes In QA7 of 50 records would otherwise be unmappable
Priority picklist expanded to include Not yet Prioritized9 of 50 records would otherwise be unmappable
Two-field department model — keep Department as-is, add Strategic_Group__c as a separate strategic lensAvoids force-fitting 32 free-text departments into 9 picklist values
Launch_Target_Raw__c text + Launch_Target__c formula dateThe workbook genuinely uses ? / TBD / N/A as launch-target values
DataOS_Project_Id__c external IDRequired join key for the dual-write upsert
Section 13: Dual-write contractThe whole "DataOS form remains operational UI, SF is system of record" model is new in v2
IT_Lead → IT_Lead__cTypo fix

Notifications

No notifications

Create Opportunity

DATA OS
✓

Opportunity Created

DataOS
Install DataOS Add to home screen for quick access
All Features
Hail Mary