TechLead
Lesson 10 of 30
5 min read
Project Management

Work Breakdown Structure (WBS)

Learn to create effective Work Breakdown Structures with the 100% rule, decomposition techniques, and WBS dictionaries for IT projects

What Is a Work Breakdown Structure?

A Work Breakdown Structure (WBS) is a hierarchical decomposition of the total scope of work to be carried out by the project team. It breaks down the project into smaller, manageable pieces called work packages. The WBS is not a task list or a schedule — it is a scope definition tool that ensures nothing is missed.

The WBS follows the 100% Rule: the total of the work at the lowest level must roll up to 100% of the work at the higher levels. Nothing more, nothing less. If it is not in the WBS, it is not in the project.

WBS Principles

  • 100% Rule: Every level must account for 100% of the parent level's scope
  • Mutually Exclusive: No overlap between work packages at the same level
  • Outcome-Oriented: Focus on deliverables (nouns), not activities (verbs)
  • 3-4 Levels Deep: Typically 2-4 levels of decomposition for most IT projects
  • 8/80 Rule: Work packages should be 8-80 hours of effort (small enough to estimate, large enough to manage)

Visual WBS Example: E-Commerce Platform

E-Commerce Platform v2.0
1.0 Project Management
2.0 Frontend
3.0 Backend
4.0 Infrastructure
1.1 Planning
1.2 Status Reporting
1.3 Risk Management
1.4 Closing
2.1 Product Catalog UI
2.2 Shopping Cart
2.3 Checkout Flow
2.4 User Account
3.1 Auth Service
3.2 Product API
3.3 Order Service
3.4 Payment Gateway
4.1 CI/CD Pipeline
4.2 Cloud Setup
4.3 Monitoring
4.4 Security

WBS Data Structure

// WBS Data Model
interface WBSNode {
  id: string;          // e.g., "2.3.1"
  name: string;
  level: number;
  type: 'summary' | 'work-package';
  children: WBSNode[];
  workPackage?: WorkPackage;
}

interface WorkPackage {
  description: string;
  estimatedHours: number;
  assignedTeam: string;
  dependencies: string[];
  deliverable: string;
  acceptanceCriteria: string[];
}

// WBS Dictionary entry
interface WBSDictionaryEntry {
  wbsId: string;
  name: string;
  description: string;
  assignedTo: string;
  estimatedEffort: string;
  startDate: Date;
  endDate: Date;
  cost: number;
  deliverables: string[];
  acceptanceCriteria: string[];
  risks: string[];
  dependencies: string[];
}

const ecommerceWBS: WBSNode = {
  id: '1.0',
  name: 'E-Commerce Platform v2.0',
  level: 0,
  type: 'summary',
  children: [
    {
      id: '1.0',
      name: 'Project Management',
      level: 1,
      type: 'summary',
      children: [
        {
          id: '1.1',
          name: 'Project Planning',
          level: 2,
          type: 'work-package',
          children: [],
          workPackage: {
            description: 'Create detailed project plan including WBS, schedule, budget, and risk register',
            estimatedHours: 40,
            assignedTeam: 'PMO',
            dependencies: [],
            deliverable: 'Project Management Plan',
            acceptanceCriteria: ['All baselines approved by sponsor', 'Risk register has 20+ identified risks']
          }
        },
        {
          id: '1.2',
          name: 'Weekly Status Reporting',
          level: 2,
          type: 'work-package',
          children: [],
          workPackage: {
            description: 'Produce weekly status reports for stakeholders throughout the project',
            estimatedHours: 60,
            assignedTeam: 'PMO',
            dependencies: ['1.1'],
            deliverable: 'Weekly status reports (20 reports)',
            acceptanceCriteria: ['Reports sent by Friday EOD', 'RAG status for all workstreams']
          }
        }
      ]
    },
    {
      id: '2.0',
      name: 'Frontend Application',
      level: 1,
      type: 'summary',
      children: [
        {
          id: '2.1',
          name: 'Product Catalog UI',
          level: 2,
          type: 'summary',
          children: [
            {
              id: '2.1.1',
              name: 'Product Listing Page',
              level: 3,
              type: 'work-package',
              children: [],
              workPackage: {
                description: 'Build responsive product listing with filters, sorting, and pagination',
                estimatedHours: 48,
                assignedTeam: 'Frontend',
                dependencies: ['3.2'],
                deliverable: 'Product listing page component',
                acceptanceCriteria: [
                  'Displays products in grid/list view',
                  'Supports filtering by category, price, rating',
                  'Pagination with 20 items per page',
                  'Responsive on mobile, tablet, desktop',
                  'Page loads in under 2 seconds'
                ]
              }
            },
            {
              id: '2.1.2',
              name: 'Product Detail Page',
              level: 3,
              type: 'work-package',
              children: [],
              workPackage: {
                description: 'Build product detail page with images, description, reviews, and add-to-cart',
                estimatedHours: 40,
                assignedTeam: 'Frontend',
                dependencies: ['3.2', '2.1.1'],
                deliverable: 'Product detail page component',
                acceptanceCriteria: [
                  'Image gallery with zoom',
                  'Product description with rich text',
                  'Reviews section with rating summary',
                  'Add to cart with quantity selector',
                  'SEO meta tags populated'
                ]
              }
            }
          ]
        }
      ]
    }
  ]
};

// Calculate total estimated effort from WBS
function calculateTotalEffort(node: WBSNode): number {
  if (node.type === 'work-package' && node.workPackage) {
    return node.workPackage.estimatedHours;
  }
  return node.children.reduce((sum, child) => sum + calculateTotalEffort(child), 0);
}

// Validate 100% rule
function validate100PercentRule(node: WBSNode): boolean {
  if (node.type === 'work-package') return true;
  if (node.children.length === 0) return false; // summary with no children
  return node.children.every(child => validate100PercentRule(child));
}

Decomposition Techniques

How to Decompose Work

  • Top-Down: Start with the full project, break into major deliverables, then decompose each into smaller pieces
  • Bottom-Up: Brainstorm all tasks, then group them into logical categories and build up
  • By Phase: Organize by project lifecycle phases (Design → Build → Test → Deploy)
  • By Feature: Organize by product features (Auth, Catalog, Cart, Checkout)
  • By System: Organize by technical components (Frontend, Backend, Infrastructure, Data)
  • Hybrid: Combine approaches (top level by feature, second level by phase)

Common WBS Mistakes

  • Listing Activities Instead of Deliverables: "Design the database" is an activity; "Database Schema" is a deliverable
  • Going Too Deep: More than 4-5 levels creates overhead without value
  • Forgetting Project Management Work: PM activities (planning, reporting, meetings) are real work that consumes resources
  • Violating the 100% Rule: Missing work packages mean missed scope; extra ones mean scope creep

Continue Learning