project-estimation

Create detailed software project effort estimates with task breakdowns by engineer role. When users ask for project estimates, effort breakdown, man-hours, resource planning, or project costing. Analyzes project descriptions and requirements documents to produce structured estimates. Can push backlog to Jira.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "project-estimation" with this command: npx skills add szkocot/skills/szkocot-skills-project-estimation

Project Estimation Guide

Overview

This skill helps create accurate software development estimates by systematically breaking down projects into estimable tasks and assigning effort by role. Output can be delivered as Excel spreadsheets using the xlsx skill, and tasks can be pushed directly to Jira to create a project backlog.

Estimation Workflow

Step 1: Clarify Project Scope

ALWAYS ask the user about project maturity level before estimating:

LevelDescriptionMultiplier
PoCProof of Concept - minimal viable functionality, no production concerns0.3-0.5x
MVPMinimum Viable Product - core features, basic quality, limited scale0.6-0.8x
ProductionFull production - complete features, security, scalability, monitoring1.0x

Key questions to ask:

  • Is this PoC, MVP, or production-ready system?
  • What are the non-functional requirements (users, load, compliance)?
  • Are there existing systems to integrate with?
  • What is the team's familiarity with the tech stack?
  • Are there hard deadlines or constraints?

Step 2: Hierarchical Task Breakdown

Break down from high-level to lowest estimable units (1-3 days max per task).

Level 0: Project
└── Level 1: Epic/Module
    └── Level 2: Feature
        └── Level 3: Task
            └── Level 4: Subtask (if needed)

Example breakdown:

E-commerce Platform
├── User Management (Epic)
│   ├── Registration (Feature)
│   │   ├── Registration form UI (Task) - FE: 1.5d
│   │   ├── Email verification API (Task) - BE: 1d
│   │   ├── Email templates (Task) - BE: 0.5d
│   │   └── Registration tests (Task) - QA: 1d
│   ├── Authentication (Feature)
│   │   ├── Login/logout UI (Task) - FE: 1d
│   │   ├── JWT auth endpoints (Task) - BE: 1.5d
│   │   ├── Password reset flow (Task) - BE: 1.5d, FE: 1d
│   │   └── Auth tests (Task) - QA: 1.5d
│   └── User Profile (Feature)
│       └── ...
├── Product Catalog (Epic)
│   └── ...
└── Checkout (Epic)
    └── ...

Step 3: Assign Effort by Role

Standard roles and responsibilities:

RoleCodeResponsibilities
Backend EngineerBEAPIs, business logic, database, integrations
Frontend EngineerFEUI components, state management, UX implementation
AI/ML EngineerAIModel development, training, inference pipelines
QA EngineerQATest planning, automation, manual testing
DevOps EngineerDevOpsInfrastructure, CI/CD, monitoring, deployment
Project ManagerPMCoordination, documentation, stakeholder communication
DesignerDesignUI/UX design, prototypes, design system
Tech LeadTLArchitecture, code review, technical decisions

Step 4: Apply Risk Factors

Risk FactorMultiplier
New technology for team1.3-1.5x
Unclear requirements1.2-1.5x
External API dependencies1.2-1.4x
Legacy system integration1.3-1.6x
Tight deadline1.2-1.4x
Distributed team1.1-1.3x

Step 5: Add Contingency Buffer

Confidence LevelBuffer
High (clear scope, known tech)10-15%
Medium (some unknowns)20-30%
Low (many unknowns)30-50%

Baseline Estimates by Component

Frontend Components

ComponentFE EffortNotes
Simple page0.5-1dStatic content
Form (simple)1-2d3-5 fields, basic validation
Form (complex)3-5dMulti-step, conditional logic
Data table2-4dSort, filter, pagination
Dashboard3-5dMultiple widgets
Admin panel5-10dCRUD operations, filters

Backend Components

ComponentBE EffortNotes
CRUD endpoint0.5-1dStandard operations
Complex endpoint1-3dBusiness logic, validation
Third-party integration2-5dPer API
Background job1-3dWith retry logic
Auth system3-5dJWT, sessions, permissions

AI/ML Components

ComponentAI EffortNotes
LLM integration2-4dPrompt engineering, API setup
RAG pipeline5-10dEmbeddings, vector DB, retrieval
Custom model training10-20dData prep, training, evaluation
ML inference API3-5dModel serving, optimization

QA Effort Guidelines

CoverageQA Multiplier
Minimal (smoke tests)0.1x of dev
Standard (core flows)0.2-0.3x of dev
Comprehensive0.4-0.5x of dev
Critical system0.5-0.7x of dev

PM/Coordination Overhead

Project SizePM Overhead
Small (<1 month)10-15%
Medium (1-3 months)15-20%
Large (3+ months)20-25%

Output Format

