
Project Estimation
- 562 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
project-estimation is a coding-agent skill that produces realistic timelines, budgets, and resource plans using structured estimation techniques for developers scoping software projects before implementation.
About
project-estimation is a skill from aj-geddes/useful-ai-prompts that guides accurate project scoping through bottom-up, top-down, and analogous estimation methods combined with historical data and expert judgment. It helps agents break work into estimable units, apply structured techniques to minimize surprise overruns, and document assumptions behind timeline and budget outputs. The skill includes quick-start guidance, reference guides, and best practices for when to re-estimate after scope changes. Developers reach for project-estimation when kicking off migrations, greenfield services, or multi-sprint features inside Cursor or Claude Code and need defensible hour, headcount, and milestone tables before writing production code. Output emphasizes realistic ranges and explicit dependencies rather than single-point guesses, making plans suitable for stakeholder review, sprint zero planning, or RFC appendices. Pair with architecture or TDD skills after scope is accepted to translate estimates into implementation phases.
- Combines bottom-up, top-down, analogous, and three-point (PERT) estimation techniques
- Generates contingency plans and risk-adjusted timelines
- Produces stakeholder-ready scope, budget, and resource allocation artifacts
- Supports estimate updates during project execution
- Reduces timeline surprises through structured historical-data and expert-judgment methods
Project Estimation by the numbers
- 562 all-time installs (skills.sh)
- Ranked #709 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill project-estimationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 562 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
How do you estimate project scope and timelines?
Produce realistic timelines, budgets, and resource plans before committing to implementation.
Who is it for?
Tech leads and developers scoping new features or migrations who need structured estimation before committing to delivery dates.
Skip if: Developers mid-implementation who only need task-level time tracking without upfront scope or budget planning.
When should I use this skill?
A developer asks to estimate project scope, timeline, budget, or resource requirements before implementation starts.
What you get
Timeline and budget estimate document with technique breakdown, assumptions list, and resource allocation plan
- Timeline estimate
- Budget and resource plan
- Assumptions document
By the numbers
- Covers 3 estimation techniques: bottom-up, top-down, and analogous methods
Files
Project Estimation
Table of Contents
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
Quick Start
Minimal working example:
# 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
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Three-Point Estimation (PERT) | Three-Point Estimation (PERT) |
| Bottom-Up Estimation | Bottom-Up Estimation |
| Analogous Estimation | Analogous Estimation |
| Resource Estimation | Resource Estimation |
| Estimation Templates | Estimation Templates |
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
Analogous Estimation
Analogous Estimation
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)Bottom-Up Estimation
Bottom-Up Estimation
// 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);
}
}Estimation Templates
Estimation Templates
Resource Estimation
Resource Estimation
// 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",
};
}
}Three-Point Estimation (PERT)
Three-Point Estimation (PERT)
# 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']}")Process: [Name]
Purpose
TODO: Why this process exists.
Roles & Responsibilities
| Role | Responsibility |
|---|---|
| TODO | TODO |
Steps
1. TODO: First step 2. TODO: Second step 3. TODO: Third step
Inputs & Outputs
- Input: TODO
- Output: TODO
Success Criteria
- TODO: Define measurable success criteria
Review Cadence
TODO: How often to review this process.
Related skills
How it compares
Pick project-estimation for upfront scope and timeline planning; use task-breakdown skills when work is already scoped and only needs granular tickets.
FAQ
Which estimation methods does project-estimation use?
project-estimation applies bottom-up, top-down, and analogous estimation techniques to scope timelines, budgets, and resource needs. Agents break work into estimable units, compare against historical data where available, and document assumptions so stakeholders see how ranges we
When should developers invoke project-estimation?
project-estimation fits greenfield features, migrations, or multi-sprint initiatives before coding starts. Developers invoke it when stakeholders need defensible hour, headcount, and milestone tables, or when scope changes require a structured re-estimation pass with updated assu