We’re at an inflection point.
Our EdTech platform needs to evolve architecturally to support the next phase of growth. The current system is showing strain—performance issues, scaling challenges, feature delivery slowing.
The board understands. The executive team is aligned. We have buy-in to invest in the migration.
But we can’t stop shipping features.
We’re in a competitive market. Customer expectations are high. We have committed roadmap items. Our Series C fundraising narrative depends on continued growth momentum.
So here’s the challenge: How do you migrate your architecture while maintaining feature velocity?
The Constraints We’re Working With
Business Constraints
- Can’t afford a “feature freeze” for 2-3 quarters
- Investors want to see consistent delivery metrics
- Competitive pressure requires continued innovation
- Customer commitments must be met
Technical Constraints
- Current monolith serves 1M+ users
- Can’t have extended downtime
- Need to maintain data consistency during migration
- Legacy system must remain stable while we build new one
Team Constraints
- 80 engineers total, can dedicate maybe 20-25 to migration work
- Can’t just “hire more people to go faster” (Brooks’s Law)
- Existing team needs to maintain deep context on current system
- Knowledge transfer to new architecture takes time
The Patterns We’re Considering
We’ve been researching approaches:
1. Strangler Fig Pattern
- Gradually replace old system with new
- Both run in parallel
- Traffic shifts incrementally
- Old system eventually “strangled” and retired
Pros: Lower risk, gradual rollout
Cons: Complexity of running two systems, data sync challenges
2. Feature Flags + Canary Deployments
- Build new architecture alongside old
- Use feature flags to control which users see new vs old
- Gradually roll out new implementation
- Can roll back instantly if issues
Pros: Fine-grained control, easy rollback
Cons: Code complexity, feature flag management overhead
3. Branch by Abstraction
- Create abstraction layer over current implementation
- Implement new architecture behind the abstraction
- Switch implementations without changing callers
- Remove old implementation once fully migrated
Pros: Clean separation, testable in isolation
Cons: Upfront abstraction work, temporary code duplication
The Organizational Challenge
Beyond technical patterns, there’s a team question:
Option A: Dedicated Platform Team
- Create a team of 20-25 engineers focused solely on migration
- Product teams continue feature development on current system
- Platform team builds new architecture
Pros: Focused effort, clear ownership
Cons: Knowledge silos, integration challenges, “us vs them” dynamics
Option B: Distributed Ownership
- Every product team owns their domain’s migration
- Central architecture group provides guidance and tooling
- Migration happens incrementally as teams touch their code
Pros: Domain knowledge preserved, no silos
Cons: Slower progress, inconsistent approaches, coordination overhead
Option C: Hybrid Model
- Small platform team builds core infrastructure (auth, data layer, deployment)
- Product teams migrate their specific domains
- Platform team provides migration tooling and support
Pros: Best of both approaches
Cons: Coordination complexity, unclear boundaries
Measuring Success Without Sacrificing Delivery
How do you track both migrations AND features?
Metrics we’re considering:
Migration Progress
- % of traffic running on new architecture
- % of features migrated
- % of data models moved
- Technical debt reduction (incidents, performance)
Feature Delivery
- Features shipped per quarter
- Velocity trends (story points or similar)
- Time to market for new capabilities
- Customer-facing value delivered
The fear: Migration metrics look good but feature delivery tanks. Or feature delivery stays high but migration never completes.
The goal: Maintain 80%+ of pre-migration velocity while making consistent migration progress.
The Velocity Question
Here’s what I’m most worried about:
In the first 6 months of migration, how much does velocity typically drop?
I’ve heard ranges from “10% if done well” to “50% initially.”
If we drop to 50% velocity, that’s equivalent to losing 40 engineers. That’s $6M/year in lost feature capacity. Hard to justify even with long-term benefits.
But if we can maintain 80-90% velocity during migration, the business case is clear.
The Product Roadmap Dance
Product leadership is asking:
“Can we still ship the Q2 features while migrating?”
“What about the enterprise tier we promised for Q3?”
“If we commit to this customer, will the migration delay delivery?”
I need to give them answers. But I don’t want to over-promise.
The honest answer is probably: “Most features will take 10-20% longer during migration. Some features might take 50% longer if they touch areas being actively migrated.”
But that’s hard to roadmap with certainty.
What I’m Looking For
For those who’ve migrated architecture without stopping feature delivery:
-
What patterns worked? Strangler fig? Feature flags? Something else?
-
How did you organize the team? Dedicated platform team? Distributed ownership?
-
What velocity impact did you actually see? Not the theory—what happened in practice?
-
How did you manage product expectations? Did you commit to specific features during migration?
-
What would you do differently? Knowing what you know now, what would you change?
We have the executive buy-in. We have the budget. We have the motivation.
Now we need the execution strategy that doesn’t sacrifice growth while we evolve. ![]()
Would love to hear real stories, not just best practices. What actually worked in practice?