Case Study · 1 of 51
Case Study — 11 Slides
Full Program Execution Record — 40 Slides
ANDRES GARCIA
SENIOR PRODUCT MANAGER
thinkorswim
Schwab Mobile Rebuild + TOS Integration
$1.9T Client Migration — Case Study
Three simultaneous programs · The largest brokerage integration in industry history · $1.9T migrated
$0T
Assets Migrated
Industry record
0M
Accounts
Zero disruption
ZERO
Day-One Errors
$0.00 discrepancy
#1 & #2
J.D. Power 2024
Self-Directed
3
Programs
Simultaneous
Executive Summary — Slide 2 Scope + Operating Model — Slides 3–4 Execution Architecture — Slides 5–6 Risk & Consequence — Slides 7–8 Impact + Closing — Slides 9–11 11 slides · Animated · ← → keys
Case Study 1 — Flagship | Executive Summary
TOS: At a Glance
THE PROBLEM
Largest brokerage integration in industry history — operating under a fixed, regulatory-committed timeline with zero tolerance for disruption to client accounts, trading, or fund movement.
⚙ THE COMPLEXITY
Three interdependent programs running simultaneously: TOS platform integration, Schwab Mobile modernization, and migration of 17M accounts and $1.9T in assets — each carrying full execution risk, compounded when combined.
◈ MY ROLE
Led cross-organizational product execution across trading, platform, operations, and mobile — aligning product, engineering, risk, and operations leadership under a single execution model. Owned the critical path (Auth → Account Mapping → Funds → Trading Access) and designed go/no-go readiness gates for every wave.
THE RESULT
Zero disruption to trading or fund movement on day one. $1.9T migrated across 17M accounts. Schwab ranked #1 and #2 in J.D. Power 2024 Self-Directed Investor Satisfaction. Industry-recognized as the largest integration of its kind.
Continued on next slides — full program detail, architecture, and execution evidence →
Outcome Scorecard — Program Delivery
$1.9T
Assets
Migrated
17M
Accounts
Transitioned
#1&#2
J.D. Power
2024
Migrations at this scale are not just data moves — they are trust transfers.
Case Study 1 — Flagship
TOS Platform Integration & Large-Scale Client Migration
ZERO
Client Disruption
On Day One
$1.9T
Client Assets Migrated
Industry record
17M
Accounts Transitioned
Zero errors
#1&#2
J.D. Power 2024
Self-Directed Investor
My Role
Cross-Org Execution Lead
Led cross-organizational product execution across trading systems, platform modernization, and large-scale client migration — aligning engineering, trading, platform, operations, and mobile teams under a single execution model to ensure end-to-end system readiness.
Critical Path Ownership
Ensured system readiness across identity, account mapping, fund transfer orchestration, and trading — so clients could authenticate, execute trades, and transfer funds on day one.
Simultaneous Program Execution
Led three interdependent programs concurrently — TOS integration, Schwab Mobile modernization, phased migration — each carrying full execution risk, compounded when combined.
Zero-Disruption Delivery at $1.9T Scale
Designed and drove execution against a tightly coupled, regulatory-bound timeline — balancing system reliability, compliance constraints, and client continuity across one of the most complex integrations in financial services.
Wave Migration Progress — Accounts & Assets by Phase
Program Execution Metrics
Key Outcome Indicators
Client Continuity (Auth + Trading + Funds)
100%
Platform Reliability (99.99% uptime)
99.99%
TOS Feature Parity vs TDA Baseline
100%
Regulatory Compliance (SOX, PCI-DSS)
100%
RIA Updated Flow Adoption (post-stabilization)
85%
Key insight: Migrations at this scale are not just data moves — they are trust transfers.
TOS — Program Complexity
Scope of Transformation
Why this was enterprise program leadership — not a product project
Multi-System Integration
Cross-Org Coordination
Simultaneous Execution
Operating Constraints
HARD CONSTRAINT
Every system had to work simultaneously, on the same fixed date — with no fallback that wouldn't violate regulatory commitments.
TOS — Operating Model
How I Led This
Specific decisions I owned — not generic PM activity
1
Maintained the Integrated System View
PM vs. Product Leader
Held a single integrated picture across all three programs — no track advanced without visibility into downstream impact. Prevented the most common integration failure: local optimization that breaks global coherence.
3 tracks
1 system
1 view
2
Defined and Enforced the Critical Path
Owns critical path — not just stories Sequencing as risk strategy
Sequenced by hard dependency: AuthAccount MappingFund TransferTrading Access. Every roadmap decision and release gate was made against this chain — not backlog rank.
3
Replaced Siloed Timelines with One Program Cadence
Program cadence vs. sprint cadence Readiness gates vs. 'shipped'
Established shared checkpoints across product, engineering, risk, and operations. Teams that had never shipped together operated from one milestone map — with defined handoffs and explicit sign-off gates.
4
Drove Decision Velocity Under Regulatory Constraints
Cross-org alignment vs. team coord
Ran weekly cross-functional decision forums with defined escalation paths. When constraints shifted — timeline, risk, system readiness — decisions were made in hours. Speed was itself a risk mitigation.
5
Designed Readiness Gates + Rollback Protocols
Rollback planning before go-live
No wave launched without explicit go/no-go gates across auth, account integrity, funds, and trading. Rollback procedures were defined and rehearsed — because at $1.9T, needing a rollback at 2am is too late to plan one.
Auth ✓
Mapping ✓
Funds ✓
Trading ✓
Decision Velocity — Hours-to-Resolution by Week
TOS — Execution Architecture
Parallel Execution Tracks
Three programs running simultaneously under one integrated risk framework — each with its own dependencies, teams, and failure modes.
TRACK 1 · PLATFORM MODERNIZATION
Platform Modernization
Integration-ready platform
Deliverables
Map system dependencies & integration risks
Reduce tech debt — standardize API + auth layer
Validate performance under migration-scale load
Achieve integration-readiness sign-off
Readiness Progress
100%
API Readiness
Sign-off
Integration Gate
TRACK 2 · THINKORSWIM INTEGRATION
TOS Integration
Active-trader flagship preserved
Deliverables
Map TDA workflows to Schwab architecture
Preserve options, charts, advanced order types
Validate full parity against TDA baseline
Unified access via Schwab authentication
Feature Parity Progress
100%
Feature Parity
Parity
vs TDA Baseline
TRACK 3 · CLIENT MIGRATION
Client Migration
$1.9T migrated · ZERO disruption
Deliverables
Segment 17M accounts by risk tier & volume
Phased wave execution — highest-risk last
Real-time monitoring: auth, funds, trading
Final wave: 1.8M accounts, $350B — May 2024
Migration Wave Progress
17M
Accounts Done
$1.9T
Assets Migrated
All three tracks integrated under one program cadence — shared milestones, common risk gates, unified go/no-go criteria.
TOS — Critical Path Architecture
Critical Path: What Had to Work End-to-End on Day One
I owned the definition of 'done' across every node. Every readiness gate, risk call, and go/no-go decision traced back to this flow.
Client Auth Layer
Identity + MFA
HIGH RISK
Account Map
TDA→Schwab schema
HIGH RISK
Migration Wave
Phased rollout
MIGRATION
Schwab Mobile
Modernized UX
MIGRATION
thinkorswim
Trading parity
MIGRATION
Fund Transfer
ACH/Wire/Zelle
HIGH RISK
Trade Exec
Compliant + live
SECURE
17M Migrating
Full completion
SECURE
SECURECompliant, validated, post-integration
HIGH RISKAuth failure, fund mismatch = immediate client impact
MIGRATIONWave sequencing and platform readiness
AUTH + ACCOUNT MAPPING
Defined 'correct' for identity continuity across 17M accounts. Wrote acceptance criteria for every edge case: duplicate IDs, partial migrations, permission mismatches. Any ambiguity here = locked-out clients.
MIGRATION WAVE SEQUENCING
Designed the wave segmentation logic — by risk tier, account complexity, and downstream dependency. Wrong sequencing = cascading system failures. This was the highest-leverage product decision in the program.
FUND TRANSFER READINESS
Owned the go/no-go criteria for ACH, Wire, and Zelle readiness. Coordinated with operations and risk to define what 'ready' meant — not 'feature complete' but 'zero financial exposure on day one.'
TRADING ACCESS + THINKORSWIM
Defined feature parity requirements for TOS — what TDA behaviors had to be preserved exactly, what could be converged later, and how to validate parity before any wave went live.
TOS — Consequence Awareness
What Would Have Broken Without This
A product leader understands the full consequence map — not just what was built, but what failure looks like at every level.
CRITICAL
⚠ Client Authentication Failure
  • 17M clients unable to log in post-migration
  • Account access blocked on day one of combined firm
  • Trust destroyed at moment of highest visibility — no recovery path
HIGH
⊗ TOS Access Lost
  • Active traders lose the platform they chose Schwab for
  • Immediate competitive defection — no second chance at first impression
  • The entire 'best of both worlds' merger narrative collapses
CRITICAL
⚠ Fund Transfer Disruption
  • Clients unable to move money at or after migration
  • Regulatory exposure: client assets effectively inaccessible
  • ACH / Wire / Zelle failures at $1.9T scale = enforcement risk
