Agile as we know it today traces its history to 2001. Reacting to waterfall approaches to project management, which organizes a software project as a series of linear sequences, a group of software developers penned The Manifesto for Agile Software Development. In this document the programmers proposed a new approach to software development and described 4 key characteristics that they believed should be valued over other concerns. As they put it, agile software development teams should value:
Agile is an approach to software development that seeks the continuous delivery of working software created in rapid iterations.
However, the phrase "agile methodology" is misleading because it implies that agile is a singular approach to software development. Agile is not a set of prescriptions for exactly which actions to take in software development. Instead, it is a way of thinking about collaboration and workflows and it is a set of values which guide our choices in regards to what we make and how we make it.
In practical terms, agile software development methodologies are all about delivering small pieces of working software quickly to improve customer satisfaction. These methodologies use adaptive approaches and teamwork to focus on continuous improvement. Usually, agile software development consists of small, self-organizing teams of software developers and business representatives regularly meeting in-person throughout the software development life cycle. Agile favors a lightweight approach to software documentation and embraces-rather than resists-changes at any stage of the life cycle.
( red hat )
Principles behind the Agile Manifesto
We follow these principles:
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
Welcome changing requirements, even late in
development. Agile processes harness change for
the customer's competitive advantage.
Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.
Business people and developers must work
together daily throughout the project.
Build projects around motivated individuals.
Give them the environment and support they need,
and trust them to get the job done.
The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.
Continuous attention to technical excellence
and good design enhances agility.
Simplicity--the art of maximizing the amount
of work not done--is essential.
The best architectures, requirements, and designs
emerge from self-organizing teams.
At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly.
One of the primary benefits of practicing Agile methodologies is the ability to rapidly respond to changes. Before Agile and its related methods were created, software development was managed the way other types of work were managed at that time: In long development cycles, with lots of upfront planning, little room for change, and tightly prescribed timelines for each phase of work. You can probably point to areas of your business where things are handled this way.
The problem is, even with the most data-driven estimates, teams won't always be able to deliver work according to a specific schedule. Changes in the team, data, weather, economy, or requirements can all impact the progress of a piece of work. Not to mention, creating long-term plans (and failing to re-evaluate them over time) means you're likely not focused on listening to what your market is telling you as you're developing it.
also short loops: iterate!