home / skills / aj-geddes / useful-ai-prompts / project-estimation

project-estimation skill

/skills/project-estimation

This skill estimates project scope, timeline, and resources using three-point, bottom-up, and analogous methods to support accurate planning.

npx playbooks add skill aj-geddes/useful-ai-prompts --skill project-estimation

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
9.2 KB
---
name: project-estimation
description: Estimate project scope, timeline, and resource requirements using multiple estimation techniques including bottom-up, top-down, and analogous estimation methods for accurate project planning.
---

# Project Estimation

## Overview

Accurate project estimation determines realistic timelines, budgets, and resource allocation. Effective estimation combines historical data, expert judgment, and structured techniques to minimize surprises.

## When to Use

- Defining project scope and deliverables
- Creating project budgets and timelines
- Allocating team resources
- Managing stakeholder expectations
- Assessing project feasibility
- Planning for contingencies
- Updating estimates during project execution

## Instructions

### 1. **Three-Point Estimation (PERT)**

```python
# Three-point estimation technique for uncertainty

class ThreePointEstimation:
    @staticmethod
    def calculate_pert_estimate(optimistic, most_likely, pessimistic):
        """
        PERT formula: (O + 4M + P) / 6
        Weighted toward most likely estimate
        """
        pert = (optimistic + 4 * most_likely + pessimistic) / 6
        return round(pert, 2)

    @staticmethod
    def calculate_standard_deviation(optimistic, pessimistic):
        """Standard deviation for risk analysis"""
        sigma = (pessimistic - optimistic) / 6
        return round(sigma, 2)

    @staticmethod
    def calculate_confidence_interval(pert_estimate, std_dev, confidence=0.95):
        """
        Calculate confidence interval for estimate
        95% confidence ≈ ±2 sigma
        """
        z_score = 1.96 if confidence == 0.95 else 2.576
        margin = z_score * std_dev

        return {
            'estimate': pert_estimate,
            'lower_bound': round(pert_estimate - margin, 2),
            'upper_bound': round(pert_estimate + margin, 2),
            'range': f"{pert_estimate - margin:.1f} - {pert_estimate + margin:.1f}"
        }

# Example
optimistic = 10  # best case
most_likely = 20  # expected
pessimistic = 40  # worst case

pert = ThreePointEstimation.calculate_pert_estimate(optimistic, most_likely, pessimistic)
std_dev = ThreePointEstimation.calculate_standard_deviation(optimistic, pessimistic)
confidence = ThreePointEstimation.calculate_confidence_interval(pert, std_dev)

print(f"PERT Estimate: {pert} days")
print(f"Standard Deviation: {std_dev}")
print(f"95% Confidence Range: {confidence['range']}")
```

### 2. **Bottom-Up Estimation**

```javascript
// Bottom-up estimation from detailed task breakdown

class BottomUpEstimation {
  constructor(project) {
    this.project = project;
    this.tasks = [];
    this.workBreakdownStructure = {};
  }

  createWBS() {
    // Work Breakdown Structure example
    return {
      level1: 'Full Project',
      level2: ['Planning', 'Design', 'Development', 'Testing', 'Deployment'],
      level3: {
        'Development': [
          'Backend API',
          'Frontend UI',
          'Database Schema',
          'Integration'
        ],
        'Testing': [
          'Unit Testing',
          'Integration Testing',
          'UAT',
          'Performance Testing'
        ]
      }
    };
  }

  estimateTasks(tasks) {
    let totalEstimate = 0;
    const estimates = [];

    for (let task of tasks) {
      const taskEstimate = this.estimateSingleTask(task);
      estimates.push({
        name: task.name,
        effort: taskEstimate.effort,
        resources: taskEstimate.resources,
        risk: taskEstimate.risk,
        duration: taskEstimate.duration
      });
      totalEstimate += taskEstimate.effort;
    }

    return {
      totalEffortHours: totalEstimate,
      totalWorkDays: totalEstimate / 8,
      taskDetails: estimates,
      criticalPath: this.identifyCriticalPath(estimates)
    };
  }

  estimateSingleTask(task) {
    // Base effort
    let effort = task.complexity * task.scope;

    // Adjust for team experience
    const experienceFactor = task.teamExperience / 100; // 0.5 to 1.5
    effort = effort * experienceFactor;

    // Adjust for risk
    const riskFactor = 1 + (task.riskLevel * 0.1);
    effort = effort * riskFactor;

    return {
      effort: Math.ceil(effort),
      resources: Math.ceil(effort / 8), // days
      risk: task.riskLevel,
      duration: Math.ceil(effort / (8 * task.teamSize))
    };
  }

  identifyCriticalPath(estimates) {
    // Return tasks with longest duration
    return estimates
      .sort((a, b) => b.duration - a.duration)
      .slice(0, 5);
  }
}
```

