II.
Page JSON
Structured · livepage:library-shape-up
Shape Up (Library) json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "page:library-shape-up",
"_kind": "Page",
"_file": "wiki/library/shape-up.md",
"_cluster": "wiki",
"attributes": {
"nodeKind": "Page",
"title": "Shape Up (Library)",
"displayName": "Shape Up (Library)",
"slug": "library/shape-up",
"articlePath": "wiki/library/shape-up.md",
"article": "\n# Shape Up\n\n## Overview\n\nShape Up is Basecamp's methodology for building products through fixed-time, variable-scope cycles. Created by Ryan Singer and popularized through the free online book, Shape Up emphasizes appetite-driven development, thoughtful upfront shaping, strategic betting, and autonomous team execution with visual progress tracking.\n\n**Creator**: Ryan Singer / Basecamp\n**Year**: 2019\n**Book**: [Shape Up: Stop Running in Circles and Ship Work that Matters](https://basecamp.com/shapeup) (free online)\n\n### Core Philosophy\n\n- **Fixed time, variable scope**: 6-week cycles (or 2-week small batches) with no extensions\n- **Appetite not estimates**: Define how much time you want to spend, not how long it will take\n- **Shaping before betting**: Abstract design work happens before committing resources\n- **Betting table**: Senior team explicitly decides what to build\n- **Autonomous teams**: Small teams (designer + 1-2 programmers) work independently\n- **Hill charts**: Visual progress tracking showing figuring-out vs. executing\n- **Circuit breaker**: If work isn't done in 6 weeks, it doesn't get extended automatically\n- **No backlogs**: Work that doesn't get chosen is discarded\n\n## Key Principles\n\n### 1. Appetite-Driven Development\nInstead of asking \"how long will this take?\", ask \"how much time do we want to spend on this?\"\n- **Small batch**: 1-2 weeks (one designer + one programmer)\n- **Big batch**: 6 weeks (one designer + two programmers)\n\n### 2. Shaping\nAbstract design work at the right level of detail:\n- **Breadboarding**: Flow and affordances without visual design\n- **Fat marker sketches**: Rough UI concepts that leave room for creativity\n- **Rabbit holes**: Explicitly call out risks and time traps\n- **No-gos**: Things we explicitly won't do\n\n### 3. Betting\nEvery 6 weeks, senior team meets at the \"betting table\":\n- Reviews shaped pitches\n- Decides what gets resources\n- No backlog maintenance\n- Work either gets bet on or discarded\n\n### 4. Building\nAutonomous teams with freedom to solve problems:\n- Get oriented and understand the terrain\n- Map work into scopes (integrated slices)\n- Track progress on hill charts\n- Integrate QA throughout\n- Ship or stop at end of cycle (circuit breaker)\n\n### 5. Cool-Down\n2-week breaks between cycles:\n- Fix bugs\n- Pay down technical debt\n- Explore new ideas\n- Rest and recharge\n- No structured project work\n\n## Methodology\n\n### Phase 1: Shaping (Pre-Cycle)\n\nSenior product people shape work before it goes to betting:\n\n1. **Set Boundaries** - Define appetite and constraints\n2. **Rough Out Elements** - Create breadboard showing places, affordances, connections\n3. **Address Risks** - Identify rabbit holes and define no-gos\n4. **Write Pitch** - Formal document for betting table\n\n**Time**: Days to weeks of deliberate shaping work\n**Output**: Pitch document with problem, solution, appetite, risks\n\n### Phase 2: Betting (Between Cycles)\n\nSenior team decides what to build:\n\n1. **Review Pitches** - Evaluate shaped work\n2. **Assess Capacity** - Check team availability\n3. **Make Bets** - Explicitly commit resources\n4. **Create Cycle Plan** - Set up team and logistics\n\n**Time**: 1-2 hour meeting every 6 weeks\n**Output**: Bets placed, teams assigned, cycle started\n\n### Phase 3: Building (6-Week Cycle)\n\nAutonomous team builds the shaped work:\n\n1. **Get Oriented** (Week 1) - Understand the terrain, explore codebase\n2. **Map Scopes** (Week 1-2) - Break work into integrated slices\n3. **Execute** (Week 1-6) - Build scopes, move them on hill chart\n4. **Track Progress** - Weekly check-ins with hill charts\n5. **Integrate QA** (Throughout) - Test and validate continuously\n6. **Circuit Breaker** (Week 6) - Ship, cut scope, or stop\n\n**Time**: 6 weeks (or 2 weeks for small batch)\n**Output**: Shipped feature or clear decision to stop\n\n### Phase 4: Cool-Down (2 Weeks)\n\nTeam breaks between cycles:\n\n1. **Fix Bugs** - Address issues from recent cycle\n2. **Tech Debt** - Refactor and clean up\n3. **Explore** - Investigate new ideas\n4. **Rest** - Recharge for next cycle\n\n**Time**: 2 weeks\n**Output**: Cleaned up codebase, explored ideas, rested team\n\n## Process Workflow\n\n```\nShaping (ongoing)\n → Define appetite\n → Breadboard solution\n → Identify rabbit holes\n → Fat marker sketches\n → Write pitch\n ↓\n[Review Pitch]\n ↓\nBetting Table (every 6 weeks)\n → Evaluate pitches\n → Assess capacity\n → Place bets\n → Assign teams\n ↓\n[Bet Placed]\n ↓\nBuilding (6 weeks)\n → Get oriented (Week 1)\n → Map scopes (Week 1-2)\n → Execute cycle (Week 1-6)\n → Track hill charts (Weekly)\n → QA integration (Throughout)\n → Circuit breaker (Week 6)\n ↓\n[Ship or Stop]\n ↓\nCool-Down (2 weeks)\n → Fix bugs\n → Tech debt\n → Explore ideas\n → Retrospective\n```\n\n## Usage\n\n### Full Cycle\n\nRun complete Shape Up cycle from shaping through cool-down:\n\n```javascript\nimport { runProcess } from '@a5c-ai/babysitter-sdk';\n\nconst result = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Add ability to bulk edit customer records',\n appetite: 'big-batch',\n cycleWeeks: 6,\n teamSize: 'one-designer-two-programmers',\n phase: 'full-cycle',\n includeCoolDown: true\n});\n```\n\n### Shaping Only\n\nShape work to create a pitch:\n\n```javascript\nconst shapingResult = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Add ability to bulk edit customer records',\n appetite: 'big-batch',\n phase: 'shaping'\n});\n\n// Use shapingResult.pitch for betting table\n```\n\n### Betting Only\n\nEvaluate an existing pitch:\n\n```javascript\nconst bettingResult = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Add ability to bulk edit customer records',\n existingPitch: previousPitch,\n competingPitches: [pitch1, pitch2, pitch3],\n teamCapacity: {\n availableTeams: 2,\n teamComposition: 'one-designer-two-programmers',\n currentCommitments: ['Cycle 5 project']\n },\n phase: 'betting'\n});\n```\n\n### Building Only\n\nExecute a cycle with an existing pitch:\n\n```javascript\nconst buildingResult = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Add ability to bulk edit customer records',\n existingPitch: approvedPitch,\n cycleWeeks: 6,\n teamSize: 'one-designer-two-programmers',\n phase: 'building'\n});\n```\n\n### Small Batch (2 Weeks)\n\n```javascript\nconst smallBatch = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Fix PDF export formatting issues',\n appetite: 'small-batch',\n cycleWeeks: 2,\n teamSize: 'one-designer-one-programmer',\n phase: 'full-cycle'\n});\n```\n\n## Input Parameters\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `projectName` | string | Yes | - | Project name |\n| `workDescription` | string | Yes | - | Description of work to shape/build |\n| `appetite` | string | No | `'big-batch'` | Time appetite: `'small-batch'` (1-2 weeks) or `'big-batch'` (6 weeks) |\n| `cycleWeeks` | number | No | `6` | Cycle length in weeks |\n| `teamSize` | string | No | `'one-designer-two-programmers'` | Team composition |\n| `phase` | string | No | `'full-cycle'` | Which phase to run: `'shaping'`, `'betting'`, `'building'`, `'cool-down'`, `'full-cycle'` |\n| `existingPitch` | object | No | `null` | Existing pitch document (for betting/building) |\n| `competingPitches` | array | No | `[]` | Other pitches competing for resources |\n| `teamCapacity` | object | No | `null` | Team capacity and availability |\n| `includeCoolDown` | boolean | No | `true` | Include cool-down phase |\n| `cycleStartDate` | string | No | Current date | ISO date string for cycle start |\n\n## Output Structure\n\n```javascript\n{\n success: boolean,\n projectName: string,\n workDescription: string,\n appetite: string,\n phase: string,\n\n // Shaping outputs\n appetiteDefinition: {\n appetite: string,\n timeEstimate: string,\n problemStatement: string,\n boundaries: { mustHave, niceToHave, notNow },\n inScope: [],\n outOfScope: [],\n successCriteria: []\n },\n breadboard: {\n places: [{ id, name, description, type }],\n affordances: [{ id, name, placeId, type, description }],\n connections: [{ from, to, affordance, description }],\n flow: { entryPoint, mainPath, alternatePaths, exitPoints }\n },\n rabbitHoles: {\n rabbitHoles: [{ id, area, description, severity, deRiskingStrategy }],\n noGos: [{ id, feature, rationale }],\n risks: [{ id, category, description, impact, likelihood }],\n mitigation: [{ riskId, strategy, owner }]\n },\n sketches: {\n sketches: [{ id, placeId, title, description, elements }],\n keyElements: [{ element, purpose, behavior }],\n annotations: []\n },\n pitch: {\n pitchMarkdown: string,\n summary: string,\n problem: { statement, whyNow, impact },\n solution: { overview, approach, keyElements },\n appetite: { type, duration, teamSize },\n rabbitHoles: [],\n noGos: []\n },\n\n // Betting outputs\n bettingEvaluation: {\n recommendation: 'bet' | 'pass' | 'needs-more-shaping',\n score: number,\n rationale: string,\n keyFactors: [{ factor, assessment, weight }],\n strengths: [],\n concerns: [],\n capacityAssessment: { teamAvailable, timing, conflicts }\n },\n cyclePlan: {\n timeline: { startDate, endDate, weeks, checkInDays },\n team: { designer, programmers, qa, size },\n milestones: [{ week, description, deliverable }],\n successCriteria: []\n },\n\n // Building outputs\n orientation: {\n orientationSummary: string,\n startingPoints: [],\n codebaseAreas: [{ area, familiarity, complexity }],\n unknowns: [],\n initialTasks: [{ task, type, assignee }]\n },\n scopeMap: {\n scopes: [{ id, name, description, priority, complexity, estimatedWeeks }],\n dependencies: [{ scopeId, dependsOn, type }],\n scopeMap: { totalScopes, mustHaveScopes, criticalPath }\n },\n cycleExecution: {\n executionSummary: string,\n scopeProgress: [{ scopeId, status, weekCompleted, surprises }],\n challenges: [{ scopeId, challenge, resolution, impactWeeks }]\n },\n hillChartHistory: [{\n week: number,\n scopePositions: [{ scopeId, position, phase, movement, notes }],\n uphill: [],\n downhill: [],\n completed: [],\n stuckScopes: [{ scopeId, reason, intervention }],\n riskLevel: string\n }],\n qaAndIntegration: {\n testResults: [{ scopeId, testsPassed, testsFailed, coverage }],\n bugs: [{ id, severity, scopeId, description, mustFixForShip }],\n passed: boolean,\n shipReadiness: { recommendation, rationale, blockingIssues }\n },\n circuitBreaker: {\n status: 'complete' | 'incomplete' | 'partial',\n decision: 'ship' | 'cut-scope-and-ship' | 'stop',\n completed: [],\n incomplete: [],\n rationale: string,\n learnings: [{ learning, category }],\n appetiteAssessment: { wasAccurate, shouldHaveBeen, notes }\n },\n\n // Cool-down outputs\n coolDown: {\n duration: string,\n activities: [{ type, description, assignee, completed }],\n retrospective: { wentWell, wentPoorly, learnings, actionItems },\n explorations: [{ idea, findings, potentialPitch }]\n },\n\n // Summary\n summary: {\n phase: string,\n appetite: string,\n cycleWeeks: number,\n pitched: boolean,\n betPlaced: boolean,\n scopeCount: number,\n completionRate: string,\n shipped: boolean,\n coolDownIncluded: boolean\n },\n\n artifacts: {\n shaping: 'artifacts/shape-up/shaping/',\n betting: 'artifacts/shape-up/betting/',\n building: 'artifacts/shape-up/building/',\n coolDown: 'artifacts/shape-up/cool-down/'\n }\n}\n```\n\n## Examples\n\n### Example 1: Customer Bulk Edit Feature\n\n**Context**: Established SaaS product needs ability to edit multiple customer records at once.\n\n```javascript\nconst result = await runProcess('methodologies/shape-up', {\n projectName: 'Acme CRM',\n workDescription: 'Add ability to select multiple customers and edit common fields in bulk',\n appetite: 'big-batch',\n cycleWeeks: 6,\n teamSize: 'one-designer-two-programmers',\n phase: 'full-cycle'\n});\n```\n\n**Shaping Output**:\n- **Problem**: Sales team wastes hours editing customers one-by-one when updating territories\n- **Appetite**: 6 weeks (big batch)\n- **Solution**: Selection UI + bulk edit dialog\n- **Rabbit Holes**: Complex field validation, undo/redo, conflict resolution\n- **No-Gos**: Bulk create, advanced filtering, scheduled edits\n\n**Betting Output**:\n- **Score**: 85/100\n- **Decision**: Bet placed\n- **Strengths**: Clear value, well-shaped, fits appetite\n- **Concerns**: Integration with permissions system\n\n**Building Output**:\n- **Scopes**:\n 1. Selection mechanism (Week 1-2)\n 2. Bulk edit dialog (Week 2-3)\n 3. Field validation (Week 3-4)\n 4. Permission checks (Week 4-5)\n 5. Error handling (Week 5-6)\n- **Completion**: 5/5 scopes shipped\n- **Circuit Breaker**: Ship\n\n### Example 2: Mobile App Notifications\n\n**Context**: New mobile app needs push notification system.\n\n```javascript\nconst result = await runProcess('methodologies/shape-up', {\n projectName: 'FitTracker Mobile',\n workDescription: 'Add push notifications for daily goals and achievements',\n appetite: 'big-batch',\n cycleWeeks: 6,\n teamSize: 'one-designer-two-programmers',\n phase: 'full-cycle'\n});\n```\n\n**Shaping Output**:\n- **Problem**: Users forget to log workouts; need timely reminders\n- **Appetite**: 6 weeks\n- **Solution**: Daily goal reminders + achievement celebrations\n- **Rabbit Holes**: Notification scheduling, time zones, notification grouping\n- **No-Gos**: Custom schedules, rich notifications with images, notification history\n\n**Building Output**:\n- **Scopes**:\n 1. Push notification infrastructure (Week 1-2)\n 2. Daily goal reminders (Week 2-3)\n 3. Achievement notifications (Week 3-4)\n 4. User preferences (Week 4-5)\n 5. Testing and polish (Week 5-6)\n- **Hill Chart Week 4**: 2 scopes uphill (preferences, testing), 3 downhill\n- **Circuit Breaker**: Ship with known limitation (no custom schedules)\n\n### Example 3: Small Batch Bug Fix\n\n**Context**: PDF export has formatting issues that frustrate users.\n\n```javascript\nconst result = await runProcess('methodologies/shape-up', {\n projectName: 'DocGen Pro',\n workDescription: 'Fix PDF export formatting issues with tables and images',\n appetite: 'small-batch',\n cycleWeeks: 2,\n teamSize: 'one-designer-one-programmer',\n phase: 'full-cycle'\n});\n```\n\n**Shaping Output**:\n- **Problem**: Tables break across pages poorly, images distorted\n- **Appetite**: 2 weeks (small batch)\n- **Solution**: Improved pagination logic + image scaling\n- **Rabbit Holes**: Complex nested tables, SVG rendering\n- **No-Gos**: Full table redesign, new export formats\n\n**Building Output**:\n- **Scopes**:\n 1. Table pagination (Week 1)\n 2. Image scaling (Week 1-2)\n- **Completion**: 2/2 scopes shipped\n- **Circuit Breaker**: Ship\n\n### Example 4: Bet Not Placed\n\n**Context**: Pitch evaluated but not selected.\n\n```javascript\nconst result = await runProcess('methodologies/shape-up', {\n projectName: 'TeamHub',\n workDescription: 'Add advanced analytics dashboard with custom reports',\n appetite: 'big-batch',\n phase: 'shaping'\n});\n\n// Later at betting table\nconst betting = await runProcess('methodologies/shape-up', {\n projectName: 'TeamHub',\n workDescription: 'Add advanced analytics dashboard with custom reports',\n existingPitch: result.pitch,\n competingPitches: [urgentSecurityPatch, requestedIntegration],\n phase: 'betting'\n});\n\n// Result: Pass - security and integration higher priority\n```\n\n**Betting Output**:\n- **Score**: 72/100\n- **Decision**: Pass\n- **Rationale**: Nice to have but security patch and integration higher priority\n- **Future**: May reshape with smaller appetite for future cycle\n\n## Hill Charts Explained\n\nThe hill chart is Shape Up's signature progress visualization:\n\n### Hill Metaphor\n\n```\n /\\\n / \\\n / \\\n / \\\n / \\\n / \\\n / \\\n /______________\\\nLeft Top Right\n```\n\n- **Left side (Uphill)**: Figuring things out, solving unknowns, exploration\n- **Top of hill**: Transition - unknowns resolved, approach clear\n- **Right side (Downhill)**: Executing known solution, building it out\n- **Far right**: Complete\n\n### Scope Movement\n\n- **Forward**: Scope making progress\n- **Stuck**: No movement for 1+ weeks, needs intervention\n- **Backward**: Discovered new unknowns, moved left on hill\n\n### Risk Assessment\n\n- **Low risk**: Most scopes downhill, nearing completion\n- **Medium risk**: Mix of uphill and downhill, some stuck\n- **High risk**: Many scopes uphill late in cycle, multiple stuck\n\n### Example Hill Chart (Week 4 of 6)\n\n```\nScope Positions:\n- Selection UI: Position 75 (downhill) - executing known solution\n- Bulk edit dialog: Position 85 (downhill) - nearly complete\n- Field validation: Position 50 (top) - just figured out approach\n- Permission checks: Position 30 (uphill) - still figuring out\n- Error handling: Position 10 (uphill) - early exploration\n\nRisk: Medium (permissions scope needs attention)\n```\n\n## Integration Points\n\n### With BDD/Specification by Example\n\nUse BDD to specify acceptance criteria during shaping:\n\n```javascript\n// Shape the work\nconst pitch = await runProcess('methodologies/shape-up', {\n workDescription: 'Bulk customer edit',\n phase: 'shaping'\n});\n\n// Create BDD scenarios for shaped scopes\nconst bdd = await runProcess('methodologies/bdd-specification-by-example', {\n feature: pitch.pitch.solution.overview,\n stakeholders: ['Product', 'Dev', 'QA']\n});\n```\n\n### With Domain-Driven Design\n\nUse DDD strategic patterns during shaping:\n\n```javascript\n// Understand domain during shaping\nconst ddd = await runProcess('methodologies/domain-driven-design', {\n phase: 'strategic'\n});\n\n// Use bounded contexts and aggregates in breadboard\nconst pitch = await runProcess('methodologies/shape-up', {\n workDescription: 'Order fulfillment workflow',\n phase: 'shaping'\n});\n```\n\n### With ATDD/TDD\n\nUse shaped work to drive test-driven development:\n\n```javascript\n// Build cycle with TDD\nconst cycle = await runProcess('methodologies/shape-up', {\n existingPitch: approvedPitch,\n phase: 'building'\n});\n\n// Implement each scope test-first\nfor (const scope of cycle.scopeMap.scopes) {\n await runProcess('methodologies/atdd', {\n acceptanceCriteria: scope.description\n });\n}\n```\n\n## Best Practices\n\n### Shaping\n\n1. **Set clear appetite first** - Constraint drives creative solutions\n2. **Stay at right level of abstraction** - Not too specific, not too vague\n3. **Call out rabbit holes explicitly** - Help team avoid time traps\n4. **Define no-gos clearly** - Prevent scope creep\n5. **Make it a pitch, not a spec** - Leave room for team creativity\n6. **Get design at room temperature** - Warm enough to evaluate, cool enough to be flexible\n7. **Breadboard before visual design** - Focus on flow and functionality first\n\n### Betting\n\n1. **Bet consciously** - Every bet is an opportunity cost\n2. **Don't maintain backlogs** - Old ideas get stale; reshape if still relevant\n3. **Allow uninterrupted time** - Give teams full 6 weeks without interruptions\n4. **Respect the circuit breaker** - No automatic extensions\n5. **Bet on problems, not solutions** - Teams might find better approaches\n6. **Consider team composition** - Match complexity to team experience\n7. **Time box the meeting** - Betting table shouldn't take more than 2 hours\n\n### Building\n\n1. **Get oriented first** - Understand terrain before diving in\n2. **Map scopes thoughtfully** - Each scope should be shippable slice\n3. **Update hill charts honestly** - Don't hide stuck work\n4. **Integrate QA throughout** - Don't leave testing until end\n5. **Cut scope if needed** - Preserve core value, drop nice-to-haves\n6. **Respect the cycle** - Don't extend automatically\n7. **Communicate through hill charts** - Visual updates beat status reports\n\n### Cool-Down\n\n1. **Actually rest** - Don't pack cool-down with structured work\n2. **Fix annoying bugs** - Address technical debt\n3. **Explore freely** - Investigation might lead to future pitches\n4. **Reflect on cycle** - What went well? What to improve?\n5. **Don't commit to deliverables** - Cool-down is unstructured time\n6. **Recharge for next cycle** - Team needs breaks between intense cycles\n\n## Common Patterns\n\n### Appetite-First Design\n\nAlways start with appetite, then fit solution:\n\n```javascript\n// Wrong: \"How long will bulk edit take?\"\n// Right: \"We'll spend 6 weeks on bulk edit. What can we build?\"\n\nconst result = await runProcess('methodologies/shape-up', {\n workDescription: 'Bulk edit capability',\n appetite: 'big-batch', // Set constraint first\n phase: 'shaping'\n});\n```\n\n### Graduated Commitment\n\nStart small, expand if valuable:\n\n```javascript\n// Cycle 1: Basic bulk edit (6 weeks)\nconst basic = await runProcess('methodologies/shape-up', {\n workDescription: 'Basic bulk edit for common fields',\n appetite: 'big-batch'\n});\n\n// Later cycle if successful: Advanced features\nconst advanced = await runProcess('methodologies/shape-up', {\n workDescription: 'Advanced bulk edit with formulas and validations',\n appetite: 'big-batch'\n});\n```\n\n### Circuit Breaker in Action\n\nDon't extend cycles:\n\n```javascript\n// Cycle ends, work incomplete\nif (result.circuitBreaker.status === 'incomplete') {\n // Option 1: Ship partial work\n // Option 2: Discard and reshape for future bet\n // Option 3: Cut scope and ship core\n\n // Never: Extend the cycle\n}\n```\n\n## Troubleshooting\n\n### Problem: Work doesn't fit appetite\n\n**Solution**: Shape more aggressively\n- Define more no-gos\n- Simplify solution\n- Consider smaller appetite\n- Break into multiple pitches\n\n### Problem: Scopes stuck uphill late in cycle\n\n**Solution**: Intervene early\n- Pair with experienced developer\n- Simplify the scope\n- Cut scope if not must-have\n- Surface blockers to leadership\n\n### Problem: Too many competing pitches\n\n**Solution**: Be ruthless at betting table\n- Focus on strategic priorities\n- Consider if pitch really needs 6 weeks\n- Reshape as small batch\n- Pass and discard old ideas\n\n### Problem: Team extends cycle\n\n**Solution**: Enforce circuit breaker\n- Ship what's done\n- Reshape for future bet\n- Learn from appetite mismatch\n- Don't reward extensions\n\n### Problem: Shaping too specific or too vague\n\n**Solution**: Find room temperature\n- Too hot: Remove implementation details\n- Too cold: Add concrete examples\n- Just right: Can see it works, room for creativity\n\n## Artifacts Generated\n\n### Shaping Phase\n- `artifacts/shape-up/shaping/pitch.md` - Complete pitch document\n- `artifacts/shape-up/shaping/breadboard.md` - Flow and affordances\n- `artifacts/shape-up/shaping/sketches.md` - Fat marker sketches\n- `artifacts/shape-up/shaping/rabbit-holes.json` - Risks and no-gos\n\n### Betting Phase\n- `artifacts/shape-up/betting/evaluation.md` - Betting table assessment\n- `artifacts/shape-up/betting/comparison.md` - Competing pitches comparison\n- `artifacts/shape-up/betting/cycle-plan.json` - Execution plan\n\n### Building Phase\n- `artifacts/shape-up/building/scope-map.md` - Scope breakdown\n- `artifacts/shape-up/building/scope-diagram.md` - Scope dependencies\n- `artifacts/shape-up/building/hill-chart-week-N.md` - Weekly hill charts\n- `artifacts/shape-up/building/progress-week-N.json` - Progress data\n- `artifacts/shape-up/building/final-hill-chart.md` - End of cycle chart\n- `artifacts/shape-up/building/circuit-breaker.md` - Ship/stop decision\n- `artifacts/shape-up/building/qa-report.md` - QA results\n\n### Cool-Down Phase\n- `artifacts/shape-up/cool-down/activities.md` - Cool-down work\n- `artifacts/shape-up/cool-down/cycle-retrospective.md` - Learnings\n\n## References\n\n### Official Resources\n\n- **[Shape Up Book](https://basecamp.com/shapeup)** - Complete methodology (free online)\n- **[Basecamp Blog](https://basecamp.com/articles)** - Articles about Shape Up in practice\n- **[Ryan Singer on Twitter](https://twitter.com/rjs)** - Ongoing insights\n\n### Key Chapters\n\n1. **Introduction** - Philosophy and principles\n2. **Shaping** - Breadboarding, fat marker sketches, pitches\n3. **Betting** - The betting table, capacity, saying no\n4. **Building** - Getting oriented, scopes, hill charts\n5. **Conclusion** - Circuit breaker, cool-down, cycles\n\n### Tools\n\n- **[Basecamp](https://basecamp.com/)** - Built using Shape Up methodology\n- **[Hill Charts in Basecamp](https://basecamp.com/features/hill-charts)** - Official implementation\n- **[ShapeUp.how](https://shapeup.how/)** - Community resources (if available)\n\n### Articles\n\n- [Introducing Hill Charts](https://basecamp.com/articles/hill-charts) - Progress visualization\n- [No Deadlines](https://basecamp.com/articles/no-deadlines) - Fixed time approach\n- [The Betting Table](https://basecamp.com/articles/betting-table) - How Basecamp decides what to build\n\n### Comparisons\n\n- **vs. Scrum**: Fixed time (not fixed scope), 6 weeks (not 2), no daily standups\n- **vs. Kanban**: Batched work (not continuous flow), clear cycles (not continuous)\n- **vs. Waterfall**: Small cycles (not big bang), variable scope (not fixed scope)\n- **vs. Feature-Driven Development**: Appetite-driven (not feature-driven), betting (not backlog)\n\n## Real-World Adoption\n\nShape Up works well for:\n\n- **Product teams** building software products\n- **Small to medium teams** (not ideal for very large orgs)\n- **Established products** with ongoing development\n- **Teams with experienced shapers** who can abstract well\n- **Organizations** that can commit to uninterrupted time\n\nShape Up may not fit:\n\n- **Client services** with fixed-scope contracts\n- **Regulated industries** with extensive documentation requirements\n- **Very large organizations** with many dependencies\n- **Teams without senior designers/shapers**\n- **Projects with immovable deadlines**\n\n## License\n\nPart of the Babysitter SDK orchestration framework.\n\nShape Up methodology is by Basecamp (Ryan Singer). The methodology is freely available through their online book.\n",
"documents": [
"specialization:shape-up"
]
},
"outgoingEdges": [
{
"from": "page:library-shape-up",
"to": "specialization:shape-up",
"kind": "documents"
}
],
"incomingEdges": [
{
"from": "page:index",
"to": "page:library-shape-up",
"kind": "contains_page"
}
]
}