Your platform team offers CI/CD, Kubernetes, observability, and secrets management. Should this be:
A. One integrated platform — “Use our platform” means you get everything
B. A menu of services — Teams pick what they need: CI/CD ($X), K8s ($Y), observability ($Z)
C. Something in between — Core bundle + optional add-ons
This isn’t just a product design question. It’s a microeconomics question—and bundling theory gives us a framework.
Why Bundling Exists ¶
Bundling isn’t about convenience. It’s about extracting surplus and reducing variance.
The Basic Insight ¶
Consider two teams evaluating your platform:
Team A's willingness to pay (in adoption effort):
CI/CD: High (5 hours)
Observability: Low (1 hour)
Team B's willingness to pay:
CI/CD: Low (1 hour)
Observability: High (5 hours)
If you unbundle (sell separately):
Price CI/CD at 5 hours?
Team A adopts, Team B doesn't
Revenue: 5 hours
Price CI/CD at 1 hour?
Both adopt
Revenue: 2 hours
Same analysis for observability.
Best case unbundled: ~6 hours total
If you bundle:
Team A values bundle at: 5 + 1 = 6 hours
Team B values bundle at: 1 + 5 = 6 hours
Price bundle at 6 hours:
Both teams adopt
Revenue: 12 hours
Bundling captured 2x the value. Magic? No—math.
The Correlation Principle ¶
Bundling works when preferences are negatively correlated.
Negative correlation:
"Teams who value CI/CD high tend to value observability low, and vice versa"
→ Bundling wins
Positive correlation:
"Teams who value CI/CD high also value observability high"
→ Unbundling may win
No correlation:
→ Bundling usually still helps (variance reduction)
Why? Bundling averages out the valuations:
Unbundled:
Team A: [High, Low] → Pays for high-value item only
Team B: [Low, High] → Pays for high-value item only
Bundled:
Team A: [High + Low = Medium] → Pays medium for both
Team B: [Low + High = Medium] → Pays medium for both
The bundle has lower variance in willingness to pay, making pricing easier.
Applying This to Platform Services ¶
Step 1: Map Your Services ¶
Platform components:
- CI/CD pipelines
- Kubernetes namespaces
- Observability (metrics, logs, traces)
- Secrets management
- Service mesh
- Feature flags
- Database provisioning
Step 2: Understand Preference Correlation ¶
Survey or observe teams:
Question: "Rank these services by how much you'd invest to adopt them"
Team profiles that emerge:
"Full-stack product teams":
High: CI/CD, observability, feature flags
Low: Service mesh, database provisioning
"Backend infrastructure teams":
High: Kubernetes, service mesh, database provisioning
Low: Feature flags, CI/CD (they have their own)
"Data teams":
High: Database provisioning, observability
Low: CI/CD, service mesh, feature flags
If profiles are distinct (negative correlation): Bundle wins
If all teams want the same things (positive correlation): Consider unbundling
Step 3: Estimate the Bundling Value ¶
Unbundled adoption (hypothetical):
CI/CD: 80% of teams
Kubernetes: 70% of teams
Observability: 60% of teams
Secrets: 40% of teams
Average: 62.5% adoption per service
Bundled adoption:
Full platform: 85% of teams (bundle is better deal)
Bundling increases total adoption.
When to Bundle ¶
Bundle When: High Fixed Costs ¶
Each service has:
Development cost: $500K
Maintenance: $200K/year
Support: $100K/year
If unbundled, each service needs to justify its cost.
If bundled, costs are spread across all adopters.
Bundling amortizes fixed costs more efficiently.
Bundle When: Integration Creates Value ¶
Standalone observability:
- Metrics from your app
- Manual correlation
Observability + CI/CD + Kubernetes:
- Deployment markers in dashboards
- Automatic rollback on error spike
- Correlated logs across services
Integration value >> Sum of parts
When components are more valuable together, bundle them.
Bundle When: Reducing Adoption Friction ¶
Unbundled:
Team must make 5 separate decisions
Each decision has friction
Adoption: Slow, partial
Bundled:
One decision: "Adopt the platform"
One onboarding process
Adoption: Fast, complete
Decision fatigue is real. Bundling simplifies adoption.
Bundle When: Preventing Adverse Selection ¶
Unbundled pricing:
Expensive services: Only heavy users adopt
Cheap services: Everyone adopts
Result: Cost structure skews unfavorable
Bundled pricing:
Light users subsidize heavy users (within each service)
Heavy users of Service A subsidize light users of Service A
Cross-subsidization evens out
Bundling prevents cherry-picking.
When to Unbundle ¶
Unbundle When: Preferences Are Homogeneous ¶
Every team wants:
CI/CD: High
Observability: High
Service mesh: Low
Feature flags: Low
No negative correlation—everyone wants the same things.
Bundling forces teams to "pay" for things they don't want.
If everyone wants the same subset, offer that subset.
Unbundle When: Components Are Substitutes ¶
Your platform offers:
Prometheus-based monitoring
Datadog integration
These are substitutes, not complements.
Bundling both makes no sense—teams choose one.
Bundle complements, unbundle substitutes.
Unbundle When: Adoption Barriers Are High ¶
Full platform adoption:
Effort: 100 hours
Teams willing to invest 100 hours: 30%
CI/CD only adoption:
Effort: 10 hours
Teams willing to invest 10 hours: 90%
If the bundle is too big to swallow, unbundling gets you in the door.
Unbundle When: Teams Have Strong Existing Solutions ¶
Team situation:
CI/CD: Happy with GitHub Actions
Observability: Need something
Kubernetes: Need something
Force full platform?
Team resists—doesn't want to migrate CI/CD
Offer components?
Team adopts observability + K8s
Maybe CI/CD later
Unbundling respects sunk costs.
The Hybrid: Core Bundle + Add-Ons ¶
Most mature platforms land here:
Core bundle (mandatory):
- CI/CD
- Kubernetes namespace
- Basic observability
→ Standard "platform adoption"
Add-ons (optional):
- Advanced observability (tracing)
- Service mesh
- Feature flags
- Database provisioning
→ Teams opt-in based on need
Why Hybrid Works ¶
Core bundle:
- Achieves integration benefits
- Simplifies adoption decision
- Amortizes fixed costs
- Establishes platform relationship
Add-ons:
- Captures additional value from high-need teams
- Doesn't force low-value components on everyone
- Allows incremental expansion
- Tests demand for new capabilities
Designing the Core Bundle ¶
Include components that are:
1. Universally needed (>80% of teams want it)
2. Highly integrated (much more valuable together)
3. Foundation for other services
4. Low marginal cost to include
Exclude components that are:
1. Niche (only 30% of teams want it)
2. Standalone (works fine without integration)
3. High marginal cost
4. Controversial (teams have strong existing preferences)
Pricing the Add-Ons ¶
Add-on pricing strategies:
Free (loss leader):
- Drives adoption of core platform
- Low marginal cost
- Example: Basic feature flags
Included at threshold:
- Free up to X usage, then charges apply
- Self-selects heavy users
- Example: Tracing (free <1M spans/month)
Premium:
- Significant standalone value
- High marginal cost
- Example: Managed database provisioning
Real-World Examples ¶
AWS: Master Bundlers ¶
Bundle: AWS Account
- IAM (free, but required)
- VPC (free, foundational)
- CloudWatch basics (free tier)
Add-ons:
- RDS, Lambda, EKS, etc.
- Each priced separately
Result: Easy to start, expand over time
Datadog: Bundle for Value ¶
Bundle: Infrastructure monitoring
- Metrics
- Host maps
- Dashboards
- Alerts
Add-ons (priced per host/volume):
- APM
- Logs
- Synthetics
- Security
Note: Each add-on is MORE valuable because of integration with core.
Backstage: Fully Unbundled ¶
Core: Developer portal framework
Plugins: Everything is a plugin
- CI/CD views
- Kubernetes
- Docs
- APIs
Approach: Maximum flexibility, teams compose their own bundle
Trade-off: More adoption friction, less integration guarantee
Making the Decision ¶
The Decision Matrix ¶
| Factor | Bundle | Unbundle |
|---|---|---|
| Preference correlation | Negative | Positive |
| Integration value | High | Low |
| Fixed costs | High | Low |
| Adoption friction | High (need to reduce) | Low |
| Existing solutions | Few | Many |
| Team sophistication | Lower (want simplicity) | Higher (want control) |
The Phased Approach ¶
Phase 1 (Early platform):
Single bundle — maximize adoption, prove value
Phase 2 (Growing platform):
Core bundle + 1-2 add-ons — capture additional value
Phase 3 (Mature platform):
Core bundle + menu of add-ons — full flexibility
Start bundled, unbundle as you learn what teams value.
Measuring Success ¶
Bundled Platform Metrics ¶
Adoption rate: % of teams on platform
Utilization breadth: % of components actively used
Time to adopt: Hours from decision to productive
Net promoter score: Would teams recommend?
Unbundled Platform Metrics ¶
Per-component adoption: % of teams using each component
Cross-sell rate: % of single-component teams that add more
Churn rate: % of teams dropping components
Revenue per team: Total value captured per team
Hybrid Platform Metrics ¶
Core adoption: % of teams on core bundle
Add-on attach rate: % of core teams using add-ons
Expansion revenue: Value from add-ons over time
Bundle satisfaction: Is core bundle right-sized?
Summary ¶
Bundling isn’t arbitrary—it’s economics:
| Principle | Application |
|---|---|
| Negative correlation | Bundle services with diverse appeal |
| Variance reduction | Bundle to simplify pricing |
| Integration value | Bundle complements, unbundle substitutes |
| Fixed cost amortization | Bundle to spread costs |
| Adoption friction | Bundle to simplify decisions |
The framework:
1. Map your services
2. Analyze preference correlation across teams
3. Assess integration value between components
4. Consider adoption friction and existing solutions
5. Design: Pure bundle, pure unbundle, or hybrid
6. Iterate based on adoption data
Most platforms evolve toward core bundle + add-ons:
- Core bundle captures integration value and simplifies adoption
- Add-ons capture additional surplus from high-need teams
- Hybrid balances simplicity with flexibility
The right bundling strategy extracts more value, increases adoption, and makes your platform feel like a coherent product rather than a random collection of tools.
Netflix bundles everything. Cable unbundled and died. Your platform needs to find its own answer—and now you have the framework to find it.