Scrum is a flavor of agile software development. In agile the development teams are cross functional and are self-managing. The development cycles, called sprints, are short, 4 weeks or less. By the end of a sprint the code must be functional, tested and working. Scrum functions on something called empirical process control. Traditional software development (command and control) uses defined process control, which is based on the theory of how something should work. This is at the heart of why so many traditional software projects either fail or generate bad code. A defined process control is meant to work on projects that are not very complex, tasks that do not need to be exact, like making hat pins. Empirical process control is used in serious engineering when tolerances need to be exact.