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
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
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 storiesSequencing as risk strategy
Sequenced by hard dependency:
Auth →
Account Mapping →
Fund Transfer →
Trading 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 cadenceReadiness 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
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)
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
J.D. Power 2024
Self-Directed
3.2×
Program ROI
3-year return
Schwab Mobile — Slides 3–14TOS — Slides 15–24Migration — Slides 25–35Governance + ROI — Slides 36–4142 slides · All animated · ← → keys
Full Program Execution Record
Schwab Mobile Rebuild + TOS Integration + Schwab Migration
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.
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
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}
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)
Experiment
n (each)
Δ Metric
p-value
Decision
Dashboard: P&L first vs Balance first
24,800
+18% session depth
p<0.001
SHIP P&L FIRST
Trade confirm: bottom sheet vs full page
18,400
+22% completion
p<0.001
SHIP SHEET
Onboarding: 3-step vs 6-step
12,200
+31% completion
p<0.001
SHIP 3-STEP
Push: 7am vs 9am market open alert
31,000
+12% open rate
p=0.003
SHIP 7AM
Home: watchlist vs news feed
20,000
+8% DAU
p=0.021
SHIP WATCHLIST
Account open CTA text variant
44,000
+14% conversion
p<0.001
SHIP VARIANT
Options: risk graph before vs after entry
8,400
-4% completion
p=0.042
DO NOT SHIP
Amount: keyboard vs slider
15,600
+2% NS
p=0.14
NO 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
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
Challenge
Risk
Approach
Two auth systems must share identity
CRITICAL
OAuth SSO bridge — single token, both platforms
Real-time positions must match between platforms
CRITICAL
Kafka event-driven sync — <100ms latency target
Order routing: TSW → Schwab execution engine
CRITICAL
FIX 4.2 protocol with full order state machine
600+ chart studies — thinkScript must keep working
HIGH
Full parity testing — 2,400 automated cases
Paper trading isolated from live accounts
HIGH
Separate paper environment — identical feature set
Mobile TOS SSO with Schwab Mobile
MED
Shared 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
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.
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
Gate
Threshold
Result
Feature parity (400+ features)
100%
100% — All 400+ features validated
Order exec latency
≤38ms baseline
42ms avg (within 10% — acceptable)
Position sync latency
<100ms
78ms avg — SLA met
P0 open defects
Zero
Zero P0 · 28 P1s resolved pre-launch
Beta trader NPS
≥ pre-migration
Met — active trader satisfaction confirmed
thinkScript test suite
2,400 tests pass
2,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.
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 category
Complexity
Scale
Account identity + ownership
LOW
17M records · 23 account types → 18 Schwab types
Cash balances — to the penny
MED
$1.9T total · $0.00 error tolerance
Equity positions + lot detail
MED
Billions of lots · Tax basis per lot
Options positions + contracts
HIGH
Millions of contracts · OCC CUSIP validation
Tax lot history + cost basis
HIGH
Multi-decade · Wash sale carryovers · 1099-B data
TOS workspaces + layouts
HIGH
Custom per-client · Chart setups · Custom studies
Watchlists + alerts
MED
200M+ items · Alert conditions preserved
Beneficiary + TOD designations
HIGH
Legal compliance · IRS requirements
Recurring transactions
MED
Active 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.
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
Wave
Accounts
Complexity
Month
Risk
Wave 1 — Pilot
1.8M
Cash + simple equity only
9
LOW
Wave 2 — Expand
2.4M
Equity + mutual funds
10
LOW-MED
Wave 3 — IRA scale
3.1M
Retirement accounts
11
MEDIUM
Wave 4 — Options
3.6M
Options + margin + active traders
11–12
MED-HIGH
Wave 5 — Trust/Corp
3.2M
Trust + corporate + 529 + HSA
13
HIGH
Wave 6 — Complete
2.9M
Complex + exceptions + institutional
14–15
HIGH
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
T-30 days: Your TD account is moving to Schwab — everything you need to know
Channel: Email + in-app notification
Your TD Ameritrade account moves to Charles Schwab on [Migration Date].
What's changing: Platform and app → Schwab. Your account number stays the same. What's not changing: All your holdings, cash, tax lot history, watchlists, and alerts.
Action required before [Date]: → Download Schwab Mobile app (App Store / Google Play) → Set up your Schwab login at schwab.com/tdmigration → Watch our 3-min transition video: [link]
Questions? 1-800-435-4000 · Available 24/7
T-7 days: One week to Schwab — your 5-step checklist
✅ Download Schwab app ✅ Create Schwab login ✅ Verify bank accounts ✅ Review open orders (GTC orders transfer) ✅ TOS users: layouts move automatically
T+0 — 6:30 AM: 🎉 Welcome to Schwab — your account is ready
Channel: Email + push notification
Balance: [$BALANCE]. All positions present. Log in now at schwab.com or Schwab Mobile. Something look off? Call 1-800-435-4000 or chat at schwab.com · Available 24/7
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.
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.
Post-wave validation — 24–72h per wave (all metrics required)
Validation check
Method
Threshold
First-login rate (24h)
App analytics
≥60% within 24h
Balance display accuracy
Automated 1% sampling
100% match
First trade completion
Order flow tracking
≥99.5% execution
Support ticket volume
Zendesk monitoring
<2% of wave size
CSAT Day 3 survey
In-app Medallia
≥4.2/5.0
TSW access rate
TSW analytics
≥95% of active TSW users
Fund transfer success
Payments 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.
GitHub + Jira: every code change ticketed, approved
AUTOMATED
Segregation of duties
Migration
No dev has prod access during migration windows
ENFORCED
Data integrity controls
Migration
Pre/post reconciliation + SHA-256 hash verify
AUTOMATED
Audit trail — trade activity
Mobile + TSW
Immutable log: user, action, timestamp, IP, result
AUTOMATED
Audit trail — $ movement
Mobile + Mig
Every transfer: before/after balance logged
AUTOMATED
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.
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)
Incident
Duration
Users
Root cause
Status
Mobile: Auth token refresh failure
22 min
~4,800
Redis cache expiry misconfiguration
CLOSED
TSW: Position sync lag >30s
14 min
~2,200
Kafka consumer group rebalance during deploy
CLOSED
Mobile: ACH transfer duplicate display
41 min
~800
Idempotency key not generated on client retry
CLOSED
Migration: Wave 3 ETL 4h slowdown
4 hrs
0 (pre-activate)
DB index not rebuilt after schema change
CLOSED
TSW: Chart study compilation timeout
68 min
~1,400
thinkScript compiler CPU limit set too low
CLOSED
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/andygarcia23Houston, TX · Available Now
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.
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)
Role
Mobile
TSW
Migration
Shared
Product Managers
3
2
2
1 (Program PM)
Engineers (iOS/Android/BE)
18
12
8
4 (Infra)
Data Engineers
2
3
6
2 (Platform)
QA Engineers
5
4
3
2 (Automation)
Design / UX
5
1
1
1 (Research)
Security / Compliance
1
1
2
2 (Shared)
Operations
1
1
4
2 (Program ops)
Quarterly budget actuals vs plan — all verticals ($M)
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
J.D. Power
4.7★
App Store
98.4%
Trader retention
97.8%
90d retention
0×
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% crash0% DAU/MAU
THINKORSWIM
0
Trader Retention
0ms exec0ms 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
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.
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
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 30Day 60Day 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 register — top 12 risks identified, mitigated, and closed
Risk
Vertical
Mitigation
Outcome
Migration data loss (any account)
MIG
SHA-256 hash + 10 dry runs
CLOSED · Zero data loss
TSW active trader churn
TSW
Wave 4 gate: parity before migration
CLOSED · 98.4% retention
Mobile launch on migration day
MOB
Phased rollout pre-baked mobile ready
CLOSED · 72% login Day 1
Auth SSO failure (cross-platform)
ALL
Contract testing + fallback session auth
CLOSED · Zero SSO failures
Regulatory timeline slip
ALL
Compliance on sprint board as stories
CLOSED · All checkpoints met
Kafka lag spike during wave
TSW
Lag SLA alert + manual reconciliation
CLOSED · 78ms avg achieved
App Store review delay
MOB
Emergency expedite + LaunchDarkly flags
CLOSED · No delay occurred
Vendor (Plaid) outage at wave
MOB
Manual micro-deposit fallback pre-staged
CLOSED · 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.
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.
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.