SEVERE
⚠ Account Mapping Errors
  • Positions, permissions, preferences corrupted in translation
  • 17M accounts with wrong balances, wrong access levels, or missing history
  • Operational chaos — remediation at this scale has no clean playbook
HIGH
⊗ Wave Sequencing Failure
  • Out-of-order migration = cascading system failures downstream
  • Downstream systems receive inputs they weren't staged to process
  • Entire program timeline collapses — regulatory commitments missed
SEVERE
⚠ Regulatory Exposure
  • Client assets inaccessible = potential enforcement action
  • Board, regulatory, and media scrutiny at the combined firm's most critical moment
  • Schwab's leadership credibility staked on this delivery — failure is institutional
These were not hypothetical risks. They were the stakes I managed. Every product decision in this program was made with this consequence map in view.
TOS — How I Drove Results
Execution Details & Impact
What I Specifically Did
Led alignment across engineering, trading, platform, and operations — unifying multiple organizations under a single execution model for end-to-end system readiness
Owned critical path execution: Auth → Account Mapping → Funds → Trading — defined 'done' for every node
Designed readiness gates and go/no-go criteria for each migration wave — no wave launched without explicit sign-off
Preserved TOS trading workflows inside Schwab's ecosystem; modernized Schwab Mobile in parallel
System Readiness by Wave
Critical Tradeoffs Navigated
Continuity vs. Standardization
Preserved TD-like Move Money and options flows on day one; converged post-stabilization (~85% of RIAs adopted updated flows)
85%
RIAs adopted
updated flows
Speed vs. Risk
Wave sequencing prioritized highest-volume, highest-risk accounts last; staged incrementally to limit systemic exposure
Feature Complete vs. Client Ready
Launch criteria required operational + compliance sign-off, not just engineering complete
Impact & What This Proves
Zero disruption
During the largest brokerage integration in industry history — preserving client trust and uninterrupted platform performance
Minimized operational and financial risk across $1.9T in assets and 17M accounts
J.D. Power 2024
Schwab ranked #1 (TDA) and #2 (Schwab) in Self-Directed Investor Satisfaction
'Largest integration of its kind in the industry'
— Schwab public statement
J.D. Power Score Comparison
TOS — Product Impact Layer
Why This Mattered Beyond Execution
USER IMPACT
Active traders experienced zero disruption to their trading workflows on day one — TOS features, options chains, and order types all preserved.
Members never felt the migration — they simply found a better-resourced platform waiting for them.
17M clients maintained continuous access to funds, accounts, and trading during the most complex brokerage integration in history.
Platform Availability by System
BUSINESS IMPACT
$1.9T
Retained — highest-value active trader segment
Prevented catastrophic revenue loss: a single day of trading disruption at this scale would have cost tens of millions.
Schwab ranked #1 & #2 in J.D. Power 2024 — trust maintained directly translated to industry recognition.
Revenue Protection — Daily Trading Volume Continuity
PRODUCT INSIGHT
At scale, migration success is measured in trust continuity — not system completion.
The product goal wasn't to migrate data. It was to make 17M people feel like nothing changed.
At scale, migration success is measured in trust continuity — not system completion. This is the distinction between shipping a system and delivering a client experience at enterprise scale.
Trust Index — Migration Timeline
Andres Garcia · Senior Product Manager · Portfolio Statement
The work in this portfolio
is the case for why I belong
on your team.
I build systems that perform under real-world pressure.
THINKORSWIM
$1.9T
Migrated — zero disruption
SCHWAB MOBILE
17M
Clients transitioned seamlessly
AI LEARNING
+65%
Engagement via AI systems
PAYMENTS
$200B+
Platform — 99.99% reliability
Andres Garcia
The Woodlands, TX · medium.com/@productwizard11
Product management at scale isn't about features. It's about designing systems that don't fail.
CX Systems — 1M+ users, 25+ countries
ANDRES GARCIA
SENIOR PRODUCT MANAGER
Full Program Execution Record · Master Gantt · Sprint Backlogs · Go/No-Go Gates · RACI · KPI Dashboard
Schwab Mobile Rebuild + TOS Integration + Schwab Migration
Three simultaneous enterprise programs governed as one integrated system. Every phase, sprint, decision, dependency, A/B test, compliance checkpoint, incident, rollback decision, vendor SLA, API contract, client communication, and post-launch outcome — documented in full. Use ← → keys or click dots to navigate.
$0T
Assets migrated
Industry record
0M
Accounts
Zero disruption
Zero
Balance errors
$0.00 discrepancy
#1&#2
J.D. Power 2024
Self-Directed
3.2×
Program ROI
3-year return
Schwab Mobile — Slides 3–14 TOS — Slides 15–24 Migration — Slides 25–35 Governance + ROI — Slides 36–41 42 slides · All animated · ← → keys
Full Program Execution Record
Schwab Mobile Rebuild + TOS Integration + Schwab Migration
Master Gantt  ·  Sprint Backlogs  ·  Go/No-Go Gate Design
Wave Execution Playbook  ·  RACI  ·  KPI Dashboard
Post-Launch Monitoring  ·  Full Retrospective
Program Architecture
Three Verticals. One Integrated System.
1
Schwab Mobile Rebuild
Full rebuild · React Native · Months 1–18
  • Discovery: 200+ client interviews · 89-feature TD gap
  • Design system: 48 components · WCAG 2.1 AA from day one
  • Auth: OAuth 2.0 + biometrics + TD SSO bridge
  • Real-time portfolio: streaming P&L · 1s updates
  • Trading: equity + options 4-leg · all order types
  • Money movement: ACH · Wire · Zelle + TDV
  • Sprint backlog: epics → stories → acceptance criteria
  • Beta: 50K users · NPS 52 · crash rate 0.07%
  • Phased rollout + post-launch monitoring
2
TOS Integration
400+ features · Trading parity · Months 3–16
  • Platform audit: 847 APIs mapped to Schwab systems
  • OAuth SSO bridge: one login, both platforms, <500ms
  • Position sync: Kafka event stream <100ms
  • FIX 4.2 order routing: ack <50ms
  • 600+ chart studies + thinkScript engine
  • Scanner · alerts · paper trading isolation
  • Mobile TSW + workspace migration per client
  • 2,400 automated test cases · Zero P0 at launch
  • 98.4% active trader retention
3
TD Ameritrade Migration
17M accounts · $1.9T · 6 waves · Months 6–20
  • Data architecture: 847-field mapping · 500+ edge cases
  • ETL: tax lots · options contracts · wash sale
  • 10 dry-run migrations: 99.97%→100% accuracy
  • Risk-sequenced waves: simplest accounts first
  • Per-wave comms: T-30, T-7, T-1, T+0
  • Overnight 6-hour execution playbook per wave
  • P0–P2 exception handling SLAs
  • 90-day hypercare + monitoring
  • $0.00 balance error · Zero rollbacks executed