### 3. **Analogous Estimation**

```yaml
Analogous Estimation Template:

Historical Project Comparison:

Current Project:
  Type: E-commerce Payment System
  Complexity: High
  Scope: Medium
  Team Size: 5 developers

Similar Historical Projects:

Project A (2 years ago):
  Type: E-commerce Shipping System
  Complexity: High
  Scope: Medium
  Team Size: 5 developers
  Actual Duration: 16 weeks
  Actual Cost: $180,000
  Lessons: Underestimated integration work

Project B (1 year ago):
  Type: Payment Gateway Integration
  Complexity: High
  Scope: Small
  Team Size: 3 developers
  Actual Duration: 8 weeks
  Actual Cost: $95,000
  Lessons: Security review added 2 weeks

Adjustments:
  - Current project 20% larger than Project B
  - Similar complexity and team composition
  - Estimated Duration: 10-12 weeks
  - Estimated Cost: $120,000-$140,000

Confidence Level: 75% (medium, due to some differences)
```

### 4. **Resource Estimation**

```javascript
// Resource allocation and estimation

class ResourceEstimation {
  calculateResourceNeeds(projectDuration, tasks) {
    const resourceMap = {
      'Senior Developer': 0,
      'Mid-Level Developer': 0,
      'Junior Developer': 0,
      'QA Engineer': 0,
      'DevOps Engineer': 0,
      'Project Manager': 0
    };

    let totalEffort = 0;

    for (let task of tasks) {
      resourceMap[task.requiredRole] += task.effortHours;
      totalEffort += task.effortHours;
    }

    // Calculate FTE (Full Time Equivalent) needed
    const fteMap = {};
    for (let role in resourceMap) {
      fteMap[role] = (resourceMap[role] / (projectDuration * 8 * 5)).toFixed(2);
    }

    return {
      effortByRole: resourceMap,
      fte: fteMap,
      totalEffortHours: totalEffort,
      totalWorkDays: totalEffort / 8,
      costEstimate: this.calculateCost(fteMap)
    };
  }

  calculateCost(fteMap) {
    const dailyRates = {
      'Senior Developer': 1200,
      'Mid-Level Developer': 900,
      'Junior Developer': 600,
      'QA Engineer': 700,
      'DevOps Engineer': 950,
      'Project Manager': 800
    };

    let totalCost = 0;
    const costByRole = {};

    for (let role in fteMap) {
      const fteDays = fteMap[role] * 250; // 250 working days/year
      costByRole[role] = fteDays * dailyRates[role];
      totalCost += costByRole[role];
    }

    return {
      byRole: costByRole,
      total: totalCost,
      currency: 'USD'
    };
  }
}
```

### 5. **Estimation Templates**

