
Agile software development focuses on small increments of functionality and collaboration within self-organizing teams, with working software being the only measure of progress It promotes adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.
In the previous century more peoples work relied on execution rather than innovation. People with defined roles used defined models and defined best practices to execute defined plans that didn’t change very quickly. Life was more predictable because we knew more of what we were trying to accomplish and how we would accomplish it. People like Henry Ford used ideas from Fredrich Taylor and H.L Gantt to do predictable and repeatable work. Today alot of predictable and repeatable work is done much faster by machines, things change more quickly, to stay competitive we need to inspect and adapt more quickly, and deal with greater uncertainty.
Only learning organizations will be able to keep up with the future. Scrum( a popular form of agile development)is a framework for learning about work and the processes we use to do it. It is an attempt to put chaos in a box making the most of uncertainty.
Incremental software development methods can be traced back to 1957. Evolutionary project management and adaptive software development emerged in the early 1970s. During the 1990s, a number of lightweight software development methods evolved in reaction to the prevailing heavyweight methods that critics described as heavily regulated, regimented, and micro-managed. These included: from 1991, rapid application development; from 1994, unified process and dynamic systems development method (DSDM); from 1995, Scrum; from 1996, Crystal Clear and extreme programming (XP); and from 1997, feature-driven development. Although these originated before the publication of the Agile Manifesto in 2001, they are now collectively referred to as agile methods
Manifesto for Agile Software Development
“uncovering better ways of developing software by doing it and helping others do it,” they have come to value: “
- individuals and interactions over processes and tools ( co-location and pair programming)
-
working software over comprehensive documentation( working software is more useful and welcome than just presenting documents to clients in meetings)
-
customer collaboration over contract negotiation (requirements cannot be fully collected at the beginning of the software development cycle, therefore continuous customer or stakeholder involvement is very important.)
- responding to change over following a plan(agile methods are focused on quick responses to change and continuous development)
The Agile Manifesto is based on twelve principles:
- Customer satisfaction by early and continuous delivery of valuable software
- Welcome changing requirements, even in late development
- Working software is delivered frequently (weeks rather than months)
- Close, daily cooperation between business people and developers
- Projects are built around motivated individuals, who should be trusted
- Face-to-face conversation is the best form of communication (co-location)
- Working software is the principal measure of progress
- Sustainable development, able to maintain a constant pace
- Continuous attention to technical excellence and good design
- Simplicity—the art of maximizing the amount of work not done—is essential
- Best architectures, requirements, and designs emerge from self-organizing teams
- Regularly, the team reflects on how to become more effective, and adjusts accordingly
Compared to traditional software engineering, agile software development mainly targets complex systems and product development with dynamic, non-deterministic and non-linear characteristics, where accurate estimates, stable plans, and predictions are often hard to get in early stages—and big up-front designs and arrangements would probably cause a lot of waste.
The waterfall model is a sequential (non-iterative) design process, used in software development, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of conception, initiation, analysis, design, construction, testing, production/implementation and maintenance.
The waterfall development model originates in the manufacturing and construction industries: highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Because no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.