Agentic AI Atlasby a5c.ai
OverviewWikiGraphFor AgentsEdgesSearchWorkspace
/
GitHubDocsDiscord
iiRecord
Agentic AI Atlas · Feature-Driven Development (FDD) (Library)
page:library-feature-driven-developmenta5c.ai
Search record views/
Record · tabs

Available views

II.Record viewspp. 1 - 1
overviewarticlejsongraph
II.
Page JSON

page:library-feature-driven-development

Structured · live

Feature-Driven Development (FDD) (Library) json

Inspect the normalized record payload exactly as the atlas UI reads it.

File · wiki/library/feature-driven-development.mdCluster · wiki
Record JSON
{
  "id": "page:library-feature-driven-development",
  "_kind": "Page",
  "_file": "wiki/library/feature-driven-development.md",
  "_cluster": "wiki",
  "attributes": {
    "nodeKind": "Page",
    "title": "Feature-Driven Development (FDD) (Library)",
    "displayName": "Feature-Driven Development (FDD) (Library)",
    "slug": "library/feature-driven-development",
    "articlePath": "wiki/library/feature-driven-development.md",
    "article": "\n# Feature-Driven Development (FDD)\n\n**Creator**: Jeff De Luca and Peter Coad\n**Year**: 1997\n**Category**: Feature-Centric Agile / Progress Tracking\n**Priority**: High\n\n## Overview\n\nFeature-Driven Development (FDD) is an agile methodology that organizes software development around building small, client-valued features in short, predictable cycles. Created during a massive Singapore banking project with 50+ developers, FDD combines the discipline needed for large-scale projects with agile responsiveness.\n\nFDD is particularly well-suited for:\n- **Large teams** (15-500+ developers)\n- **Enterprise projects** requiring rigorous tracking\n- **Client-facing applications** with clearly defined features\n- **Projects requiring high visibility** of progress\n- **Brownfield development** with existing codebases\n\n## Key Principles\n\n### Five-Step Process\n\n1. **Develop Overall Model** - Domain walkthrough and object modeling\n2. **Build Features List** - Feature decomposition in `<action> <result> <object>` format\n3. **Plan by Feature** - Sequencing, Chief Programmer assignment, iteration scheduling\n4. **Design by Feature** - Detailed design with sequence diagrams and design inspection\n5. **Build by Feature** - Implementation, testing, code inspection, integration, promotion\n\n### Core Characteristics\n\n- **Parking Lot Diagrams**: Visual progress tracking with colored feature set boxes\n- **Class Ownership**: Individual developers own classes (reduces merge conflicts)\n- **Feature Teams**: Chief Programmer + 2-5 developers per team\n- **Regular Builds**: 2-week iterations with working builds\n- **Client-Valued Features**: Everything organized around delivering business value\n- **Inspections**: Design and code inspections ensure quality\n\n### Feature Format\n\nFDD features follow a strict template:\n\n```\n<action> <result> <object>\n```\n\n**Examples**:\n- Calculate total of sale\n- Validate password of user\n- Display history of account\n- Generate report of transactions\n- Update status of order\n\nFeatures should be small enough to implement in 2 hours to 2 weeks.\n\n## Usage\n\n### Basic Usage\n\n```javascript\nimport { babysit } from '@a5c-ai/babysitter-sdk';\n\nconst result = await babysit({\n  process: 'methodologies/feature-driven-development',\n  inputs: {\n    projectName: 'E-Commerce Platform',\n    domainDescription: 'Online retail system with shopping cart, payment, and order management',\n    iterationWeeks: 2,\n    teamSize: 12,\n    chiefProgrammers: 3\n  }\n});\n```\n\n### With Predefined Features\n\n```javascript\nconst result = await babysit({\n  process: 'methodologies/feature-driven-development',\n  inputs: {\n    projectName: 'Banking System',\n    domainDescription: 'Core banking with accounts, transactions, and reporting',\n    features: [\n      {\n        id: 'f-001',\n        title: 'Calculate interest of account',\n        action: 'Calculate',\n        result: 'interest',\n        object: 'account',\n        priority: 'high',\n        estimatedDays: 3\n      },\n      {\n        id: 'f-002',\n        title: 'Validate balance of transaction',\n        action: 'Validate',\n        result: 'balance',\n        object: 'transaction',\n        priority: 'high',\n        estimatedDays: 2\n      }\n    ],\n    iterationWeeks: 2\n  }\n});\n```\n\n### Brownfield Project\n\n```javascript\nconst result = await babysit({\n  process: 'methodologies/feature-driven-development',\n  inputs: {\n    projectName: 'Legacy Modernization',\n    domainDescription: 'Modernize order management system',\n    existingCodebase: {\n      structure: 'Monolithic Java application',\n      mainPackages: ['com.company.orders', 'com.company.customers'],\n      database: 'Oracle 11g',\n      frameworks: ['Spring', 'Hibernate']\n    },\n    iterationWeeks: 2,\n    teamSize: 8,\n    chiefProgrammers: 2\n  }\n});\n```\n\n## Input Schema\n\n```typescript\ninterface FDDInputs {\n  // Required\n  projectName: string;              // Project name\n  domainDescription: string;        // High-level business domain description\n\n  // Optional\n  iterationWeeks?: number;          // Default: 2\n  features?: Array<Feature>;        // Pre-defined features (will generate if not provided)\n  existingCodebase?: Object;        // For brownfield projects\n  teamSize?: number;                // Default: 6\n  chiefProgrammers?: number;        // Default: 2\n}\n\ninterface Feature {\n  id: string;\n  title: string;                    // In <action> <result> <object> format\n  action: string;\n  result: string;\n  object: string;\n  priority: 'high' | 'medium' | 'low';\n  estimatedDays: number;\n  dependencies?: string[];          // IDs of dependent features\n}\n```\n\n## Output Schema\n\n```typescript\ninterface FDDOutput {\n  success: boolean;\n  projectName: string;\n\n  // Step 1: Domain Model\n  domainModel: {\n    classes: Array<{\n      name: string;\n      responsibilities: string;\n      attributes: string[];\n      methods: string[];\n      stereotype: string;\n    }>;\n    relationships: Array<{\n      from: string;\n      to: string;\n      type: string;\n      description: string;\n    }>;\n    modelDiagram: string;\n  };\n\n  // Step 2: Features List\n  featuresList: {\n    featureSets: Array<{\n      id: string;\n      name: string;\n      description: string;\n      features: Feature[];\n    }>;\n    totalFeatures: number;\n    parkingLotLayout: string;\n  };\n\n  // Step 3: Plan\n  plan: {\n    iterations: Array<{\n      number: number;\n      features: Feature[];\n      chiefProgrammerAssignments: Array<{\n        chiefProgrammer: string;\n        features: string[];\n        classOwners: string[];\n      }>;\n    }>;\n    classOwnership: Record<string, string>;\n    schedule: {\n      totalWeeks: number;\n      iterationCount: number;\n      startDate: string;\n      estimatedEndDate: string;\n    };\n  };\n\n  // Steps 4 & 5: Iterations\n  iterations: Array<{\n    iterationNumber: number;\n    features: Feature[];\n    results: Array<{\n      chiefProgrammer: string;\n      features: Array<{\n        feature: Feature;\n        design: DesignResult;\n        build: BuildResult;\n      }>;\n    }>;\n    parkingLot: ParkingLotResult;\n    metrics: {\n      totalFeatures: number;\n      completedFeatures: number;\n      completionRate: number;\n    };\n  }>;\n\n  // Final Parking Lot\n  parkingLot: {\n    svgContent: string;\n    completionPercentage: number;\n    featureSetStatus: Array<{\n      name: string;\n      completed: number;\n      total: number;\n      percentage: number;\n      color: string;\n    }>;\n  };\n\n  // Metrics\n  metrics: {\n    totalFeatures: number;\n    completedFeatures: number;\n    completionRate: number;\n    totalIterations: number;\n    averageFeaturesPerIteration: number;\n    featureSetCompletion: Array<{\n      name: string;\n      total: number;\n      completed: number;\n      percentage: number;\n    }>;\n  };\n}\n```\n\n## Process Workflow\n\n### Step 1: Develop Overall Model\n\n**Duration**: 1-3 days for medium projects\n\n- Domain walkthrough with business experts\n- Study existing requirements and documentation\n- Identify major domain objects and entities\n- Define classes with responsibilities, attributes, and methods\n- Map relationships (associations, inheritance, composition)\n- Create UML class diagrams\n- Identify bounded contexts\n\n**Artifacts**:\n- `artifacts/fdd/domain-model.md` - Human-readable model\n- `artifacts/fdd/domain-model.json` - Machine-readable structure\n\n### Step 2: Build Features List\n\n**Duration**: 1-2 days\n\n- Identify major feature sets (functional areas)\n- Decompose into individual features using `<action> <result> <object>` format\n- Prioritize features by business value\n- Identify dependencies\n- Organize into parking lot structure\n- Map features to domain classes\n\n**Artifacts**:\n- `artifacts/fdd/features-list.md` - Organized feature list\n- `artifacts/fdd/features-list.json` - Structured feature data\n\n### Step 3: Plan by Feature\n\n**Duration**: 1 day\n\n- Sequence features based on dependencies\n- Assign features to Chief Programmers\n- Identify class owners (individual ownership)\n- Organize into 2-week iterations\n- Balance workload across teams\n- Generate initial parking lot diagram\n\n**Artifacts**:\n- `artifacts/fdd/feature-plan.md` - Detailed plan\n- `artifacts/fdd/feature-plan.json` - Plan data\n- `artifacts/fdd/parking-lot-initial.svg` - Initial progress visualization\n\n### Step 4: Design by Feature\n\n**Duration**: 1 day or less per feature\n\nFor each feature:\n- Refine domain model\n- Create sequence diagrams\n- Design class methods and interfaces\n- Identify algorithms and patterns\n- Perform design inspection (peer review)\n- Document design decisions\n\n**Artifacts**:\n- `artifacts/fdd/designs/{feature-id}-design.md` - Design documentation per feature\n\n### Step 5: Build by Feature\n\n**Duration**: 2 hours to 2 weeks per feature\n\nFor each feature:\n- Implement code following design\n- Respect class ownership\n- Write unit tests\n- Perform code inspection\n- Run all tests\n- Integrate with main build\n- Promote to build (mark complete)\n\n**Artifacts**:\n- `artifacts/fdd/builds/{feature-id}-build.md` - Build report per feature\n\n### Parking Lot Diagram\n\nGenerated at each iteration showing:\n- Feature sets as colored boxes\n- Completion percentage per set\n- Overall project progress\n\n**Color Coding**:\n- 🟢 **Green** (100%): Complete\n- 🟡 **Yellow** (50-99%): In progress (majority done)\n- 🔴 **Red** (1-49%): In progress (early stage)\n- ⚪ **Gray** (0%): Not started\n\n## Examples\n\nSee the `examples/` directory for:\n- `e-commerce.json` - E-commerce platform with shopping cart\n- `banking.json` - Core banking system\n- `healthcare.json` - Patient management system\n- `brownfield.json` - Legacy modernization project\n\n## Integration with Other Methodologies\n\n### FDD + Spec-Kit\n\nUse Spec-Kit's constitution and specification phases, then apply FDD for implementation:\n\n```javascript\n// 1. Run Spec-Kit for requirements\nconst specResult = await babysit({\n  process: 'methodologies/spec-driven-development',\n  inputs: { projectName: 'Banking System', /* ... */ }\n});\n\n// 2. Use FDD for feature-driven implementation\nconst fddResult = await babysit({\n  process: 'methodologies/feature-driven-development',\n  inputs: {\n    projectName: 'Banking System',\n    domainDescription: specResult.specification.summary,\n    features: convertUserStoriesToFeatures(specResult.specification.userStories)\n  }\n});\n```\n\n### FDD + DDD\n\nUse Domain-Driven Design for \"Develop Overall Model\" phase:\n\n```javascript\n// Deep domain modeling with DDD, then FDD for delivery\nconst dddModel = await babysit({\n  process: 'methodologies/domain-driven-design',\n  inputs: { /* ... */ }\n});\n\nconst fddResult = await babysit({\n  process: 'methodologies/feature-driven-development',\n  inputs: {\n    projectName: 'Complex Domain',\n    domainDescription: dddModel.description,\n    // Use DDD model as input\n  }\n});\n```\n\n### FDD + Agile\n\nFDD naturally integrates with Scrum:\n- FDD iterations = Sprints\n- Chief Programmers = Senior developers\n- Feature sets = Epics\n- Features = User stories\n\n## Best Practices\n\n### 1. Keep Features Small\n\nFeatures should be completable in 2 hours to 2 weeks. If larger, decompose further.\n\n**Good**:\n- Calculate total of sale\n- Validate email of user\n\n**Too Large**:\n- Build complete checkout system\n- Implement entire authentication\n\n### 2. Respect Class Ownership\n\nEach class should have a single owner (developer). This:\n- Reduces merge conflicts\n- Improves code quality (single responsible person)\n- Enables expertise development\n\n### 3. Regular Builds\n\nIntegrate and build every day or even more frequently. This:\n- Catches integration issues early\n- Maintains working software\n- Enables continuous progress tracking\n\n### 4. Use Parking Lot for Communication\n\nThe parking lot diagram is your primary communication tool:\n- Share with stakeholders daily\n- Use in stand-ups\n- Display prominently\n- Update in real-time\n\n### 5. Chief Programmer Role\n\nChief Programmers should:\n- Be senior developers with domain expertise\n- Lead design by feature sessions\n- Conduct code inspections\n- Coordinate with class owners\n- Report progress\n\n### 6. Inspections Are Critical\n\nBoth design and code inspections:\n- Catch defects early\n- Share knowledge across team\n- Maintain code quality\n- Should be brief (30-60 minutes)\n\n## Parking Lot Diagram\n\nThe parking lot is FDD's signature artifact:\n\n```\n┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐\n│  User Mgmt      │  │  Shopping Cart  │  │  Payment        │\n│                 │  │                 │  │                 │\n│      85%        │  │      45%        │  │      100%       │\n│                 │  │                 │  │                 │\n│  17/20 features │  │  9/20 features  │  │  15/15 features │\n└─────────────────┘  └─────────────────┘  └─────────────────┘\n    🟡 Yellow           🔴 Red               🟢 Green\n\n┌─────────────────┐  ┌─────────────────┐\n│  Reporting      │  │  Admin Panel    │\n│                 │  │                 │\n│      0%         │  │      12%        │\n│                 │  │                 │\n│  0/25 features  │  │  3/25 features  │\n└─────────────────┘  └─────────────────┘\n    ⚪ Gray              🔴 Red\n```\n\n## Comparison with Other Methodologies\n\n| Aspect | FDD | Scrum | XP | Waterfall |\n|--------|-----|-------|-----|-----------|\n| **Team Size** | 15-500+ | 3-9 | 2-12 | Any |\n| **Iteration** | 2 weeks | 1-4 weeks | 1-2 weeks | Months |\n| **Progress Tracking** | Parking Lot | Burndown | Story Board | Gantt |\n| **Planning** | Feature-based | Sprint-based | Story-based | Phase-based |\n| **Code Ownership** | Individual | Collective | Collective | Individual |\n| **Documentation** | Moderate | Light | Minimal | Heavy |\n| **Best For** | Large teams | Small teams | Technical excellence | Fixed requirements |\n\n## References\n\n### Official Resources\n- [Feature Driven Development Official Site](http://www.featuredrivendevelopment.com/)\n- [FDD Parking Lot Diagrams](http://www.featuredrivendevelopment.com/node/1037)\n- [FDD Processes](http://www.featuredrivendevelopment.com/node/574)\n\n### Articles & Guides\n- [Monday.com FDD Guide 2026](https://monday.com/blog/rnd/feature-driven-development-fdd/)\n- [Wikipedia: Feature-Driven Development](https://en.wikipedia.org/wiki/Feature-driven_development)\n- [A Practical Guide to FDD](http://www.nebulon.com/fdd/)\n\n### Books\n- **\"Java Modeling in Color with UML\"** by Peter Coad et al. - FDD foundations\n- **\"A Practical Guide to Feature-Driven Development\"** by Stephen Palmer and John Felsing\n\n### Academic Papers\n- De Luca, J. & Coad, P. (1999). \"Java Modeling in Color with UML\"\n- Palmer, S. R., & Felsing, J. M. (2002). \"A Practical Guide to Feature-Driven Development\"\n\n## Troubleshooting\n\n### Features Too Large\n\n**Problem**: Features taking weeks to complete\n\n**Solution**:\n- Decompose into smaller features\n- Aim for 2-hour to 2-week range\n- Use sub-features if needed\n- Example: \"Process payment\" → \"Validate payment info\", \"Charge credit card\", \"Generate receipt\"\n\n### Parking Lot Not Updating\n\n**Problem**: Parking lot shows no progress\n\n**Solution**:\n- Ensure features are marked \"promoted\" after build\n- Check integration process\n- Verify parking lot task is running\n- Review feature completion criteria\n\n### Merge Conflicts\n\n**Problem**: Constant merge conflicts\n\n**Solution**:\n- Review class ownership assignments\n- Ensure one owner per class\n- Consider refactoring to reduce class coupling\n- Use feature branches with frequent integration\n\n### Design Inspections Slow\n\n**Problem**: Design reviews taking too long\n\n**Solution**:\n- Limit to 30-60 minutes\n- Focus on critical design decisions\n- Use checklists\n- Include only key team members\n\n## License\n\nThis methodology implementation is part of the Babysitter SDK and follows the same license terms.\n\n## Contributing\n\nTo improve this FDD implementation:\n1. Review the backlog in `methodologies/backlog.md`\n2. Propose enhancements via issues\n3. Submit pull requests with improvements\n4. Share real-world usage experiences\n\n---\n\n**Implementation Status**: ✅ Implemented\n**Last Updated**: 2026-01-23\n**Version**: 1.0.0\n",
    "documents": [
      "specialization:feature-driven-development"
    ]
  },
  "outgoingEdges": [
    {
      "from": "page:library-feature-driven-development",
      "to": "specialization:feature-driven-development",
      "kind": "documents"
    }
  ],
  "incomingEdges": [
    {
      "from": "page:index",
      "to": "page:library-feature-driven-development",
      "kind": "contains_page"
    }
  ]
}

Shortcuts

Back to overview
Open graph tab