Excel Spreadsheet (Recommended)

Use the xlsx skill to create estimates in Excel format with:

Sheet 1: Summary

RoleDaysRateCost
BE45$X$Y
FE30$X$Y
QA15$X$Y
Total90$Z

Sheet 2: Detailed Breakdown

EpicFeatureTaskBEFEAIQADevOpsPMTotal
User MgmtRegistrationForm UI-1.5----1.5
User MgmtRegistrationAPI1-----1
User MgmtRegistrationTests---1--1

Sheet 3: Assumptions & Risks

  • Document all assumptions made
  • List identified risks with mitigation strategies
  • Note excluded items

Markdown Table (Quick Estimates)

## Estimate Summary

| Phase | BE | FE | QA | DevOps | PM | Total |
|-------|----|----|----|----|-----|-------|
| Phase 1 | 20d | 15d | 8d | 5d | 5d | 53d |
| Phase 2 | 15d | 10d | 6d | 3d | 4d | 38d |
| Buffer (20%) | | | | | | 18d |
| **Total** | **35d** | **25d** | **14d** | **8d** | **9d** | **109d** |

Common Pitfalls to Avoid

Underestimation causes:

  • Forgetting testing, code review, deployment time
  • Not accounting for meetings (add 10-20%)
  • Missing error handling and edge cases
  • Ignoring documentation needs
  • Assuming ideal conditions

Items often forgotten:

  • Authentication and authorization
  • Error handling and logging
  • Data migration
  • Environment setup
  • API documentation
  • Security hardening
  • Performance optimization
  • Monitoring and alerting

Quick Reference

T-Shirt to Days Conversion

SizePoCMVPProduction
XS0.25d0.5d1d
S0.5d1d2d
M1d2-3d4-5d
L2d4-5d8-10d
XL3-5d8-10d15-20d

Story Points to Days (per developer)

PointsDays
10.25-0.5
20.5-1
31-2
52-3
83-5
135-8

Jira Integration

Push estimated tasks directly to Jira to create a project backlog.

Prerequisites

Before pushing to Jira, gather from the user:

  1. Jira instance URL (e.g., https://company.atlassian.net)
  2. Project key (e.g., PROJ)
  3. API token - user can generate at https://id.atlassian.com/manage-profile/security/api-tokens
  4. Email associated with the Jira account

Task to Jira Mapping

Estimation LevelJira Issue Type
EpicEpic
FeatureStory
TaskTask or Sub-task
SubtaskSub-task

Field Mapping

Estimate FieldJira Field
Epic nameEpic Name (custom field)
Feature/Task nameSummary
DescriptionDescription
Total effort (days)Original Estimate (convert to hours: days × 8)
Role assignmentsLabels or custom field
Story pointsStory Points (if using points)

Push to Jira Workflow

Step 1: Confirm with user

Before pushing to Jira, confirm:
- Jira URL: [user provides]
- Project key: [user provides]
- Create Epics? (yes/no)
- Estimate format: (days/hours/story points)

Step 2: Create issues via API

Use bash with curl to create issues. First, set up authentication:

# Store credentials (ask user for these values)
JIRA_URL="https://company.atlassian.net"
JIRA_EMAIL="user@company.com"
JIRA_TOKEN="your-api-token"
PROJECT_KEY="PROJ"

Create an Epic:

curl -X POST "$JIRA_URL/rest/api/3/issue" \
  -H "Content-Type: application/json" \
  -u "$JIRA_EMAIL:$JIRA_TOKEN" \
  -d '{
    "fields": {
      "project": {"key": "'"$PROJECT_KEY"'"},
      "summary": "User Management",
      "issuetype": {"name": "Epic"},
      "description": {
        "type": "doc",
        "version": 1,
        "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Epic for user management features"}]}]
      }
    }
  }'

Create a Story linked to Epic:

curl -X POST "$JIRA_URL/rest/api/3/issue" \
  -H "Content-Type: application/json" \
  -u "$JIRA_EMAIL:$JIRA_TOKEN" \
  -d '{
    "fields": {
      "project": {"key": "'"$PROJECT_KEY"'"},
      "summary": "User Registration",
      "issuetype": {"name": "Story"},
      "parent": {"key": "PROJ-1"},
      "description": {
        "type": "doc",
        "version": 1,
        "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement user registration flow"}]}]
      },
      "timetracking": {
        "originalEstimate": "24h"
      },
      "labels": ["BE", "FE", "QA"]
    }
  }'

Create a Task/Sub-task:

curl -X POST "$JIRA_URL/rest/api/3/issue" \
  -H "Content-Type: application/json" \
  -u "$JIRA_EMAIL:$JIRA_TOKEN" \
  -d '{
    "fields": {
      "project": {"key": "'"$PROJECT_KEY"'"},
      "summary": "Registration form UI",
      "issuetype": {"name": "Sub-task"},
      "parent": {"key": "PROJ-2"},
      "timetracking": {
        "originalEstimate": "12h"
      },
      "labels": ["FE"]
    }
  }'

