Portfolio Management
Managing multiple AI-operated startups at venture studio scale
Portfolio Management
Startups.Studio enables managing dozens or hundreds of AI-operated startups simultaneously. This guide covers strategies, tools, and best practices for portfolio-scale operations.
Portfolio Structure
A typical Startups.Studio portfolio:
Portfolio
├── Active Startups (30)
│ ├── Idea (10)
│ ├── Validation (8)
│ ├── Build (5)
│ ├── Launch (4)
│ └── Scale (3)
├── Exited Startups (5)
│ ├── Acquired (3)
│ ├── Merged (1)
│ └── Wound Down (1)
└── Archived Ideas (50)Portfolio Dashboard
The main interface for managing all startups:
┌─────────────────────────────────────────────────────────┐
│ Startups.Studio Portfolio │
├─────────────────────────────────────────────────────────┤
│ Overview │
│ • Active: 30 startups │
│ • Total MRR: $250k │
│ • Total ARR: $3M │
│ • Portfolio Value: ~$25M │
│ • Growth: +12% MoM │
│ │
│ By Stage │
│ ┌──────┬──────┬──────┬──────┬──────┬──────┐ │
│ │ Idea │ Val │Build │Launch│Scale │Exit │ │
│ │ 10 │ 8 │ 5 │ 4 │ 3 │ 5 │ │
│ └──────┴──────┴──────┴──────┴──────┴──────┘ │
│ │
│ Health Status │
│ 🟢 Healthy: 22 🟡 At Risk: 6 🔴 Critical: 2 │
│ │
│ Top Performers (by MRR growth) │
│ 1. Zap Analytics $50k (+25% MoM) 🟢 │
│ 2. Acme SaaS $35k (+20% MoM) 🟢 │
│ 3. Bolt Marketplace $30k (+18% MoM) 🟢 │
│ │
│ Needs Attention │
│ ⚠️ TaskFlow: High churn (15% this month) │
│ ⚠️ DataSync: Missed revenue target by 30% │
│ │
│ Recent Activity │
│ • InvoiceAI: Acquired by BigCo for $8M │
│ • EmailBot: Launched publicly, 50 signups │
│ • CRM Pro: Crossed $10k MRR milestone │
└─────────────────────────────────────────────────────────┘Portfolio Metrics
Aggregate Metrics
Track performance across all startups:
export const portfolioMetrics = {
// Revenue
totalMRR: 250000,
totalARR: 3000000,
portfolioGrowth: 0.12, // 12% MoM
// Customers
totalCustomers: 1250,
avgCustomersPerStartup: 42,
portfolioChurn: 0.04, // 4% MoM
// Startups
activeStartups: 30,
newThisMonth: 3,
exitedThisMonth: 1,
// Unit Economics
avgCAC: 180,
avgLTV: 950,
avgLTVCACRatio: 5.3,
// Efficiency
totalAgents: 85,
avgAgentsPerStartup: 2.8,
costPerStartup: 2500, // monthly
revenuePerAgent: 2941, // monthly
// Portfolio Health
healthy: 22,
atRisk: 6,
critical: 2
}
<PortfolioMetrics data={portfolioMetrics} />Per-Startup Metrics
Monitor each startup individually:
| Startup | Stage | MRR | Growth | Customers | Health | Agents |
|---|---|---|---|---|---|---|
| Zap Analytics | Scale | $50k | +25% | 180 | 🟢 | 5 |
| Acme SaaS | Scale | $35k | +20% | 120 | 🟢 | 4 |
| Bolt Marketplace | Scale | $30k | +18% | 200 | 🟢 | 6 |
| InvoiceAI | Launch | $15k | +35% | 75 | 🟢 | 3 |
| TaskFlow | Launch | $12k | -10% | 60 | 🔴 | 3 |
| EmailBot | Launch | $8k | +50% | 45 | 🟢 | 2 |
| DataSync | Launch | $6k | -5% | 30 | 🟡 | 2 |
| CRM Pro | Build | $0 | N/A | 15 | 🟢 | 2 |
Portfolio Strategies
1. Thesis-Driven Portfolio
Build startups around core theses:
export const portfolioTheses = [
{
name: 'AI-First SaaS',
hypothesis: 'AI enables 10x better user experiences at 1/10th the cost',
startups: [
'https://acme-analytics.com',
'https://email-bot.com',
'https://content-ai.com'
],
metrics: {
totalMRR: 75000,
avgMRR: 25000,
growth: 0.22
}
},
{
name: 'Vertical SaaS for SMBs',
hypothesis: 'Underserved verticals will pay for tailored solutions',
startups: [
'https://contractor-crm.com',
'https://dental-practice-mgmt.com',
'https://gym-operations.com'
],
metrics: {
totalMRR: 60000,
avgMRR: 20000,
growth: 0.15
}
},
{
name: 'API-First Products',
hypothesis: 'Developers prefer APIs over UIs for automation',
startups: [
'https://webhook-hub.com',
'https://data-sync-api.com',
'https://auth-api.com'
],
metrics: {
totalMRR: 45000,
avgMRR: 15000,
growth: 0.18
}
}
]
<ThesisPerformance theses={portfolioTheses} />2. Stage Balancing
Maintain healthy distribution across stages:
export const stageBalance = {
target: {
idea: 0.25, // 25% in ideation
validation: 0.20, // 20% in validation
build: 0.15, // 15% building
launch: 0.25, // 25% launching
scale: 0.15 // 15% scaling
},
current: {
idea: 0.33, // 10/30 = 33% (over-indexed)
validation: 0.27, // 8/30 = 27% (over-indexed)
build: 0.17, // 5/30 = 17%
launch: 0.13, // 4/30 = 13% (under-indexed)
scale: 0.10 // 3/30 = 10% (under-indexed)
},
actions: [
'Move 2-3 validation startups to build',
'Accelerate 1-2 build startups to launch',
'Consider archiving 2-3 ideas with low scores'
]
}
<StageBalanceChart balance={stageBalance} />3. Capital Allocation
Distribute capital based on stage and performance:
export const capitalAllocation = {
totalBudget: 100000, // monthly
byStage: {
idea: 5000, // $500/startup × 10
validation: 16000, // $2k/startup × 8
build: 25000, // $5k/startup × 5
launch: 32000, // $8k/startup × 4
scale: 22000 // $7.3k/startup × 3 (invest for growth)
},
byFunction: {
agentCosts: 40000, // AI/compute
infrastructure: 25000, // Hosting, tools
customerAcquisition: 20000, // Ads, marketing
development: 10000, // Custom development
misc: 5000
},
topSpenders: [
{ startup: 'Zap Analytics', spend: 12000, reason: 'Scaling marketing' },
{ startup: 'Acme SaaS', spend: 9000, reason: 'Infrastructure for growth' },
{ startup: 'Bolt Marketplace', spend: 8000, reason: 'Two-sided marketplace growth' }
]
}
<CapitalAllocation data={capitalAllocation} />Portfolio Operations
Resource Sharing
Share resources across startups:
// Shared agent pool
export const sharedAgents = {
support: new SupportAgent({
name: 'Universal Support',
servingStartups: [
'https://acme-analytics.com',
'https://email-bot.com',
'https://task-flow.com'
],
capacity: 100, // customers per agent
allocation: 'round-robin'
}),
marketing: new MarketingAgent({
name: 'Content Factory',
servingStartups: 'all',
tasks: ['seo-content', 'social-posts', 'email-campaigns'],
budget: 10000 // shared budget
})
}
// Shared infrastructure
export const sharedInfra = {
database: 'clickhouse-cluster-1',
email: 'sendgrid-account-main',
payments: 'stripe-connect-platform',
analytics: 'plausible-account',
monitoring: 'sentry-organization'
}
// Shared building blocks
export const sharedBlocks = {
authSystem: 'https://functions.do/auth',
paymentFlow: 'https://functions.do/payments',
onboarding: 'https://functions.do/onboarding'
}Cross-Portfolio Insights
Learn from data across all startups:
export const crossPortfolioInsights = {
// What works
bestPractices: [
{
finding: 'Free trial → paid converts at 25% with 7-day trial',
evidence: 'Data from 8 startups',
recommendation: 'Standardize on 7-day trials'
},
{
finding: 'Onboarding completion rate 80% when < 3 steps',
evidence: 'Data from 12 startups',
recommendation: 'Keep onboarding to 3 steps max'
},
{
finding: 'Email campaigns with personalization convert 3x better',
evidence: 'A/B tests across 6 startups',
recommendation: 'Always personalize outreach'
}
],
// What doesn't work
antiPatterns: [
{
finding: 'Freemium models have 85% higher support costs',
evidence: 'Comparing 4 freemium vs 8 trial-based',
recommendation: 'Default to free trial, not freemium'
},
{
finding: 'Complex pricing causes 40% more support tickets',
evidence: 'Analyzing support data across 10 startups',
recommendation: 'Keep pricing simple (3 tiers max)'
}
],
// Benchmarks
benchmarks: {
trialToPaid: 0.25,
activation: 0.75,
churn: 0.04,
cac: 180,
ltv: 950,
paybackPeriod: 4.5, // months
monthsToFirstCustomer: 2.5,
monthsTo10k: 5.2
}
}
<CrossPortfolioInsights data={crossPortfolioInsights} />Portfolio Health Monitoring
Health Scoring
Automated health assessment for each startup:
export function calculateHealth(startup: Startup): HealthScore {
const metrics = {
growth: startup.mrrGrowth > 0.10 ? 30 : startup.mrrGrowth > 0 ? 20 : 0,
churn: startup.churn < 0.05 ? 25 : startup.churn < 0.10 ? 15 : 0,
customers: startup.customers > 50 ? 20 : startup.customers > 10 ? 10 : 0,
runway: startup.runway > 12 ? 15 : startup.runway > 6 ? 10 : 0,
nps: startup.nps > 8 ? 10 : startup.nps > 6 ? 5 : 0
}
const score = Object.values(metrics).reduce((a, b) => a + b, 0)
return {
score,
status: score > 70 ? 'healthy' : score > 50 ? 'at-risk' : 'critical',
breakdown: metrics,
recommendations: generateRecommendations(startup, metrics)
}
}
// Example output
{
score: 85,
status: 'healthy',
breakdown: {
growth: 30, // 15% MoM growth
churn: 25, // 3% churn
customers: 20, // 75 customers
runway: 15, // 14 months runway
nps: 10 // NPS of 8.5
},
recommendations: [
'Maintain current growth trajectory',
'Focus on reducing churn to < 3%'
]
}Alert System
Proactive alerts for portfolio issues:
export const alertRules = [
{
name: 'High Churn',
condition: (s) => s.churn > 0.10,
severity: 'critical',
action: 'Investigate churn reasons, improve retention'
},
{
name: 'Negative Growth',
condition: (s) => s.mrrGrowth < 0,
severity: 'warning',
action: 'Review marketing and sales effectiveness'
},
{
name: 'Low Runway',
condition: (s) => s.runway < 3,
severity: 'critical',
action: 'Inject capital or prepare for shutdown'
},
{
name: 'Stagnant',
condition: (s) => s.stage === 'Launch' && s.ageInStage > 90,
severity: 'warning',
action: 'Either scale or pivot/kill'
},
{
name: 'Agent Inefficiency',
condition: (s) => s.costPerCustomer > s.ltv * 0.5,
severity: 'warning',
action: 'Optimize agent costs or increase prices'
}
]
// Active alerts
export const activeAlerts = [
{
startup: 'TaskFlow',
alert: 'High Churn',
severity: 'critical',
details: 'Churn increased to 15% this month',
action: 'Schedule customer interviews to identify issues'
},
{
startup: 'DataSync',
alert: 'Negative Growth',
severity: 'warning',
details: 'MRR declined 5% MoM',
action: 'Review recent product changes and customer feedback'
}
]
<AlertDashboard alerts={activeAlerts} />Decision Frameworks
When to Invest More
export const investmentCriteria = {
doubleDown: [
'Product-market fit clearly achieved',
'Unit economics are profitable',
'Growth rate > 15% MoM',
'Large market opportunity (TAM > $100M)',
'Scalable acquisition channels identified'
],
maintain: [
'Steady growth (5-15% MoM)',
'Positive unit economics',
'No major red flags',
'Learning and iterating'
],
reduce: [
'Stagnant or declining',
'Negative unit economics with no path to profitability',
'Founder/team issues',
'Market too small'
]
}When to Kill a Startup
export const killCriteria = {
immediate: [
'Legal or ethical issues discovered',
'Regulatory impossibility',
'Founder quits with no replacement'
],
after3Months: [
'No validation signals (< 50 waitlist signups)',
'Extreme negative feedback from customers',
'Technical impossibility discovered'
],
after6Months: [
'No paying customers',
'Zero growth for 3+ months',
'Uneconomical unit economics with no improvement'
],
after12Months: [
'Cannot achieve $10k MRR',
'Perpetual high churn (> 10%)',
'Better opportunities identified for resources'
]
}
// Example decision
const startup = await load('https://failing-startup.com')
const decision = evaluateKill(startup, killCriteria)
if (decision.shouldKill) {
await windDown(startup, {
refundCustomers: true,
archiveCode: true,
documentLearnings: true,
reallocateAgents: true
})
}When to Pivot
export const pivotSignals = [
{
signal: 'Different customer segment shows stronger interest',
example: 'Built for SMBs but enterprises keep asking for it',
action: 'Pivot to enterprise'
},
{
signal: 'Feature usage reveals different core value',
example: 'Built analytics dashboard, but API is most used',
action: 'Pivot to API-first product'
},
{
signal: 'Adjacent market opportunity is bigger',
example: 'Built CRM, but workflow automation is the real pain',
action: 'Pivot to workflow automation'
},
{
signal: 'Technology breakthrough enables new approach',
example: 'New AI model makes old approach obsolete',
action: 'Rebuild with new technology'
}
]Portfolio Automation
Automated Operations
Let the portfolio run itself:
export const automatedOperations = {
// Stage transitions
stageTransitions: {
enabled: true,
criteria: lifecycleCriteria
},
// Health monitoring
healthChecks: {
frequency: 'daily',
alerts: alertRules,
autoRemediation: {
highChurn: 'trigger-retention-campaign',
lowActivation: 'improve-onboarding-emails',
slowGrowth: 'increase-marketing-budget'
}
},
// Resource allocation
resourceAllocation: {
mode: 'dynamic',
rules: [
'Scale agent capacity based on customer count',
'Increase marketing budget for proven channels',
'Reduce spend on stagnant startups'
]
},
// Reporting
reporting: {
daily: ['health-summary', 'critical-alerts'],
weekly: ['portfolio-metrics', 'stage-transitions', 'top-performers'],
monthly: ['full-portfolio-report', 'cross-portfolio-insights', 'recommendations']
}
}Portfolio-Level Agents
AI agents that manage the portfolio itself:
export const portfolioAgents = {
analyst: new AnalystAgent({
tasks: [
'analyze-portfolio-metrics',
'identify-trends',
'generate-insights',
'recommend-actions'
],
frequency: 'daily'
}),
strategist: new StrategistAgent({
tasks: [
'evaluate-new-ideas',
'recommend-portfolio-balance',
'identify-thesis-opportunities',
'suggest-pivots-kills'
],
frequency: 'weekly'
}),
operator: new OperatorAgent({
tasks: [
'allocate-resources',
'manage-agent-fleet',
'optimize-costs',
'coordinate-cross-startup-initiatives'
],
frequency: 'daily'
})
}Reporting
Portfolio Report Example
---
$type: PortfolioReport
$id: https://reports.startups.studio/2024-12
period: December 2024
---
# Portfolio Report - December 2024
## Executive Summary
- Active Startups: 30 (+2 from last month)
- Total MRR: $250k (+12% MoM)
- Portfolio Value: ~$25M
- Exits This Month: 1 (InvoiceAI acquired for $8M)
## Highlights
### Wins
- **InvoiceAI Acquired**: Sold to BigCo for $8M (8x ARR)
- **EmailBot Launched**: 50 customers in first week
- **CRM Pro**: Crossed $10k MRR milestone
### Challenges
- **TaskFlow**: High churn (15%) - investigating root cause
- **DataSync**: Missed revenue target - needs pivot evaluation
## Metrics
<PortfolioMetrics />
## By Stage
<StageDistribution />
## Top Performers
<TopStartups n={5} sortBy="mrrGrowth" />
## Needs Attention
<AtRiskStartups />
## Learnings
Key insights from this month:
1. Faster validation cycles (2 weeks vs 4) lead to better outcomes
2. Composition-based builds launch 3x faster
3. Agent-heavy operations reduce costs 75% vs human teams
## Next Month Focus
- Move 3 validation startups to build stage
- Launch 2 build-stage startups
- Evaluate pivot/kill for 2 at-risk startups
- Continue optimizing agent fleet efficiencyBest Practices
Portfolio Management
- Maintain Balance - Don't overload any single stage
- Kill Fast - Don't waste resources on losers
- Double Down - Invest heavily in winners
- Share Learnings - Apply insights across portfolio
- Automate Everything - Let agents handle operations
- Monitor Health - Catch problems early
- Diversify Theses - Don't put all eggs in one basket
- Stay Focused - Quality over quantity
Capital Efficiency
- Composition First - Build from blocks before custom code
- Share Resources - One agent can serve multiple startups
- Leverage Automation - Reduce human costs to near-zero
- Test Cheaply - Validate before building
- Kill Fast - Don't throw good money after bad
- Scale What Works - Invest in proven channels only
Team Leverage
- Humans for Strategy - Agents for execution
- One Human Can Manage 10+ Startups - With proper automation
- Portfolio-Level Agents - Manage the portfolio itself
- Cross-Startup Resources - Share agents across startups
- Knowledge Sharing - Document and reuse learnings
Next Steps
- Studio - Learn about the Startups.Studio platform
- Composition - Build startups from blocks
- Lifecycle - Manage through lifecycle stages
- Business - Understand Business-as-Code fundamentals