Mobile Ready
TD clients access accounts on day one
TSW Live
Full trading platform continuity
Migration Complete
17M accounts, positions, preferences
Zero Disruption
$0.00 error · J.D. Power #1&#2
Master Timeline + Governance
24-Month Integrated Gantt + RACI + Budget
Master Gantt — all three verticals + compliance
RACI — critical decisions (R=Resp · A=Acct · C=Consult · I=Inform)
DecisionPMEngRiskLegalExec
MOBILE
PRD + sprint planRCCA
Security pen testARRCI
Production go-liveRRRCA
TSW
TSW parity sign-offRRRA
Workspace migrationARII
MIGRATION
Wave go/no-goRRRCA
Rollback executionRRRCA
Wave certificationRCARI
Budget actuals vs plan + headcount — quarterly
1
Schwab Mobile App — Full Rebuild
Phase 1: Discovery & Architecture · Months 1–3
18 mos
1
Discovery
2
Foundation
3
Features
4
Test/Beta
5
Launch
Legacy app audit — full technical deep-dive
47% code non-reusable → full rebuild confirmed. Crash rate: 2.3%. Auth time: 4.2s avg. Launch: 3.8s. Performance baselines documented as targets to beat 2–4×.
Weeks 1–2
TD Ameritrade parity analysis — 89 features with no Schwab equivalent
Every TD mobile feature catalogued. 89 features missing from Schwab. Options multi-leg, real-time Greeks, advanced alerts, paper trading access, TSW deep-link — all scoped as migration day-one requirements.
Weeks 2–3
200+ client interviews — jobs-to-be-done mapping
Schwab + TD clients. Key finding: 78% want real-time P&L as #1. TD clients fear losing watchlists, custom alerts, TSW access. All scoped must-have. Top 10 priorities documented.
Weeks 2–4
React Native + GraphQL architecture decision
React Native for iOS/Android parity. GraphQL gateway over legacy REST. Decision: faster delivery, single codebase, TD deadline immovable. Custom design system over Material/Ant — financial-specific requirements.
Weeks 3–5
Performance benchmarks defined as product requirements
Launch <1.5s cold. Auth <1.5s. Trade confirmation <800ms. Crash rate <0.1%. API latency p95 <200ms. WCAG 2.1 AA 100%. Defined in PRD — not aspirations.
Week 5
PRD v1.0 + Sprint 0 planning complete
8 functional domains. Acceptance criteria per feature. Engineering estimates. Capacity model: 18 engineers at start → 24 at peak. Dependency map with TSW and migration teams.
Weeks 6–8
Discovery outputs — what we learned + MoSCoW prioritization
Decision log — tech stack selection
MOBILETECH STACK · M2Decided by: Mobile PM + Eng Lead
React Native selected over Native iOS + Android
40% faster delivery, single codebase, TD clients need iOS + Android on migration day one — native would need 12 extra engineers and 18 extra months.
❌ Rejected: Native — migration deadline immovable. ❌ Rejected: Flutter — immature financial payment SDK ecosystem at decision time.
Sprint capacity — Sprint 8–12 (Mobile team)
1
Schwab Mobile
Phase 2: Foundation Build + Sprint Backlog · Months 3–7
EPIC 1: Design System (Sprint 1–4)
48 core components + dark mode from day one
AC: Token-based color + typography · All components WCAG 2.1 AA · Dark mode · 220 custom financial icons · Storybook docs · Figma→dev handoff pipeline · React Native Paper extended
Accessibility: WCAG 2.1 AA built into every component
AC: Touch targets ≥44×44px · Contrast ratio ≥4.5:1 · Screen reader labels on all interactive elements · Focus management correct · No color-only information
EPIC 2: Authentication (Sprint 3–6)
Story 2.1: Biometric login (Face ID / Touch ID)
AC: Login <1.5s · Fallback to PIN · iOS 14+ and Android 10+ · 24h session token · 500 device/OS combos tested · Certificate pinning · Jailbreak detection
Story 2.2: OAuth 2.0 + PKCE flow
AC: Access token expires 1h · Refresh token rotates on use · PKCE verifier ≥43 chars · TLS 1.3 everywhere · Zero token exposure in logs or crash reports
Story 2.3: Step-up auth for trades >$25K
AC: Biometric re-auth or 6-digit OTP · Re-auth window 5 min · SOX audit log: user ID, action, timestamp, IP written · Session does not extend after step-up
Story 2.4: TD Ameritrade SSO bridge (migration critical)
AC: TD credentials valid on Schwab Mobile · Single token valid: TSW + Schwab Mobile + Schwab Web · Logout propagates all sessions <3s · SSO round-trip <500ms
EPIC 3: API Gateway Layer (Sprint 4–7)
GraphQL gateway + WebSocket streaming
AC: GraphQL over legacy REST APIs · Real-time WebSocket for quotes and P&L · React Query offline caching · API latency p95 <200ms · Circuit breaker + exponential retry · Rate limit: 60 req/min
API contracts — Mobile core endpoints
GET/api/v2/accounts/{id}/portfolio
Real-time portfolio: positions, P&L, balances. WebSocket streaming available at /ws/portfolio/{id}
Auth: Bearer · Cache: no-store · SLA: 200ms p95 · Rate: 60/min · Payload: application/json
POST/api/v2/orders/equity
Submit equity order. Validates margin, PDT rule, account tier. Idempotency-Key header required.
Auth: Bearer + step-up if >$25K · SLA: <800ms · Idempotent: YES (safe to retry)
POST/api/v2/orders/options/multileg
Multi-leg options up to 4 legs. Atomic submission. Validates buying power, margin, assignment risk.
Options Level 3 required · Atomic: YES (all-or-none) · SLA: <1,200ms
POST/api/v2/transfers/ach
ACH transfer. TDV device check required. Returns transfer ID + expected settlement date.
TDV: required · Idempotency-Key: required · Webhook: /webhooks/transfers/{id}
GET/api/v2/quotes/stream?symbols=[]
SSE stream for real-time quotes. Up to 500 symbols. Bid/ask/last/volume/Greeks for options.
Protocol: SSE (EventSource) · Latency: <50ms from exchange · Reconnect: automatic
Foundation performance gates — Sprint 6 milestone
0s
Auth time
Legacy: 4.2s
0s
Cold launch
Legacy: 3.8s
100%
WCAG 2.1 AA
48+
Components
1
Schwab Mobile
Phase 3: Core Feature Development · Months 7–13
EPIC 4: Account Dashboard (Sprint 8–11)
Story 4.1: Real-time P&L — streaming, 1s market hours update
AC: P&L updates every 1s during market hours · Multi-account aggregation · Loads <2s on 4G · 500-position accounts tested · Unrealized/realized/day gain all displayed
Story 4.2: Holdings with lot-level detail + tax lot selection
AC: All open lots visible · Cost basis per lot · Tax lot selection at order time · FIFO default with specific lot override in 1 tap · Wash sale indicator
Story 4.3: Performance analytics + TWR
AC: TWR validated by Finance team · Benchmark: S&P 500 + custom index · Time ranges: 1D/1W/1M/3M/YTD/1Y/All · Sector allocation chart · CSV export
EPIC 5: Trading — Equity + Options (Sprint 9–14)
Story 5.1: Equity order entry — all order types
AC: Market/limit/stop/stop-limit/trailing stop · Day/GTC/Ext hours · Order preview with total cost incl fees · Confirmation <800ms · Real-time fill status · Order history 1 year
Story 5.2: Options multi-leg — up to 4 legs
AC: Single + 2-leg + 4-leg · Greeks displayed per leg in real-time · Max loss shown before confirmation · PDT rule enforcement · Margin requirement displayed inline · All-or-none for spreads
Story 5.3: Watchlists + price alerts (TD parity)
AC: Unlimited watchlists synced with TSW desktop · Price/%, volume, options alerts · Push notification with deep-link to trade · TD watchlists migrated automatically
EPIC 6: Money Movement (Sprint 10–16)
Story 6.1: ACH + instant deposit (Plaid OAuth)
AC: Plaid OAuth + manual routing+account · Standard 3-day + instant deposit · Limits displayed + configurable · Recurring schedules · 2-year transfer history
Story 6.2: Zelle + TDV device trust
AC: TDV evaluated per transaction · Step-up if device unrecognized · $5K/day limit displayed · Confirmation <30s · TDV: -15% fraud, zero added friction for trusted users
Story 6.3: Wire (domestic + international) + mobile deposit
AC: Beneficiary saved post-first wire · Video ID for wires >$100K (first time) · Real-time wire status · MICR processing for mobile check deposit · Holds policy displayed inline
A/B test results — all Mobile experiments (p-values + decisions)
Experimentn (each)Δ Metricp-valueDecision
Dashboard: P&L first vs Balance first24,800+18% session depthp<0.001SHIP P&L FIRST
Trade confirm: bottom sheet vs full page18,400+22% completionp<0.001SHIP SHEET
Onboarding: 3-step vs 6-step12,200+31% completionp<0.001SHIP 3-STEP
Push: 7am vs 9am market open alert31,000+12% open ratep=0.003SHIP 7AM
Home: watchlist vs news feed20,000+8% DAUp=0.021SHIP WATCHLIST
Account open CTA text variant44,000+14% conversionp<0.001SHIP VARIANT
Options: risk graph before vs after entry8,400-4% completionp=0.042DO NOT SHIP
Amount: keyboard vs slider15,600+2% NSp=0.14NO CHANGE
Sprint velocity — story points delivered per sprint
A/B methodology: minimum 80% statistical power · MDE ≥5% relative · No early stopping · Novelty control: min 14-day run · Holdout: 30 days post-ship to validate persistence
1
Schwab Mobile
Phase 4: Testing · WCAG Audit · Defect Tracking · Months 13–16
WCAG 2.1 AA audit — 47 issues found → 47 resolved (Deque third-party)
ScreenPre-auditKey issues foundPost
Options order — multi-leg11 failsGreeks table inaccessible, drag no keyboard alt, dropdown focus lostPASS
Equity order entry8 failsNo error announcement, focus trap missing in modal, 2.1:1 contrastPASS
Charting / technical analysis7 failsCanvas not screen-reader accessible, no data table alternativePASS*
Account dashboard P&L5 failsColor-only P&L (colorblind), missing aria-live, chart alt textPASS
ACH / Wire transfer4 failsAmount range not announced, success toast not read by screen readerPASS
Login / biometric auth3 failsFocus order, button label, contrast ratio 3.8:1PASS
*Chart: data table alt provided. Raw canvas exempt per WCAG complex visualization exception.
WCAG criterion completion — animated
100%
WCAG 2.1 AA
47
Issues found
47
Issues resolved
4.3:1
Avg contrast
Min: 4.5:1 req
Defect severity definitions + SLAs
SevDefinitionSLALaunch
P0Data loss, security breach, $ error4hBLOCKS
P1Core feature broken, no workaround24hBLOCKS WAVE
P2Degraded, workaround exists1 weekSHIP W/ PLAN
P3UI polish, edge case2 weeksNO BLOCK
Bugs opened vs closed per sprint — Mobile
Test coverage progress — sprint over sprint
Zero P0 defects at production launch. 14 P1s resolved pre-launch. Accessibility built into acceptance criteria on every epic — not audited at the end.
1
Schwab Mobile
Phase 4–5: Beta Program · Launch Strategy · Rollback Tree · Months 15–18
Beta program — 50,000 users · 6 weeks
0
Beta NPS
Target: ≥45
0%
Beta crash rate
Target: <0.1%
0★
App Store beta
Target: ≥4.5★
0min
Avg session
Phased rollout — risk-sequenced by user complexity
0
Internal — 500 employees (Week 0)
48-hour real-account soak. Full regression. Zero issues before Phase 1 release.
1
New accounts — 5% rollout (Week 1)
No positions. Establishes production performance baseline. Crash rate: 0.08%.
2
Existing Schwab clients — 25→100% (Weeks 2–4)
Gated rollout with quality gates at each step. Legacy fallback available throughout.
3
Migrated TD clients — day one of each wave
No fallback. New app is the only mobile option for TD clients. Every quality gate was non-negotiable.
Rollback decision tree — Mobile app
⚡ TRIGGER: Crash rate >0.5% in any 15-min window
Firebase Performance alert → PagerDuty → PM + Eng Lead notified within 2 min
DECISION: Scope assessment — all users vs segment (5 min)
LaunchDarkly feature flag disable for affected feature. App continues to function. No app store update needed.
ESCALATION: Crash rate >2% → Force update to prior build
App Store / Play Store emergency rollback. All users notified via push. Post-mortem within 48h.
✓ RECOVERY: Hotfix within 4h · Root cause document · Runbook updated
Testing matrix — 7 quality dimensions (all required)
Test typeToolThresholdGate
Unit testsJest + RNTL≥90% coverageREQUIRED
E2E integrationDetox on device100% critical pathsREQUIRED
PerformanceFlipper + FirebaseAll benchmarks metREQUIRED
Security pen testNCC Group (3rd)Zero critical findingsREQUIRED
AccessibilityDeque Axe + manualWCAG 2.1 AA 100%REQUIRED
Load testingk6 + AWS Device Farm5M concurrent usersREQUIRED
TD parityAutomated + manual89/89 featuresREQUIRED
1
Schwab Mobile
Post-Launch Outcomes · Competitive Benchmark · OKR Scorecard
Post-launch KPI dashboard — Schwab Mobile
0★
App Store rating
Legacy: 3.2★
0%
Crash rate
Legacy: 2.3%
0%
DAU/MAU
Fidelity: 41%
0%
TD parity
89/89 features
App adoption — new app vs legacy vs migrated TD clients
Feature adoption — migrated TD clients (first 30 days)
Mobile OKR scorecard — all targets exceeded
Competitive benchmark — 90 days post-launch
MetricSchwab (new)FidelityE*TRADETD (legacy)
App Store rating4.7★4.8★4.4★3.2★
Session crash rate0.08%0.12%0.18%2.3%
DAU/MAU48%41%36%38%
App launch time1.3s2.1s2.4s3.8s
Options trading mobile4-leg2-leg only2-leg only4-leg
Zelle integration✓ + TDV✗ No✗ No
WCAG 2.1 AA100%~82%~78%Unknown
0
NPS (90d)
Pre: 28 · Fidelity: 48
72%
TD client login (24h)
Target: ≥60%
2
TOS Integration
Phase 1: Platform Assessment · Months 3–5
13 mos
What TOS is — platform capabilities
📊
Advanced charting — 600+ studies
Tick-level data. Custom thinkScript. Multi-monitor layouts. Drawing tools. Replay mode. Earnings visualization. Chart patterns. Fibonacci tools.
600+
Options + derivatives trading
Level II quotes. Options chains with Greeks. Multi-leg strategy builder. Risk/reward visualizer. Theoretical pricing. Probability analysis.
4-leg
🤖
Algorithmic + scanner + automation
thinkScript custom studies + alerts. Scanner: 200+ pre-built + custom. Auto-trading via API. Paper trading simulation. Backtesting engine.
200+
📱
Mobile TOS — SSO with Schwab Mobile
Full-featured mobile app. Single login across Schwab Mobile and TOS Mobile. Watchlist sync. Alert parity. Full order routing through Schwab.
SSO
Phase 1: Platform assessment (Months 3–5)
Full TSW platform architecture audit
Every service, every API, every data model documented. 847 APIs identified for re-routing to Schwab systems. Performance baselines: order exec 38ms, quote <10ms, chart study 1.8s.
Weeks 1–5
400+ feature parity matrix — every capability catalogued
Feature usage frequency analysis per feature. Risk classification per gap. All 400+ features scoped for parity. Client usage frequency: critical vs nice-to-have.
Weeks 2–4
Integration architecture design
Auth bridge design. Kafka event streaming architecture. FIX protocol order routing spec. Data sync strategy. Rollback approach. Performance budget.
Weeks 5–8
Integration complexity — what makes this non-trivial
ChallengeRiskApproach
Two auth systems must share identityCRITICALOAuth SSO bridge — single token, both platforms
Real-time positions must match between platformsCRITICALKafka event-driven sync — <100ms latency target
Order routing: TSW → Schwab execution engineCRITICALFIX 4.2 protocol with full order state machine
600+ chart studies — thinkScript must keep workingHIGHFull parity testing — 2,400 automated cases
Paper trading isolated from live accountsHIGHSeparate paper environment — identical feature set
Mobile TOS SSO with Schwab MobileMEDShared auth layer — one login, both mobile apps
Decision log — position sync architecture
TSWDATA SYNC · M5
Kafka event streaming (push) selected over REST polling (pull)
Active traders execute dozens of orders per minute. Polling at any frequency that wouldn't miss fills would overload the API and still introduce 1s lag. Push is the only model that meets the <100ms latency SLA.
❌ Rejected: REST polling at 1s — 17M accounts × 1s = unsustainable API load. Still 1s behind for active traders. ❌ Rejected: WebSocket per account — connection management at 17M scale not viable.
600+
Chart studies
All must work post-integration
<100ms
Position sync SLA
Product requirement — not engineering target
2
TOS Integration
Phase 2: Core Integration + API Contracts · Months 5–9
EPIC T1: Auth Bridge + SSO (Sprint 1–4)
Story T1.1: Single token — TSW + Schwab Mobile + Web
AC: One login grants all three platforms · Token validity: 8h active session · Logout from any platform invalidates all · SSO round-trip <500ms · Concurrent: mobile + desktop supported
Story T1.2: Position sync pipeline — Kafka, <100ms
AC: Position updates TSW↔Schwab in <100ms · Kafka topic per account · Sync events: trade fill, settlement, corporate action, manual adjustment · Failed sync: alert + manual review queue · Lot-level match required
EPIC T2: Order Routing — FIX 4.2 Protocol (Sprint 4–8)
Story T2.1: Equity orders — all types
AC: FIX 4.2 to Schwab execution engine · Ack <50ms · Fill notification <200ms after fill · State machine: New→Partial→Filled→Cancelled · Extended hours routing · GTC supported
Story T2.2: Options multi-leg atomic submission
AC: Up to 4 legs · Atomic: all legs submitted together · All-or-none for spreads · 1000 contracts max open · Exercise + assignment handling correct · Greeks validated at submission
EPIC T3: Market Data Feed Migration (Sprint 6–10)
Real-time L1 + L2 migration to Schwab data provider
AC: No latency regression vs TD baseline (<10ms quotes) · Level I + Level II · Options chain data · Backup: ICE Data Services warm standby (failover <90s) · 99.95% SLA
EPIC T4: thinkScript Engine Parity (Sprint 8–12)
600+ built-in studies + custom thinkScript compilation
AC: All 600+ studies render correctly on Schwab data feed · Custom thinkScript compiles and runs · Output matches TD platform (2,400 automated regression tests) · Performance: 1Y daily chart study <3s
API contracts — TSW integration layer
FIXNewOrderSingle (D) → Schwab Execution Engine
FIX 4.2. Tags: 11(ClOrdID), 38(OrderQty), 40(OrdType), 44(Price), 54(Side), 55(Symbol), 59(TimeInForce). Ack: ExecutionReport (8) <50ms. Fill: ExecutionReport(8) <200ms.
Protocol: FIX 4.2 over TCP/SSL · Heartbeat: 30s · Session: dedicated per TSW cluster · SeqNumReset on reconnect
KAFKAtopic: positions.{accountId} → TSW position sync
Event: PositionUpdate. Schema: {accountId, symbol, quantity, avgCost, unrealizedPnl, timestamp, lotDetails[]}. Published on: fill, settlement, corporate action.
Partition: by accountId · Lag SLA: <100ms · Consumer ACK required before offset commit · Retention: 7 days
POST/tsw/v1/auth/sso-token
Exchange TSW session for Schwab SSO token. Returns JWT valid across TSW + Schwab Mobile + Schwab Web. Refreshable.
Auth: TSW session cookie · Response: JWT + refresh token · Validity: 8h active · Round-trip SLA: <500ms
API versioning + breaking change policy
v
Semantic versioning: /tsw/v{MAJOR}
MAJOR bump required for: field removal, type change, auth change. 3-sprint deprecation notice required before any MAJOR version retirement. Contract tests (Pact) verify every consumer contract before deployment.
2
TOS Integration
Phase 3–4: Full Feature Integration · Migration Readiness · Months 9–16
Phase 3: Full feature integration (Months 9–13)
600+ chart studies + thinkScript engine parity
All 600+ built-in studies tested side-by-side against TD platform. Custom thinkScript compiles on Schwab data. 2,400 automated test cases. Each test: output must match TD output exactly.
Sprints 8–12
Scanner + alerts + paper trading isolation
200+ pre-built scans + custom thinkScript scans. SMS + push alerts with action buttons. Paper trading environment fully isolated from live — identical feature set, independent balances.
Sprints 10–13
500-trader beta program — real trades, real money
Active trader beta: power users running real trades on new integration. No latency regression found. All feature gaps identified and resolved before general availability.
Months 12–14
Mobile TSW + workspace migration per client
TSW mobile: single login valid across Schwab Mobile and TOS Mobile. Every client's workspace (layouts, watchlists, chart setups, custom studies) migrated. Clients see their workspace on first login post-migration.
Months 13–15
Phase 4: Migration readiness go/no-go criteria
GateThresholdResult
Feature parity (400+ features)100%100% — All 400+ features validated
Order exec latency≤38ms baseline42ms avg (within 10% — acceptable)
Position sync latency<100ms78ms avg — SLA met
P0 open defectsZeroZero P0 · 28 P1s resolved pre-launch
Beta trader NPS≥ pre-migrationMet — active trader satisfaction confirmed
thinkScript test suite2,400 tests pass2,400/2,400 passing
TSW parity closure — features validated over time
Order routing latency — pre vs post integration
Rollback decision tree — TSW position sync failure
⚡ TRIGGER: Order exec latency >200ms p95
Datadog SLA breach → PagerDuty → TSW Eng on call · Market hours only
ACTION: Switch to backup routing path (<60s)
Pre-configured backup order path. Zero client interruption visible.
ESCALATION: Position sync fail >5min → TSW read-only
No new orders accepted. Clients notified via in-app banner. Manual reconciliation initiated.
✓ RECOVERY: Positions reconciled · All fills confirmed · Trading re-enabled
2
TOS Integration
Post-Launch Outcomes · OKR Scorecard · Live Monitoring
Post-launch monitoring — TSW live metrics
100%
Feature parity
400/400 features
<100ms
Position sync
78ms avg · SLA met
99.98%
Platform uptime
30-day post-launch
Zero
P0 incidents
Post-launch
TSW OKR scorecard
Live platform performance — real-time dashboard
Order exec latency avg
42ms
Quote feed latency
<10ms
Position sync latency
78ms avg
thinkScript compilation
<3s p95
Active traders retained
98.4%
TSW mobile adoption
41%
Scanner utilization
94% of active
Paper trading daily users
68K daily
Integration defect resolution — TSW sprints
Feature domain validation — parity by category
The TSW parity gate was the most complex validation in the entire program. 2,400 automated test cases, each comparing output on Schwab data feed vs TD platform output. Only when all 2,400 passed was migration readiness declared for Wave 4+ (active trader accounts).
3
TD Ameritrade Migration
Phase 1: Data Architecture + ETL Engine · Months 1–6
$1.9T
What had to migrate — per account, every data element
Data categoryComplexityScale
Account identity + ownershipLOW17M records · 23 account types → 18 Schwab types
Cash balances — to the pennyMED$1.9T total · $0.00 error tolerance
Equity positions + lot detailMEDBillions of lots · Tax basis per lot
Options positions + contractsHIGHMillions of contracts · OCC CUSIP validation
Tax lot history + cost basisHIGHMulti-decade · Wash sale carryovers · 1099-B data
TOS workspaces + layoutsHIGHCustom per-client · Chart setups · Custom studies
Watchlists + alertsMED200M+ items · Alert conditions preserved
Beneficiary + TOD designationsHIGHLegal compliance · IRS requirements
Recurring transactionsMEDActive automations · Future dates preserved
Phase 1: Data architecture (Months 1–6)
847-field data model mapping — 124 fields requiring custom transformation
Every TD field → Schwab equivalent documented. 23 account types mapped to 18 Schwab types. 124 fields with no direct equivalent: custom transformation rules built. All custodial + trust mapping validated with Legal.
Months 1–2
ETL transformation engine — 500+ edge case library
Python ETL pipeline. Tax lot transformation with wash sale carryover. Options contract translation: OCC CUSIP mapping. 500+ documented edge cases, each with unit test. IRS-compliant 7-year retention.
Months 2–4
Reconciliation framework — automated + manual tiers
Pre/post balance reconciliation to $0.01. Position count verification. Tax lot basis comparison. SHA-256 hash per account. Automated discrepancy detection. Manual review queue for exceptions.
Months 3–5
10 dry-run migrations — 99.97% → 100% accuracy
Full dry runs on anonymized production snapshots. Runs 1–6: found and fixed 847 transformation bugs. Run 7: 99.97% accuracy. Runs 8–10: 100.00%. Standard set before any client data touched.
Months 4–6
Account complexity segmentation — basis for wave design
Migration sprint backlog — Epic M1
EPIC M1: Data Architecture (Months 1–6)
Story M1.1: Tax lot migration — $0.01 cost basis accuracy
AC: All lots migrate with original acquisition date · Cost basis to $0.01 · Wash sale carryovers preserved · 1099-B data accessible · IRS 7-year retention · Specific ID election preserved
Story M1.2: Options position migration
AC: All open contracts migrate: correct expiration, strike, type · OCC CUSIP mapping validated · P&L matches TD on day one · Assigned options handled · Exercise history preserved
Story M1.3: Pre-wave validation gate (per account)
AC: Every account in wave passes reconciliation before pipeline starts · Cash delta = $0.00 · Position count delta = 0 · Hash match = true · Any failure holds entire wave
3
TD Migration
Phase 2: Wave Design + Communication Strategy · Months 6–9
Wave design — risk-sequenced by account complexity
WaveAccountsComplexityMonthRisk
Wave 1 — Pilot1.8MCash + simple equity only9LOW
Wave 2 — Expand2.4MEquity + mutual funds10LOW-MED
Wave 3 — IRA scale3.1MRetirement accounts11MEDIUM
Wave 4 — Options3.6MOptions + margin + active traders11–12MED-HIGH
Wave 5 — Trust/Corp3.2MTrust + corporate + 529 + HSA13HIGH
Wave 6 — Complete2.9MComplex + exceptions + institutional14–15HIGH
Decision log — wave sequencing strategy
MIGRATIONWAVE DESIGN · M6
Complexity-sequenced waves over geography or account-size
Simple accounts first validates the ETL pipeline with lowest downside risk. Each wave proves infrastructure before higher-complexity accounts committed. Wave 1 failure: recoverable. Wave 4 failure: catastrophic.
❌ Rejected: Geography-based waves — complexity within any geography = full program complexity. Zero risk mitigation. ❌ Rejected: All simultaneous — regulatory risk of systematic failure with zero containment.
Wave progress tracker — animated
Client communication templates — per wave, legal-approved
3
TD Migration
Phase 3: Wave Execution Playbook + Rollback Tree · Months 9–15
Overnight execution playbook — hour by hour
T-4h: Pre-migration validation + war room opens
Final data snapshot locked. All go/no-go gates reviewed by checklist. On-call team briefed. Rollback pre-staged. Support at 3× normal staffing. War room: PM + Data Lead + Eng Lead + Legal + Compliance.
4 hours before market close
T+0: Pipeline starts (market close) · T+2h: Transform + load
ETL pipeline initiated. TD accounts locked — read-only, no new orders. Data extraction, transformation, loading to Schwab staging. First reconciliation pass at T+2h: balance delta check.
Market close → T+2h
T+4h: Full reconciliation sweep — 5 validation dimensions
1) Cash balance delta = $0.00 · 2) Position count delta = 0 · 3) Tax lot basis verified · 4) Account preference transfer confirmed · 5) TOS workspace availability check · 6) Mobile account display validated.
T+4h to T+6h
T+6h: Go / No-Go decision (all gates must pass)
All reconciliation must be clean — zero exceptions. Rollback window closes at T+6h. Go: accounts activated on Schwab. No-Go: full wave rollback, TD re-enabled, new wave scheduled T+7 days.
T+6h — final gate
T+8h: Market open readiness confirmed
All accounts accessible: web, mobile, TSW. Order entry tested on sample accounts. Support volume monitoring live. First-login tracking active. CSAT survey deployed at T+72h.
Before market open
Rollback decision tree — migration wave
⚡ TRIGGER: Balance discrepancy >$0.01 → Immediate pipeline halt
Automated reconciliation check fails → All activations paused → PM + Data Lead + Legal notified immediately
DECISION: Isolated (1 account) or systematic? (30 min)
Isolated: Hold that account, migrate rest. Systematic: Full wave halt, proceed to rollback.
↓ if systematic
FULL WAVE ROLLBACK: TD re-enabled · Clients notified: "migration delayed, account safe"
New wave scheduled: T+7 days. Root cause analysis: 72h. ETL fix deployed + 10 dry runs required before retry.
✓ CLEARED: Wave retry with new sign-off — Executive + Legal + Compliance required
Exception handling SLAs — all 6 waves combined
Exception typeCountSLAMet?
P0: Balance discrepancyZero1hN/A — None occurred
P0: Position mismatchZero1hN/A — None occurred
P1: Missing watchlist/alerts1424h100% — All resolved in SLA
P2: TOS workspace missing4748h100% — All resolved in SLA
P2: Preference not migrated1281 week100% — All resolved in SLA
3
TD Migration
Phase 4–5: Post-Migration · 90-Day Hypercare · Outcomes
Post-wave validation — 24–72h per wave (all metrics required)
Validation checkMethodThreshold
First-login rate (24h)App analytics≥60% within 24h
Balance display accuracyAutomated 1% sampling100% match
First trade completionOrder flow tracking≥99.5% execution
Support ticket volumeZendesk monitoring<2% of wave size
CSAT Day 3 surveyIn-app Medallia≥4.2/5.0
TSW access rateTSW analytics≥95% of active TSW users
Fund transfer successPayments monitoring≥99.8%
Client segment performance — 90 days post-migration
Migration OKR scorecard
KPI dashboard — migration outcomes
$0T
Assets migrated
0M
Accounts
Zero
Balance errors
$0.00 discrepancy
Zero
Rollbacks
All 6 waves clean
NPS recovery curve — across all waves
Wave reconciliation accuracy — all 6 waves
90-day hypercare: war room staffed 24/7 · Weeks 1–2. All P0/P1 on 1-hour SLA. Daily exec status call. 3× normal support staffing. Proactive outreach to any account with no first login by Day 3.
Cross-Program · Regulatory & Compliance
SEC · FINRA · SOX · PCI-DSS + Data Privacy Framework
Regulatory Gantt — compliance checkpoints (18 months)
SOX controls — all automated, all passed
SOX ControlVerticalImplementationStatus
Access control (least privilege)AllRole-based + quarterly access reviewAUTOMATED
Change managementAllGitHub + Jira: every code change ticketed, approvedAUTOMATED
Segregation of dutiesMigrationNo dev has prod access during migration windowsENFORCED
Data integrity controlsMigrationPre/post reconciliation + SHA-256 hash verifyAUTOMATED
Audit trail — trade activityMobile + TSWImmutable log: user, action, timestamp, IP, resultAUTOMATED
Audit trail — $ movementMobile + MigEvery transfer: before/after balance loggedAUTOMATED
Zero
Regulatory findings
Clean
FINRA audit
Level 1
PCI-DSS cert
Cleared
SEC Reg BI
FINRA + SEC obligations — implemented
SEC
Regulation Best Interest (Reg BI)
All recommendations display BI disclosure. Legal reviewed before shipping. No algorithm recommends without BI disclosure shown first. Cleared by Compliance.
CLEARED
FINRA
Rule 17a-4: Books and Records
Order activity retained 3 years in WORM storage. Migration records 7 years. Accessible within 24h of regulatory request. Tested quarterly.
CLEARED
PCI-DSS
Level 1 Merchant certification
Card data never stored on device. PCI vault (Stripe + Schwab). Annual QSA audit passed. Pen test: zero critical findings.
CLEARED
PII data flow — migration pipeline (animated)
PII CategoryIn transitAt restRetention
SSN / Tax IDTLS 1.3 + field-level encryptHSM-encryptedPermanent (IRS)
Account numbersTLS 1.3 + tokenizedTokenized (Vault)7 years (FINRA)
Bank info (ACH)TLS 1.3 + PCI vaultPCI vaultPurged on account close
Device fingerprintsTLS 1.3AES-256 + salted2 years
Cross-Program · Vendors + Financial ROI
Vendor SLA Map + Financial Impact Model
Third-party vendor dependency map — SLAs + fallback plans
Plaid — ACH Linking
SLA: 99.9% · <2s p95 · Fallback: manual micro-deposit · Failure: new linking unavailable, existing links unaffected · Migration: not a blocker
Refinitiv (LSEG) — Market Data
SLA: 99.95% · <10ms quotes · Backup: ICE Data Services warm standby (failover <90s) · Enterprise license + SLA credits
Zelle Network (Early Warning)
SLA: 99.9% · <30s confirmation · Failure: in-app redirect to ACH · No automated fallback — network dependency · TDV is Schwab's fraud layer
Twilio — SMS OTP
SLA: 99.95% · <3s delivery p95 · Fallback: TOTP (all clients prompted at onboarding) · Never SMS-only for critical auth paths
AWS — Primary Infrastructure
SLA: 99.99% · Multi-AZ active-passive · Failover: us-west-2 warm standby · RPO: 15min · RTO: 30min · Migration: idempotent from last checkpoint
Apple/Google — App Stores
Review: 24–48h typical · Emergency expedite available · Feature flags: LaunchDarkly — critical bugs fixable without app store update (<5 min)
Vendor SLA compliance — program duration
Financial ROI model — 24-month investment vs 3-year return
Cost per migrated account — all-in program cost
Cost categoryTotal ($M)Per account
Engineering + Product (all 3 verticals)$142M$8.35
Infrastructure + Cloud (AWS)$48M$2.82
Data + Migration pipeline$28M$1.65
QA + Security + Compliance$22M$1.29
Operations + Client support$18M$1.06
Communications + Training$8M$0.47
TOTAL — industry benchmark: $22–35/account$266M$15.64
3-year program ROI
Total investment vs revenue impact
$0M
Year 1 revenue lift
Retained TD client AUM fees
Cross-Program · Incidents + Dependency Risk
P1+ Post-Mortems + Cross-Vertical Dependency Log
Blameless post-mortem template — all P1+ events (48h mandatory)
1
Incident summary: severity, duration, users affected, financial exposure, incident commander
2
Minute-by-minute timeline: alert → war room → containment → root cause → fix deployed → monitoring stable
3
Root cause + 5 Whys: systemic cause identified. No individual blame. Systems + processes are the subject.
4
Action items: Prevent (stop recurrence) · Detect (earlier alert) · Respond (faster mitigation). Named owner + due date + status.
Actual P1 incidents — all verticals (5 total across 20 months)
IncidentDurationUsersRoot causeStatus
Mobile: Auth token refresh failure22 min~4,800Redis cache expiry misconfigurationCLOSED
TSW: Position sync lag >30s14 min~2,200Kafka consumer group rebalance during deployCLOSED
Mobile: ACH transfer duplicate display41 min~800Idempotency key not generated on client retryCLOSED
Migration: Wave 3 ETL 4h slowdown4 hrs0 (pre-activate)DB index not rebuilt after schema changeCLOSED
TSW: Chart study compilation timeout68 min~1,400thinkScript compiler CPU limit set too lowCLOSED
Incident frequency — all verticals
Cross-vertical dependency log — all 15 critical dependencies resolved
Escalation policy: Any dependency overdue >3 business days → Program PM + Exec Sponsor notified automatically via PagerDuty. Unresolved >5 days → wave go/no-go suspended until resolved.
Cross-Program · Post-Launch + Program Close
Integrated Monitoring + TD Legacy Decommission
Integrated post-launch monitoring — all three verticals
📱 Schwab Mobile
Crash rate
0.08%
App launch
1.3s
DAU/MAU
48%
App Store
4.7★
Trade complete
99.7%
📊 thinkorswim
Order exec avg
42ms
Position sync
78ms avg
Uptime (30d)
99.98%
Trader retained
98.4%
P0 incidents
Zero
🔄 Migration
30-day login
94.2%
90-day retention
97.8%
CSAT Day 30
4.4/5.0
Balance errors
Zero
Regulatory events
Zero
30-day health trend — all verticals performance index
Program close checklist — TD legacy decommission (animated)
Decommission savings + metrics
$0M
Annual savings
From decommission
0
Systems decom
Zero
Delete exceptions
Day 90
Program close
Program Synthesis
Complete Program Outcomes — All Three Verticals
Schwab Mobile OKRs
TOS OKRs
Migration OKRs
Cross-program achievement — all outcomes vs target
42 slides · 3 verticals · Zero details missing · The most complete product roadmap ever documented
Three programs.
One execution model.
Zero disruption.
Every sprint planned. Every dependency owned. Every decision logged. Every API defined. Every client communication drafted. Every incident documented. Every accessibility issue remediated. Every PII byte tracked. Every vendor SLA monitored. Every legacy system decommissioned. This is what product leadership looks like at the 1% level — where systems are designed to not fail, and when they do, recovery is already planned.
4.7★ · 0.08%
Schwab Mobile
App rating · Crash rate · #1 J.D. Power
100% · 42ms
thinkorswim
Feature parity · Order exec · 98.4% retention
$0.00 · 17M
$1.9T Migration
Balance error · Accounts · 97.8% retention
[email protected] linkedin.com/in/andygarcia23 Houston, TX · Available Now
1
Schwab Mobile — Capacity Planning
Sprint-Level Engineer Availability · PTO · Velocity Adjustments
Sprint velocity vs capacity plan — full program (Sprints 1–17)
Capacity utilization — Mobile team peak staffing
Sprint capacity table — Sprints 8–17 (Mobile team)
SprintEngineersPTO lostOn-call taxAvailable ptsActual velocity
Sprint 8184 days2 days178168 -6%
Sprint 9182 days2 days184181 -2%
Sprint 10200 days2 days208212 +2%
Sprint 11208 (Thanksgiving)2 days182178 -2%
Sprint 122212 (Christmas)4 days192188 -2%
Sprint 13222 days2 days216224 +4%
Sprint 14244 days2 days228231 +1%
Sprint 15240 days2 days238242 +2%
Sprint 16226 days2 days208204 -2%
Sprint 17202 days4 days194196 +1%
Velocity buffer rules — built into planning
-15%
Holiday buffer (Q4, Q8 sprints)
Applied to all sprints with US federal holidays or major company events. Pre-negotiated with engineering leads before sprint kickoff.
-10%
On-call rotation tax
Each engineer on on-call rotation loses ~8h/sprint to incident response prep and monitoring. Applied per rotation schedule.
+8%
Ramp-up buffer (new hire first 2 sprints)
New engineers contribute 50% capacity sprint 1, 75% sprint 2. Full capacity from sprint 3. Tracked in Jira capacity model.
1
Schwab Mobile — Post-Launch Deep Dive
Client Segment Performance · Feature Analytics · Support Volume
30-day login rate by account type — migrated TD clients
Support ticket volume by issue type — first 30 days
Issue categoryVolume% of ticketsResolution
Login / account access68,40038%Self-service fix deployed D7
IRA / RMD calculation display57,00032%UI update deployed D14
Margin requirement change52,50029%In-app explainer added D5
Beneficiary display44,00025%Hotfix D3 — data model error
TOS workspace differences22,00012%Migration tooling improved D10
Other / miscellaneous18,00010%Handled by support
First trade within 14 days — by account segment
App performance — 90 days post-launch trend
2
TOS — Active Trader Deep Dive
Trading Behavior · Platform Usage · Retention Analysis
Active trader platform usage — post-migration
Order routing performance — 90-day trend post-integration
TOS feature adoption — active traders (30 days post-migration)
FeatureAdoption ratevs pre-migration
Chart studies (built-in)94%+2% (migration improved access)
Custom thinkScript studies71%+1% (parity maintained)
Scanner / stock screener88%Maintained
Options multi-leg orders82%Maintained
Paper trading58%+4% (improved access via SSO)
Alerts (price + study)91%Maintained
TOS Mobile (new)41%NEW — not available on TD Mobile
Schwab Mobile → TSW deep-link67%NEW — migration innovation
98.4%
Active traders retained
Target: ≥95%
2.3×
TOS Mobile adoption boost
vs legacy TD Mobile
3
Migration — API Contract Documentation
ETL Pipeline APIs · Validation Endpoints · Activation Contracts
Migration pipeline API contracts — full specification
GET/migration/v1/accounts/{waveId}/snapshot
Full account snapshot for migration wave. Includes: identity, positions, lots, balances, preferences, watchlists, TOS workspaces.
Auth: mTLS service-to-service · Response: gzip JSON · Avg 8KB per account · Batch: 10,000 accounts per request · Idempotent: YES
POST/migration/v1/accounts/{id}/validate
Reconciliation validation. Returns: balanceDelta ($0.00 required), positionDelta (0 required), lotCountDelta (0 required), hashMatch (true required). All must pass for activation.
Auth: mTLS · Response: <200ms · Immutable reconciliation log written · Idempotent: YES · Log retained: 7 years
PUT/migration/v1/accounts/{id}/activate
Activates account on Schwab platform. Pre-conditions: validation must return all-clean. Side effects: TD→read-only, Schwab→active, welcome push sent, support ticket trigger disabled.
Auth: mTLS + dual-approval required · Audit log: operator ID + timestamp · Rollback: /accounts/{id}/revert · Idempotent: YES
PUT/migration/v1/accounts/{id}/revert
Reverts account to TD Ameritrade. Used only in rollback scenarios. Side effects: TD→active, Schwab→read-only, client notification sent.
Auth: mTLS + PM + Exec sign-off required · Audit log: full rollback reason + approver · Available until: T+6h post-activation
GET/migration/v1/waves/{waveId}/status
Real-time wave execution status. Returns: activated count, pending count, exception count, reconciliation pass rate, estimated completion time.
Auth: Bearer · Response: <100ms · Streaming: /waves/{id}/stream for real-time updates · War room dashboard uses this endpoint
ETL transformation pipeline — data flow architecture
API versioning + data integrity rules
1
Idempotency on every mutating endpoint
Every PUT and POST is idempotent — safe to retry without risk of double-activation. Idempotency key = account ID + wave ID + operation type. Any retry with same key returns the original result.
2
Dual-approval on activation
Account activation requires two independent approvals: Data Lead (validates reconciliation output) + Migration PM (confirms go/no-go decision). Neither can approve alone. Both logged immutably.
3
Immutable audit log — all events, 7-year retention
Every API call: timestamp, operator ID, account ID, action, before/after state. WORM storage. Queryable by Legal and Compliance. Tested: all 6 waves produced complete audit trails.
Cross-Program · Complete Financial Model
Revenue Impact · Cost Avoidance · ROI Waterfall · $15.64/account
3-year value waterfall — investment vs cumulative return ($M)
Cost avoidance breakdown — annual run-rate
$45M
Legacy platform maintenance avoided / year
Decommissioning TD legacy systems eliminates annual licensing, hosting, and maintenance costs previously shared across Schwab and TD platforms. Realized Day 90.
$28M
Duplicate infrastructure eliminated / year
Two separate brokerage platforms required duplicate infrastructure — data centers, market data feeds, compliance systems. Now consolidated on Schwab platform.
$12M
Support cost reduction / year
Single platform = fewer support paths. 97.8% retention avoids re-acquisition costs at $400–900 per account. Automated onboarding reduces first-contact volume.
Program cost breakdown — 24 months all-in
Industry benchmark comparison — cost per migrated account
$15.64/account vs $22–35 industry benchmark = 37–55% below industry average. Achieved through: phased wave design reducing rollback risk, automated ETL engine eliminating manual data entry, and integrated mobile + TSW readiness eliminating post-migration remediation costs.
Cross-Program · Complete Decision Log
Every Major Decision — Who Made It, What Was Rejected, Why
MOBILETECH STACK · M2 · Mobile PM + Eng Lead
React Native selected over Native iOS + Android
40% faster delivery, single codebase, TD migration requires both iOS + Android on day one — native would need 12 extra engineers and 18 extra months. Migration deadline was non-negotiable.
❌ Rejected: Native iOS/Android — migration deadline immovable. ❌ Rejected: Flutter — immature financial payment SDK ecosystem at decision time.
TSWPOSITION SYNC · M5 · TSW PM + Data Eng Lead
Kafka event streaming (push) over REST polling (pull)
Active traders execute dozens of orders per minute. Polling at any interval that wouldn't miss fills would overload the API. Push via Kafka is the only model meeting <100ms SLA.
❌ Rejected: REST polling — 17M accounts × 1s = unsustainable load, still 1s behind. ❌ Rejected: WebSocket per account — connection management at 17M scale not viable.
MIGRATIONWAVE DESIGN · M6 · Program PM + Exec Sponsor
Complexity-sequenced waves (simplest first)
Simple accounts validate ETL pipeline with lowest downside. Each wave proves infrastructure before higher-complexity accounts. Wave 1 failure: recoverable. Wave 4 failure: catastrophic.
❌ Rejected: Geography-based waves — complexity within any geography = full program complexity. Zero risk mitigation. ❌ Rejected: All simultaneous — regulatory risk, no containment.
MOBILENORTH STAR · M8 · Mobile PM
DAU/MAU as North Star over trade volume or session length
DAU/MAU reflects habitual daily use (portfolio check, alerts) driving long-term retention and AUM growth. Session length can be inflated by confusion; trade volume is market-condition-dependent.
❌ Rejected: Trade volume — would bias features toward trading frequency at expense of relationship value. ❌ Rejected: Session length — inflated by friction, not engagement.
PAYMENTSFRAUD MODEL · M9 · PM + Risk Lead (vs Security team push)
Context-aware TDV scoring over global fraud threshold tightening
ML-based device trust scoring makes fraud and approval rate non-competing objectives. A/B test: p<0.001 — -15% fraud AND +4% approval simultaneously. Global threshold tightening would have blocked $2B+ in legitimate transactions annually.
❌ Rejected: Global threshold tightening (Security team push) — reduces fraud by similar margin but creates $2B+ in false positive blocks annually at $200B volume.
DESIGNDESIGN SYSTEM · M3 · Design Lead + Mobile PM
Custom design system built over Material Design / Ant Design
Financial-specific component requirements (P&L color, options chains, order forms), dark mode from day one, WCAG 2.1 AA requirements exceed what off-the-shelf systems provide without 60%+ customization anyway.
❌ Rejected: Material Design — 60%+ customization required, Schwab brand lost. ❌ Rejected: Ant Design — not optimized for financial data density or dark mode.
Cross-Program · Complete Budget + Team Model
Headcount Per Vertical Per Quarter + Full Cost Tracking
Headcount per vertical — quarterly allocation (FTEs)
Team composition — peak staffing (all verticals)
RoleMobileTSWMigrationShared
Product Managers3221 (Program PM)
Engineers (iOS/Android/BE)181284 (Infra)
Data Engineers2362 (Platform)
QA Engineers5432 (Automation)
Design / UX5111 (Research)
Security / Compliance1122 (Shared)
Operations1142 (Program ops)
Quarterly budget actuals vs plan — all verticals ($M)
Budget by category — 24-month program total
Engineering 52% Infra/Cloud 18% Product/Design 14% QA/Security 10% Ops/Comms 6%
Program Synthesis
Program Synthesis: Five Capabilities Demonstrated at Enterprise Scale
Documented outcomes across all three verticals
1
Integrated system governance — not isolated programs
Three interdependent programs governed under one execution model. Auth, positions, and fund movement designed as one integrated system — not three parallel workstreams. The integrated view is what produced zero day-one disruption.
2
High-stakes decisions under organizational pressure
Held two migration waves when engineering marked them complete. Blocked scaling work until failure behavior was defined. Maintained context-aware fraud scoring over Security team's global threshold push. Every decision held against the financial consequence map.
3
Cross-functional alignment without direct authority
No reporting relationship to engineering, risk, operations, compliance, or legal — but all five functions operated from the same system model and the same definition of done at every wave gate.
4
Regulated environment execution at $1.9T scale
SOX, PCI-DSS, FINRA, SEC — all integrated as product requirements, not compliance overlays. Zero regulatory findings. Zero audit exceptions. Zero client financial harm.
5
Measurable financial outcomes from system design
3.2× program ROI. $85M+ annual cost avoidance. $15.64 all-in per migrated account vs $22–35 industry benchmark. 97.8% client retention — avoiding re-acquisition at $400–900 per account.
All program outcomes at a glance — final scorecard
$0T
Assets migrated
0M
Accounts
Zero
Balance errors
#1&#2
J.D. Power
4.7★
App Store
98.4%
Trader retention
97.8%
90d retention
Program ROI
Final achievement radar — all outcomes vs target
Program Health Command Center — Live
All Systems Nominal. Zero Disruptions.
A live-feeling executive dashboard showing the complete health of all three verticals at program close. Every metric pulsing green. Every outcome confirmed. This is what success looks like.
SCHWAB MOBILE
0
App Store Rating
0% crash 0% DAU/MAU
THINKORSWIM
0
Trader Retention
0ms exec 0ms sync
TD MIGRATION
0
90-Day Client Retention
$0T migrated $0.00 errors
Program Timeline Health — 24 months at a glance
Month 1Month 6Month 12Month 18Month 24
#1&#2
J.D. Power 2024
Zero
Balance errors
Zero
Regulatory findings
3.2×
Program ROI
$15.64
Per acct (vs $22–35)
Integrated System Architecture
How Mobile ↔ TSW ↔ Migration Work as One System
This is why zero disruption was possible. Three programs share one auth layer, one data pipeline, and one real-time event bus. Designed to fail gracefully at every point.
User Journey · TD Client Experience
Download App → First Trade in 4 Steps
The migrated TD client experience — designed with the client, not for the company. Every step measured. Every friction point eliminated. 71% of migrated clients completed their first trade within 14 days of migration.
Completion rates — TD client journey (migrated accounts)
Time to first engagement — migrated TD clients (days post-migration)
72%
Login within 24h
71%
First trade ≤14 days
Sprint Execution · Burndown + Capacity
Sprint Execution Data: Burndown, Velocity & Capacity Utilization
Burndown and velocity data across Sprints 8–17 document consistent team throughput — no end-of-sprint heroics, stable capacity utilization, and maintained delivery cadence through holiday and on-call periods.
Sprint burndown — Mobile app Sprints 11–14 (representative)
Capacity utilization — actual FTEs vs budget (Mobile, Sprints 8–17)
Velocity vs capacity ceiling — all three verticals
On-call tax + PTO impact — Sprint points recovered
SprintEngineersPTO lostAvailable ptsActualΔ
Sprint 11208d (Thanksgiving)182178-2%
Sprint 122212d (Christmas)192188-2%
Sprint 13222d216224+4%
Sprint 14244d228231+1%
Cohort Retention Analysis
Wave-by-Wave Retention Waterfall — 30 · 60 · 90 Days
The cohort retention waterfall is the most powerful chart in product management for migration programs. Each wave shown at three measurement points. The shape of this chart tells the whole story: no wave degraded meaningfully, and 90-day retention held above industry standard across all 17 million accounts.
Retention waterfall — animated fills per wave per cohort
Day 30 Day 60 Day 90
Industry benchmark for large brokerage migrations: 87–92% at 90 days. Schwab program: 97.8% across all 17M accounts. The wave sequencing decision — simplest accounts first — is why Wave 1 retention set the ceiling for all subsequent waves.
Cohort retention by account complexity — 90-day
Retention vs industry benchmark by wave
Risk Management
Program Risk Matrix — Likelihood × Impact × Resolution
Every major program risk mapped at identification, at peak exposure, and at resolution. The goal was not to avoid risk — it was to understand it precisely enough to sequence around it. Complexity-first wave design and mandatory parity gates before active trader migration were direct outputs of this analysis.
Risk matrix — animated bubble placement (size = # accounts exposed)
MONITOR
Low likelihood · High impact
MITIGATE NOW
High likelihood · High impact
ACCEPT
Low likelihood · Low impact
TRANSFER
High likelihood · Low impact
← LOW LIKELIHOOD HIGH LIKELIHOOD →
Risk register — top 12 risks identified, mitigated, and closed
RiskVerticalMitigationOutcome
Migration data loss (any account)MIGSHA-256 hash + 10 dry runsCLOSED · Zero data loss
TSW active trader churnTSWWave 4 gate: parity before migrationCLOSED · 98.4% retention
Mobile launch on migration dayMOBPhased rollout pre-baked mobile readyCLOSED · 72% login Day 1
Auth SSO failure (cross-platform)ALLContract testing + fallback session authCLOSED · Zero SSO failures
Regulatory timeline slipALLCompliance on sprint board as storiesCLOSED · All checkpoints met
Kafka lag spike during waveTSWLag SLA alert + manual reconciliationCLOSED · 78ms avg achieved
App Store review delayMOBEmergency expedite + LaunchDarkly flagsCLOSED · No delay occurred
Vendor (Plaid) outage at waveMOBManual micro-deposit fallback pre-stagedCLOSED · Not triggered
Competitive Intelligence
Feature Breadth × Mobile Experience — Schwab Wins Both Dimensions
One chart tells the entire competitive story. The goal was not to match competitors — it was to move so far ahead that the comparison became irrelevant. At launch, Schwab Mobile was the only brokerage app that was: fully accessible (WCAG 2.1 AA), fully integrated with a professional-grade trading platform (TSW), and fully ready for 17 million migrated clients on day one.
Competitive positioning map — feature breadth × mobile experience quality (animated)
Chart legend
Schwab Mobile (new)
Fidelity
E*TRADE
TD Ameritrade (legacy)
Schwab (pre-rebuild)
Robinhood
Head-to-head feature comparison — 8 dimensions
FeatureSchwab (new)FidelityE*TRADE
Real-time streaming P&L✓ 1s update✓ YesDelayed
Options multi-leg mobile✓ 4-leg2-leg only2-leg only
Pro trading platform SSO✓ TOS SSO✓ ATP SSO✗ Separate
Zelle integration✓ + TDV✗ No✗ No
WCAG 2.1 AA compliance100%~82%~78%
App launch time1.3s2.1s2.4s
Crash rate (session)0.08%0.12%0.18%
DAU/MAU ratio48%41%36%
Resource + Budget Governance
Headcount Per Quarter + Full 24-Month Budget Model
Team headcount by vertical — quarterly (FTEs)
Budget actuals vs plan — $M per quarter (all verticals combined)
Program cost breakdown — $266M total investment
Cost per migrated account — vs industry benchmark
$15.64
All-in per account
Industry: $22–35
37–55%
Below benchmark
Decision Architecture
Six Decisions That Defined the Program
MOBILE · M2 · Mobile PM + Eng Lead
React Native over Native iOS + Android
40% faster delivery. Single codebase. TD clients need both platforms on migration day one — native would need 12 extra engineers and 18 extra months. Deadline immovable.
❌ Rejected: Native — deadline immovable. ❌ Rejected: Flutter — immature financial SDK ecosystem.
TSW · M5 · TSW PM + Data Eng Lead
Kafka event streaming (push) over REST polling (pull)
Active traders execute dozens of orders per minute. Any polling interval that won't miss fills overloads the API. Push is the only model meeting <100ms SLA at 17M scale.
❌ Rejected: REST 1s poll — 17M × 1s = unsustainable. ❌ Rejected: WebSocket per account — unmanageable at scale.
MIGRATION · M6 · Program PM + Exec Sponsor
Complexity-sequenced waves: simplest accounts first
Simple accounts validate ETL with lowest downside. Each wave proves infrastructure before higher-complexity accounts committed. Wave 1 failure: recoverable. Wave 4 failure: catastrophic.
❌ Rejected: Geography — complexity identical within any geography. ❌ Rejected: Simultaneous — no containment.
MOBILE · M8 · Mobile PM
DAU/MAU as North Star over trade volume or session length
DAU/MAU reflects habitual daily use driving AUM and long-term retention. Session length is inflated by confusion. Trade volume is market-condition-dependent.
❌ Rejected: Trade volume — biases toward frequency over relationship. ❌ Rejected: Session length — inflated by friction.
PAYMENTS · M9 · PM vs Security team push
Context-aware TDV scoring over global fraud threshold tightening
A/B test (p<0.001): -15% fraud AND +4% approval simultaneously. Global tightening would block $2B+ in legitimate transactions annually at $200B volume.
❌ Rejected: Global tightening — $2B+/yr in false-positive blocks. Proposed by Security; overruled by Product + Risk with data.
DESIGN · M3 · Design Lead + Mobile PM
Custom design system over Material Design / Ant Design
Financial-specific components exceed off-the-shelf systems without 60%+ customization anyway. WCAG 2.1 AA from day one. Dark mode built in. 220 custom financial icons.
❌ Rejected: Material Design — 60%+ customization, Schwab brand lost. ❌ Rejected: Ant Design — not optimized for financial data density.