Agile is a general philosophy describing a set of guiding principles for building software through iterative development. Agile development is about providing a framework that allows developers to build something useful for real world users and deal with the realities of interruptions, timelines, and technical requirements that disrupt an ideal development cycle. In other words, Agile development helps developers deal with reality.
SCRUM is a methodology -- in another words, an implementation -- pertaining specifically to project management. Other "Agile" methodologies inclue extreme programming, kanban.
Scrum was a term first used in 1987 to describe hyper-productive product development in Japan. The word Scrum comes from rugby, where scrum refers to the strategy used for getting an out-of-play ball back into play. The name Scrum stuck because of the similarities between the game of rugby and the type of product development proscribed by Scrum -- both are adaptive, quick, and self-organizing.
Some of its fundamental goals include:
- self-organization
- minimize meetings
- prevent interruptions
- incremental product delivery
- visibility
- user story - A user story describes functionality of a system that will be valuable to a Non Development Team (NDT) stakeholder of a system or software (eg. "As a user, I want to login"). A user story should have business value, be testable, and be small enough to complete in one iteration.
- story point - A story point is an relative estimation unit used by Scrum teams. This is used to measure the complexity of implementing a story. Points have several advantages over estimating tasks using time -- for one, estimating development tasks is really hard! Using the story point abstraction takes the focus off of the actual time in hours or days and instead puts the focus on describing the relative expense and complexity of a task as compared to other tasks. Humans/developers are better at that.
- product backlog - An never-ending list of all product requirements
- product owner - prioritizes backlog
- sprint planning - meeting to decide sprint goal and sprint backlog
- sprint - an iteration of defined length (eg. 30 days, 1 week) where scrum teams work through a sprint backlog undisturbed by new requirements
- sprint goal - a high-level, non-technical description of what is to be accomplished in a sprint
- sprint backlog - the list of tasks needed to achieve the. sprint goal. is updated as items are completed. serves as a highly visible, real-time picture of the work the team plans on accomplishing during the sprint
- daily scrum ("standup") - 15 minute status meeting where each scrum team member shares 1) what they've accomplished since the last meeting 2) what they plan on accomplishing by the next meeting 3) any obstacles in their way. Topics requiring follow-up are deferred to after the standup so they don't take up everyone's time.
- sprint review meeting - a check-in to review progress up to that point and decide whether to keep it or throw it away
- sprint retrospective - A brief, dedicated period at the end of each sprint to deliberately reflect on how they are doing and to find ways to improve, eg. what should we start doing? what should we stop doing? what should we continue doing?