Batch Creation Script

For large estimates, generate a bash script that creates all issues:

#!/bin/bash
# Auto-generated Jira import script

JIRA_URL="https://company.atlassian.net"
JIRA_EMAIL="$JIRA_EMAIL"
JIRA_TOKEN="$JIRA_TOKEN"
PROJECT_KEY="PROJ"

create_issue() {
  local json="$1"
  response=$(curl -s -X POST "$JIRA_URL/rest/api/3/issue" \
    -H "Content-Type: application/json" \
    -u "$JIRA_EMAIL:$JIRA_TOKEN" \
    -d "$json")
  echo "$response" | grep -o '"key":"[^"]*"' | cut -d'"' -f4
}

# Create Epics first, capture keys
echo "Creating Epics..."
EPIC_USER_MGMT=$(create_issue '{"fields":{"project":{"key":"'"$PROJECT_KEY"'"},"summary":"User Management","issuetype":{"name":"Epic"}}}')
echo "Created: $EPIC_USER_MGMT"

# Create Stories under Epics
echo "Creating Stories..."
STORY_REGISTRATION=$(create_issue '{"fields":{"project":{"key":"'"$PROJECT_KEY"'"},"summary":"User Registration","issuetype":{"name":"Story"},"parent":{"key":"'"$EPIC_USER_MGMT"'"},"timetracking":{"originalEstimate":"24h"}}}')
echo "Created: $STORY_REGISTRATION"

# Create Sub-tasks under Stories
echo "Creating Tasks..."
create_issue '{"fields":{"project":{"key":"'"$PROJECT_KEY"'"},"summary":"Registration form UI","issuetype":{"name":"Sub-task"},"parent":{"key":"'"$STORY_REGISTRATION"'"},"timetracking":{"originalEstimate":"12h"},"labels":["FE"]}}'

echo "Done!"

CSV Export for Jira Import

Alternatively, create a CSV file for Jira's CSV import feature:

Summary,Issue Type,Parent,Description,Original Estimate,Labels
User Management,Epic,,"Epic for user management features",,
User Registration,Story,User Management,"Implement user registration",24h,"BE,FE,QA"
Registration form UI,Sub-task,User Registration,"Build the registration form",12h,FE
Email verification API,Sub-task,User Registration,"API endpoint for email verification",8h,BE
Registration tests,Sub-task,User Registration,"Write tests for registration",8h,QA

CSV Import Steps:

  1. Go to Jira > Project Settings > External System Import
  2. Select "CSV"
  3. Upload the CSV file
  4. Map columns to Jira fields
  5. Review and import

Estimate to Hours Conversion

When pushing to Jira, convert days to hours:

DaysHours (8h/day)
0.252h
0.54h
18h
1.512h
216h
324h
540h

Jira Custom Fields

Common custom fields that may need configuration:

FieldAPI Field NameNotes
Story Pointscustomfield_10016ID varies by instance
Epic Linkcustomfield_10014For older Jira versions
Sprintcustomfield_10020ID varies by instance

To find custom field IDs for a project:

curl -s "$JIRA_URL/rest/api/3/field" \
  -u "$JIRA_EMAIL:$JIRA_TOKEN" | jq '.[] | {name, id}'

Error Handling

Common issues when pushing to Jira:

ErrorCauseSolution
401 UnauthorizedInvalid credentialsVerify email and API token
400 Bad RequestInvalid field valuesCheck issue type names, project key
403 ForbiddenInsufficient permissionsUser needs project write access
Field not foundCustom field ID wrongLook up correct field ID

Jira Cloud vs Server

The API examples above use Jira Cloud (Atlassian Document Format for descriptions). For Jira Server/Data Center:

# Jira Server uses plain text descriptions
curl -X POST "$JIRA_URL/rest/api/2/issue" \
  -H "Content-Type: application/json" \
  -u "$JIRA_EMAIL:$JIRA_TOKEN" \
  -d '{
    "fields": {
      "project": {"key": "'"$PROJECT_KEY"'"},
      "summary": "Task name",
      "issuetype": {"name": "Task"},
      "description": "Plain text description here"
    }
  }'

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

zigbee2mqtt

No summary provided by upstream source.

Repository SourceNeeds Review
General

nodered

No summary provided by upstream source.

Repository SourceNeeds Review
General

nano-banana-2

Nano Banana 2 - Gemini 3.1 Flash Image Preview

Repository Source
41.9K153inferen-sh
General

qwen-image-2

Qwen-Image - Alibaba Image Generation

Repository Source
41.7K153inferen-sh