```markdown
## Project Estimation Summary

Project Name: [Project Name]
Date: [Date]
Estimator: [Name]

### Scope Summary
- Deliverables: [List key deliverables]
- Exclusions: [What's NOT included]
- Assumptions: [Key assumptions]

### Effort Estimation
| Phase | Effort (Days) | Resources | Notes |
|-------|---------------|-----------|-------|
| Planning | 5 | 1 PM | Requirement gathering |
| Design | 10 | 2 Architects | UI/UX & Technical |
| Development | 40 | 4 Devs | 5 features total |
| Testing | 15 | 2 QA | Manual + Automation |
| Deployment | 5 | 1 DevOps | Staging & Production |
| **Total** | **75 Days** | **Avg 3.0 FTE** | |

### Schedule Estimate
- Start Date: [Date]
- Duration: 15 weeks
- End Date: [Date]
- Critical Path: Development & Testing phases

### Risk & Contingency
- Risk Buffer: 20% (15 days)
- Optimistic: 12 weeks
- Most Likely: 15 weeks
- Pessimistic: 18 weeks

### Cost Estimate
- Labor: $125,000
- Infrastructure: $15,000
- Tools/Licenses: $5,000
- **Total**: $145,000

### Confidence Level
- Estimation Confidence: 80% (Medium-High)
- Key Uncertainties: Third-party integrations
```

## Best Practices

### ✅ DO
- Use multiple estimation techniques and compare results
- Include contingency buffers (15-25% for new projects)
- Base estimates on historical data from similar projects
- Break down large efforts into smaller components
- Get input from team members doing the actual work
- Document assumptions and exclusions clearly
- Review and adjust estimates regularly
- Track actual vs. estimated metrics for improvement
- Include non-development tasks (planning, testing, deployment)
- Account for learning curve on unfamiliar technologies

### ❌ DON'T
- Estimate without clear scope definition
- Use unrealistic best-case scenarios
- Ignore historical project data
- Estimate under pressure to hit arbitrary targets
- Forget to include non-coding activities
- Use estimates as performance metrics for individuals
- Change estimates mid-project without clear reason
- Estimate without team input
- Ignore risks and contingencies
- Use one technique exclusively

## Estimation Tips

- Add 20-30% buffer for unknown unknowns
- Review estimates weekly and adjust as needed
- Track estimation accuracy to improve future estimates
- Use estimation to identify scope issues early
- Communicate confidence level with stakeholders

Overview

This skill estimates project scope, timeline, and resource needs using multiple proven techniques (bottom-up, top-down, analogous, and three-point/PERT). It produces effort, duration, FTEs, cost ranges, and confidence intervals so planning decisions are grounded in data and documented assumptions. The output is suited for budgeting, scheduling, and stakeholder communication.

How this skill works

The skill accepts a project breakdown or high-level description and applies one or more estimation methods: bottom-up sums task-level effort, analogous compares to historical projects and applies size adjustments, and three-point (PERT) yields weighted estimates with risk-based standard deviation and confidence intervals. It also maps effort to roles to produce FTEs and cost estimates, and returns templates and contingency recommendations for reporting.

When to use it

  • Defining scope and creating an initial schedule
  • Building a detailed project budget and resource plan
  • Converting feature lists into task-level effort estimates
  • Comparing a new project to historical projects for sanity checks
  • Generating confidence ranges and contingency buffers for risk management
  • Updating estimates during execution as scope or team changes

Best practices

  • Use at least two complementary estimation techniques and reconcile differences
  • Break the project into small, testable tasks before bottom-up estimation
  • Document assumptions, exclusions, and confidence levels explicitly
  • Include contingency buffers (typically 15–25%) and call out unknown unknowns
  • Get input from the people who will do the work and review historical data
  • Track actual vs estimated metrics and iterate on estimation models

Example use cases

  • Create a 12–16 week schedule and cost range for a new e-commerce payment integration using analogous + PERT
  • Produce a bottom-up estimate from a work breakdown structure to calculate FTEs and identify the critical path
  • Estimate testing and deployment effort separately and add contingency for third-party integrations
  • Convert high-level scope into a project estimation summary with cost, duration, risks, and confidence level for stakeholder review
  • Generate weekly re-estimates during execution to surface scope creep and reallocate resources

FAQ

How do I choose between bottom-up and analogous estimation?

Use bottom-up when you can decompose work in detail; use analogous for early-stage estimates when you have reliable historical projects to compare. Combine both to validate results.

What buffer should I add for new or uncertain projects?

Typical contingency is 15–25% for known risks; add an extra 5–10% (total 20–30%) for unfamiliar technology or high uncertainty. Document why you chose the buffer.