**Scrum**
Software Development Methodologies === 1. Method to manage software projects 1. Designed to help figure out: 1. *scope* (what to do / what does the customer actually want, how much can we do) 2. *schedule* (when to do it, who to do it, avoid *bottlenecks*) 3. *quality* (minimize bugs, make sure everything works together, test) 2. In games, want a *fun*, *bug-free* game, without need for *crunch* or *slip* 2. Linear vs. Agile 1. Linear Sequential: plan then build then test 2. Agile methods 1. Iterative development 1. Make some changes, test (internally or external), re-plan, do again 1. Games often need to "find the fun", many playable iterations 3. Methods 1. Waterfall (popular in government) * Requirements, Analysis, Design, Implementation, Testing, Maintenance 2. Prototype: build a prototype, get customer feedback, start over 3. Rapid Application Development (RAD): requirements (design, construction)* complete 4. Kanban: Board to track backlog, active, testing, and complete 5. Feature Driven Design (FDD): lifecycle around features to add 6. DevOps: For live, continuously updated. Dev team and Ops team 7. ... Scrum === 1. Scrum is *one* agile methodology, though one of the most popular 1. Define project: *User Stories* 1. Who, what, why 1. Examples: 1. As *a player*, I want to *double jump* so I can *have skill-based shortcuts through the levels* 1. As *the publisher*, I want to *collect player data* so I can *track how much players replay the game* 1. As *an artist*, I want *a tool to build sprite sheets* so I can *generate character art more efficiently* 1. Everything from base mechanics to data collection to internal tools 1. Big picture items 1. Why is important: allows negotiation for alternate solutions 1. Turn stories into *Product backlog* 1. Tasks to complete the game (stolen from FDD) 1. Still pretty big picture (e.g. character double-jump)
1. Break into short time-limited *sprints* 1. Typically 1-3 weeks 1. Each sprint, select items for *Sprint backlog* 1. Break down to individual tasks with times 1. Art: animate double-jump sprite sheet 1. Prog: detect double-jump control 1. Prog: trigger double-jump animation 1. Prog: execute double-jump 1. Design: Create double-jump opportunity in one level 1. Design: Tune control timing and jump height 1. Only schedule if **everyone** critical to the task has time budget available 1. Update task board (stolen from Kanban) 1. Move a task from not started to in progress 1. Update time remaining 1. Move from in progress to done 1. Track progress in *burndown chart* 1. Scrum meeting 1. **QUICK!!!** 1. Tradition is to stand, so no one gets comfortable 1. Each person answers three questions: 1. What have I done since last meeting? 1. What will I do by next meeting? 1. What impediments? 1. **DO NOT** attempt to solve problems * Identify problems, set up post-scrum time for solution 1. Example: 1. You can now double jump if you hit jump again within half a second of a collision with a wall 1. By next meeting I'll going to trigger the double-jump animation and physics. 1. I'm using a temporary sprite sheet, but I really need the real double-jump animation 1. **after the meeting** 1. animator and programmer can meet about the missing animation 1. could involve the art lead or producer to reprioritize or reassign the animation 1. After sprint 1. Evaluate game 1. Update product backlog (reprioritize, cut or add features) 1. Overall scope 1. Supposed to be *dynamic* 2. Order backlog tasks to cut off at release date 3. Games usually have a *feature complete* freeze date, with possible additional post-feature-complete sprints for tuning and polish. 4. Post-freeze may restrict to only approved work and/or documented bugs. May require extra review **before** anything goes in at this stage.