Agile Development
Agility is the ability to create and respond to change in order to profit in a turbulent business environment. Companies need to innovate better and faster respond quickly to competitive initiatives new technology customer's requirements Agile methods: Subset of iterative ...
- Agility is the ability to create and respond to change in order to profit in a turbulent business environment.
- Companies need to
- innovate better and faster
- respond quickly to
- competitive initiatives
- new technology
- customer's requirements
Agile methods:
- Subset of iterative and evolutionary methods
- Based on iterative enhancement and opportunistic development processes.
- Each iteration is a self-contained, mini-project with activities that span requirements analysis, design, implementation, and test.
- Leads to an iteration release (which may be only an internal release) that integrates all software across the team and is a growing and evolving subset of the final system.
- The purpose of having short iterations is so that feedback from iterations N and earlier, and any other new information, can lead to refinement and requirements adaptation for iteration N + 1.
- The pre-determined iteration length serves as a timebox for the team.
- Scope is chosen for each iteration to fill the iteration length.
- Rather than increase the iteration length to fit the chosen scope, the scope is reduced to fit the iteration length.
- A key difference between agile methods and past iterative methods is the length of each iteration.
- In the past, iterations might have been three or six months long.
- In agile methods, iteration lengths vary between one to four weeks, and intentionally do not exceed 30 days.
- Research has shown that shorter iterations have lower complexity and risk, better feedback, and higher productivity and success rates.
- Agile proponents believe
- Current software development processes are too heavyweight or cumbersome
- Too many things are done that are not directly related to software product being produced
- Current software development is too rigid
- Difficulty with incomplete or changing requirements
- Short development cycles (Internet applications)
- More active customer involvement needed
- CMM focuses on process
- Agile methods are considered
- Lightweight
- People-based rather than Plan-based
- Several agile methods
- No single agile method
- XP most popular
- No single definition
- Agile Manifesto closest to a definition
- Set of principles
- Developed by Agile Alliance
- Current software development processes are too heavyweight or cumbersome
In 2001, Kent Beck and 16 other noted software developers, writers, and consultants (known as Agile Alliance) signed a manifesto as following:
“We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- individuals and interactions over processes and tools
- working software over comprehensive documentation
- customer collaboration over contract negotiation
- responding to change over following a plan
That is, while there is value on the items on the right, we value the items on the left more.”
Agile | Plan Driven Processes |
---|---|
Small products and teams; scalability limited | Large products and teams; hard to scale down |
Untested on safety-critical products | Handles highly critical products; hard to scale down |
Good for dynamic, but expensive for stable environments. | Good for stable, but expensive for dynamic environments |
Require experienced Agile personnel throughout | Require experienced personnel only at start if stable environment |
Personnel thrive on freedom and chaos | Personnel thrive on structure and order |
It is difficult to predict in advance which software requirements will persist and which will change. It is equally difficult to predict how customer priorities will change as the project proceeds.
For many types of software, design and construction are interleaved. That is, both activities should be performed in tandem so that design models are proven as they are created. It is difficult to predict how much design is necessary before construction is used to prove the design.
Analysis, design, construction, and testing are not as predictable (from a planning point of view) as we might like.
- Process adaptability (to rapidly changing project and technical conditions).
- Agile software process must adapt incrementally.
- To accomplish incremental adaptation, an agile team requires customer feedback.
- An effective catalyst for customer feedback is an operational prototype or a portion of an operational system.
- Software increments (executable prototypes or portions of an operational system) must be delivered in short time periods so that adaptation keeps pace with change (unpredictability).
- Our highest priority is to satisfy the costumer through early and continuous delivery of valuable software
- Welcome changing requirements, even late in development. Agile process 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 their 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
- Competence
- Common focus
- Collaboration
- Decision-making ability
- Fuzzy problem-solving ability
- Mutual trust and respect
- Self-organization
- Scrum
- Dynamic Systems Development Method (DSDM)
- Crystal Methods
- Feature-Driven Development (FDD)
- Lean Development (LD)
- Extreme Programming (XP)
- Adaptive Software Development (ASD)
Reference:
Software Engineering A Practitioner's Approach (7th Ed.)
~ Roger S. Pressman