Session Time Budgeting & Timeline Predictions
How to allocate time within sessions and predict results based on user commitments. Status: Research Complete
Part 1: Session Time Budgeting
Session Time Breakdown
| Session Duration | Warmup | Main Workout | Cooldown | Effective Training Time |
|---|---|---|---|---|
| 30 min | 5 min | 20 min | 5 min | 20 min |
| 45 min | 5 min | 35 min | 5 min | 35 min |
| 60 min | 8 min | 44 min | 8 min | 44 min |
| 75 min | 10 min | 55 min | 10 min | 55 min |
| 90 min | 10 min | 70 min | 10 min | 70 min |
Sources: ISSA, Harvard Health
Exercise Count by Session Duration
Based on rest periods and set duration research:
| Session Duration | Compounds | Accessories | Isolation | Total Exercises | Total Sets |
|---|---|---|---|---|---|
| 30 min | 2 | 1 | 0-1 | 3-4 | 9-12 |
| 45 min | 2-3 | 1-2 | 1 | 4-6 | 14-18 |
| 60 min | 3 | 2 | 2 | 6-7 | 18-22 |
| 75 min | 3-4 | 2-3 | 2 | 7-9 | 22-27 |
| 90 min | 4 | 3 | 2-3 | 9-10 | 27-32 |
Time Per Exercise Calculation
Compound Exercises (with 2-3 min rest)
Per Set Time:
- Execution: 30-45 sec (8-12 reps at 3-4 sec tempo)
- Rest: 120-180 sec
Total per 4-set compound:
- Sets: 4 × 40 sec = 160 sec (~2.7 min)
- Rest: 3 × 150 sec = 450 sec (~7.5 min)
- Total: ~10 min per compound exercise
Accessory Exercises (with 90 sec rest)
Per Set Time:
- Execution: 40-50 sec (10-12 reps)
- Rest: 90 sec
Total per 3-set accessory:
- Sets: 3 × 45 sec = 135 sec (~2.3 min)
- Rest: 2 × 90 sec = 180 sec (3 min)
- Total: ~5.5 min per accessory exercise
Isolation Exercises (with 60 sec rest)
Per Set Time:
- Execution: 40-60 sec (12-15 reps)
- Rest: 60 sec
Total per 3-set isolation:
- Sets: 3 × 50 sec = 150 sec (2.5 min)
- Rest: 2 × 60 sec = 120 sec (2 min)
- Total: ~4.5 min per isolation exercise
Session Builder Formula
interface SessionTimeConfig {
totalMinutes: number;
warmupMinutes: number;
cooldownMinutes: number;
}
interface ExerciseAllocation {
compounds: number;
accessories: number;
isolation: number;
totalSets: number;
}
function calculateExerciseAllocation(config: SessionTimeConfig): ExerciseAllocation {
const effectiveTime = config.totalMinutes - config.warmupMinutes - config.cooldownMinutes;
// Time constants (in minutes)
const COMPOUND_TIME = 10; // 4 sets, 2-3 min rest
const ACCESSORY_TIME = 5.5; // 3 sets, 90 sec rest
const ISOLATION_TIME = 4.5; // 3 sets, 60 sec rest
// Allocation strategy: 60% compounds, 25% accessories, 15% isolation
let compounds = 0;
let accessories = 0;
let isolation = 0;
let remainingTime = effectiveTime;
// Minimum 2 compounds for any session
compounds = Math.min(Math.floor(remainingTime * 0.6 / COMPOUND_TIME), 4);
compounds = Math.max(compounds, 2); // At least 2
remainingTime -= compounds * COMPOUND_TIME;
// Accessories
accessories = Math.min(Math.floor(remainingTime * 0.6 / ACCESSORY_TIME), 3);
remainingTime -= accessories * ACCESSORY_TIME;
// Isolation with remaining time
isolation = Math.min(Math.floor(remainingTime / ISOLATION_TIME), 3);
return {
compounds,
accessories,
isolation,
totalSets: (compounds * 4) + (accessories * 3) + (isolation * 3),
};
}
Volume Distribution by Session Duration
| Duration | Sets/Session | Sessions/Week (4-day) | Weekly Sets | Weekly Sets/Muscle (U/L) |
|---|---|---|---|---|
| 30 min | 9-12 | 4 | 36-48 | 9-12 |
| 45 min | 14-18 | 4 | 56-72 | 14-18 |
| 60 min | 18-22 | 4 | 72-88 | 18-22 |
| 75 min | 22-27 | 4 | 88-108 | 22-27 |
| 90 min | 27-32 | 4 | 108-128 | 27-32 |
Note: For body recomp, optimal range is 12-20 sets/muscle/week. Sessions of 45-60 min hit this perfectly.
Part 2: Ideal vs Adjusted Plan System
The Core Concept
┌─────────────────────────────────────────────────────────┐
│ IDEAL PLAN │
│ • Optimal frequency (4 days/week) │
│ • Optimal duration (60 min) │
│ • Optimal volume (14-16 sets/muscle/week) │
│ • Expected timeline: 12-16 weeks │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ USER ADJUSTS PLAN │
│ • "I can only do 3 days/week" │
│ • "I only have 45 minutes" │
│ • "I want to skip leg day" (not recommended!) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ RECALCULATED PREDICTION │
│ • Adjusted volume: 10-12 sets/muscle/week │
│ • Progress rate: 70% of optimal │
│ • New timeline: 18-22 weeks │
│ • Trade-off explanation shown │
└─────────────────────────────────────────────────────────┘
Progress Rate Research
Muscle Gain Rates (Natural, Optimal Conditions)
| Experience Level | Monthly Gain | Weekly Gain | % Body Weight/Month |
|---|---|---|---|
| Beginner | 2-4 lbs | 0.5-1 lb | 1-1.5% |
| Intermediate | 1-2 lbs | 0.25-0.5 lb | 0.5-1% |
| Advanced | 0.25-0.5 lb | 0.06-0.12 lb | 0.25-0.5% |
Sources: Precision Nutrition, Men's Health
Fat Loss Rates (For Muscle Retention)
| Approach | Weekly Loss | Monthly Loss | Muscle Retention |
|---|---|---|---|
| Optimal (slow) | 0.5-0.7% BW | 2-3% BW | Excellent |
| Moderate | 0.7-1% BW | 3-4% BW | Good |
| Aggressive | 1-1.5% BW | 4-6% BW | Fair (risk of loss) |
| Too fast | >1.5% BW | >6% BW | Poor (muscle loss likely) |
Research Finding: Athletes aiming to gain lean body mass during weight loss should aim for weekly body weight loss of 0.7% (PubMed).
Volume-Progress Relationship
Research shows a dose-response relationship between volume and results:
| Weekly Sets/Muscle | Progress Rate | Notes |
|---|---|---|
| <4 sets | ~40% | Below minimum effective dose |
| 4-9 sets | ~60-70% | Minimum effective |
| 10-12 sets | ~80-85% | Good results |
| 12-20 sets | 100% | Optimal range |
| 20+ sets | 100-105% | Diminishing returns, recovery concerns |
Sources: Stronger by Science, SportRxiv Meta-Analysis
Frequency-Progress Relationship
| Frequency | Impact on Progress | Notes |
|---|---|---|
| 1x/week per muscle | ~70% | Suboptimal MPS utilization |
| 2x/week per muscle | 100% | Optimal for most |
| 3x/week per muscle | ~100-105% | Slight edge for beginners |
Key Finding: When volume is equated, frequency has minimal impact. The real issue with low frequency is fitting enough volume into single sessions.
Sources: PubMed Meta-Analysis, Stronger by Science
Timeline Prediction Algorithm
interface UserProfile {
experienceLevel: 'beginner' | 'intermediate' | 'advanced' | 'returning';
currentBodyFat: number; // percentage
targetBodyFat: number; // percentage
currentWeight: number; // lbs
targetWeight: number; // lbs (optional, often same for recomp)
}
interface PlanCommitment {
daysPerWeek: number; // 2-6
minutesPerSession: number; // 30-90
weeklyCardioMinutes: number; // 0-180
nutritionAdherence: 'poor' | 'fair' | 'good' | 'excellent';
sleepHours: number; // 5-9
}
interface TimelinePrediction {
optimalWeeks: number;
adjustedWeeks: number;
progressRate: number; // 0-100%
weeklyFatLoss: number; // lbs
weeklyMuscleGain: number; // lbs
tradeoffs: string[];
}
function predictTimeline(
profile: UserProfile,
ideal: PlanCommitment,
adjusted: PlanCommitment
): TimelinePrediction {
// Base rates for optimal conditions
const baseMuscleGain = getBaseMuscleGain(profile.experienceLevel); // lbs/week
const baseFatLoss = profile.currentWeight * 0.007; // 0.7% BW/week
// Calculate progress modifiers
const volumeModifier = calculateVolumeModifier(adjusted);
const frequencyModifier = calculateFrequencyModifier(adjusted.daysPerWeek);
const nutritionModifier = getNutritionModifier(adjusted.nutritionAdherence);
const sleepModifier = getSleepModifier(adjusted.sleepHours);
// Combined progress rate
const progressRate = Math.min(
volumeModifier * frequencyModifier * nutritionModifier * sleepModifier,
1.0 // Cap at 100%
);
// Adjusted rates
const adjustedMuscleGain = baseMuscleGain * progressRate;
const adjustedFatLoss = baseFatLoss * progressRate;
// Calculate timelines
const fatToLose = calculateFatToLose(profile);
const optimalWeeks = Math.ceil(fatToLose / baseFatLoss);
const adjustedWeeks = Math.ceil(fatToLose / adjustedFatLoss);
// Identify trade-offs
const tradeoffs = identifyTradeoffs(ideal, adjusted);
return {
optimalWeeks,
adjustedWeeks,
progressRate: Math.round(progressRate * 100),
weeklyFatLoss: adjustedFatLoss,
weeklyMuscleGain: adjustedMuscleGain,
tradeoffs,
};
}
function calculateVolumeModifier(commitment: PlanCommitment): number {
const allocation = calculateExerciseAllocation({
totalMinutes: commitment.minutesPerSession,
warmupMinutes: commitment.minutesPerSession <= 45 ? 5 : 8,
cooldownMinutes: commitment.minutesPerSession <= 45 ? 5 : 8,
});
// Weekly sets estimate (assuming Upper/Lower split)
const weeklySets = allocation.totalSets * commitment.daysPerWeek;
const setsPerMuscle = weeklySets / 2; // Rough estimate for U/L
// Volume-progress curve
if (setsPerMuscle < 4) return 0.4;
if (setsPerMuscle < 10) return 0.6 + (setsPerMuscle - 4) * 0.033;
if (setsPerMuscle < 12) return 0.8 + (setsPerMuscle - 10) * 0.025;
if (setsPerMuscle <= 20) return 1.0;
return 1.0; // Diminishing returns beyond 20
}
function calculateFrequencyModifier(daysPerWeek: number): number {
// Based on muscle frequency (2x/week optimal)
if (daysPerWeek <= 2) return 0.7; // 1x/muscle/week
if (daysPerWeek <= 4) return 1.0; // 2x/muscle/week
return 1.0; // 2-3x/muscle/week
}
function getNutritionModifier(adherence: string): number {
const modifiers = {
poor: 0.5,
fair: 0.7,
good: 0.9,
excellent: 1.0,
};
return modifiers[adherence] || 0.7;
}
function getSleepModifier(hours: number): number {
if (hours < 6) return 0.6;
if (hours < 7) return 0.8;
if (hours <= 9) return 1.0;
return 0.95; // Oversleeping slightly negative
}
Progress Rate Calculation Examples
Example 1: Optimal Commitment
User: Intermediate, 180 lbs, 20% BF → 15% BF goal
Commitment:
- 4 days/week (2x/muscle)
- 60 min sessions (18-22 sets)
- Good nutrition
- 7.5 hours sleep
Calculation:
- Volume modifier: 1.0 (14-16 sets/muscle/week)
- Frequency modifier: 1.0 (2x/muscle)
- Nutrition modifier: 0.9
- Sleep modifier: 1.0
- Progress rate: 90%
Timeline:
- Fat to lose: ~9 lbs
- Weekly loss: 1.26 lbs × 0.9 = 1.13 lbs
- Optimal timeline: 8 weeks
- Adjusted timeline: 8 weeks (minimal difference)
Example 2: Reduced Commitment
User: Same profile
Commitment:
- 3 days/week (1.5x/muscle)
- 45 min sessions (14-18 sets)
- Fair nutrition
- 6 hours sleep
Calculation:
- Volume modifier: 0.85 (10-12 sets/muscle/week)
- Frequency modifier: 0.85 (between 1x and 2x)
- Nutrition modifier: 0.7
- Sleep modifier: 0.8
- Progress rate: 40% (0.85 × 0.85 × 0.7 × 0.8)
Timeline:
- Fat to lose: ~9 lbs
- Weekly loss: 1.26 lbs × 0.4 = 0.5 lbs
- Optimal timeline: 8 weeks
- Adjusted timeline: 18 weeks
Trade-offs shown:
- "Reducing to 3 days/week decreases weekly volume by ~25%"
- "45-minute sessions limit exercise variety"
- "Sleep under 7 hours impairs recovery and fat loss"
- "Nutrition adherence is the biggest factor - improving this alone adds 20%"
UI Concept: Timeline Slider
┌─────────────────────────────────────────────────────────────────┐
│ YOUR RECOMP TIMELINE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ OPTIMAL PLAN YOUR PLAN │
│ ──────────── ───────── │
│ 4 days/week 3 days/week │
│ 60 min sessions 45 min sessions │
│ 16 sets/muscle/week 11 sets/muscle/week │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TIMELINE COMPARISON │ │
│ │ │ │
│ │ Optimal: ████████░░░░░░░░░░░░░░ 12 weeks │ │
│ │ Your Plan: ████████████████████░░░░░░░░░ 18 weeks │ │
│ │ │ │
│ │ Progress Rate: 67% │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 💡 WHAT'S IMPACTING YOUR TIMELINE: │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Training Volume ████████░░ -15% │ │
│ │ Training Frequency ███████░░░ -20% │ │
│ │ Nutrition ██████░░░░ -30% ← Biggest factor │ │
│ │ Sleep ████████░░ -20% │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ [Adjust My Plan] [Continue with Current Plan] │
│ │
└─────────────────────────────────────────────────────────────────┘
Key Trade-off Messages
| Adjustment | Impact | Message |
|---|---|---|
| 4→3 days/week | -15-20% progress | "Training 3 days instead of 4 reduces muscle stimulus. Consider longer sessions to compensate." |
| 4→2 days/week | -30-40% progress | "Training only 2 days significantly limits results. Each muscle only gets trained once per week." |
| 60→45 min | -10-15% progress | "Shorter sessions mean fewer exercises. Focus on compounds to maximize efficiency." |
| 60→30 min | -25-35% progress | "30-minute sessions are maintenance-level. Results will be slow but steady." |
| Good→Fair nutrition | -20% progress | "Nutrition is the #1 factor. Hitting protein targets alone can recover most of this." |
| 7→6 hrs sleep | -20% progress | "Sleep deprivation impairs fat loss and muscle recovery. Consider this non-negotiable." |
| Skip cardio | -5-10% progress | "Cardio accelerates fat loss but isn't essential. Prioritize lifting first." |
Integration with Plan Generation
3-Option Plan Presentation
When generating plans, present 3 options:
| Option | Name | Description |
|---|---|---|
| Peak | Maximum Results | Optimal frequency, duration, and volume. Fastest timeline. |
| Optimized | Balanced | Slightly reduced commitment with 85-90% results. |
| Sustainable | Lifestyle Fit | Minimum effective dose. Slower but maintainable. |
interface PlanOption {
id: 'peak' | 'optimized' | 'sustainable';
name: string;
frequency: number;
sessionDuration: number;
weeklyVolume: number;
progressRate: number;
estimatedWeeks: number;
tradeoffs: string[];
}
function generatePlanOptions(profile: UserProfile, constraints: UserConstraints): PlanOption[] {
return [
{
id: 'peak',
name: 'Peak Performance',
frequency: 4,
sessionDuration: 60,
weeklyVolume: 16,
progressRate: 100,
estimatedWeeks: calculateTimeline(profile, 1.0),
tradeoffs: [],
},
{
id: 'optimized',
name: 'Optimized Balance',
frequency: Math.min(constraints.maxDays, 4),
sessionDuration: Math.min(constraints.maxDuration, 55),
weeklyVolume: 13,
progressRate: 85,
estimatedWeeks: calculateTimeline(profile, 0.85),
tradeoffs: ['Slightly longer timeline for better work-life balance'],
},
{
id: 'sustainable',
name: 'Sustainable Progress',
frequency: Math.min(constraints.maxDays, 3),
sessionDuration: Math.min(constraints.maxDuration, 45),
weeklyVolume: 10,
progressRate: 65,
estimatedWeeks: calculateTimeline(profile, 0.65),
tradeoffs: [
'Longer timeline but highly maintainable',
'Focus on compound movements',
'Perfect for busy schedules',
],
},
];
}
Sources
- ISSA - Warmup and Cooldown
- Harvard Health - Exercise Warmup
- Precision Nutrition - Rates of Fat Loss and Muscle Gain
- Men's Health - Muscle Gain per Month
- PubMed - Weight Loss Rate for Athletes
- Stronger by Science - Volume and Diminishing Returns
- SportRxiv - Volume Meta-Analysis
- PubMed - Training Frequency Meta-Analysis
- Stronger by Science - Frequency
Related Documents
- 02-ten-pillars.md - Volume, frequency, intensity research
- 03-body-recomposition.md - Recomp timeline and nutrition
- 06-implementation.md - Algorithm integration
Last Updated: 2025-12-08