Presentation on theme: "Chapter: 3 Agile Development. Agile Software Development Agile software development is an iterative and incremental (evolutionary) approach to software."— Presentation transcript:
Chapter: 3 Agile Development
Agile Software Development Agile software development is an iterative and incremental (evolutionary) approach to software development which is performed in a highly collaborative manner by self-organizing teams within an effective governance framework with "just enough" ceremony that produces high quality solutions in a cost effective and timely manner which meets the changing needs of its stakeholders.
What Is Agility? Agility is an effective response to change. It encourages team structures and attitudes that make communication more facile (too easy). It emphasizes rapid delivery of operational software. It adopts the customer as a part of the development team and recognizes that planning has its limit and that a project plan must be flexible.
Agility And The Cost Of Change The conventional wisdom in software development is that the cost of change increases nonlinearly as a project progresses. Figure 3.1 It is relatively easy to accommodate a change when a software team is gathering requirements. But if team is in middle of validation testing and an important stakeholder is requesting a change.
The time and cost required to ensure that the change is made without unintended side effects is nontrivial. A well-designed agile process flattens the cost of change curve, allowing a software team to accommodate changes late in a software project without dramatic cost and time impact..
What IS An Agile Process? Agile process is characterized in a manner that addresses a number of key assumptions about majority of the software projects: 1.It is difficult to predict in advance which software requirements will persist and which will change. It is difficult to predict how customer priorities will change as the project proceeds. 2.For many type of projects, design and construction are interleaved.
3. Analysis, design, construction and testing are not as predictable as we might like. An agile process must adapt incrementally.
Agile Principles 1.Our first priority is to satisfy the customer through early and continuous delivery of valuable software. 2.Welcome changing requirements. 3.Deliver working software frequently (weeks rather than months) 4.Business people and developers must work together daily throughout the project. 5.Build Projects around motivated individuals. Give them environment and support they need, and trust them to get the job done.
6. The most efficient and effective method of conveying information to and within a development team is Face-to-face conversation daily cooperation between businesspeople and developers. 7. Working software is the primary measure of progress. 8. Agile process promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. 9. Continuous attention to technical excellence and good design enhances the agility.
10. Simplicity – the art of maximizing the amount of work not done – is essential. 11. The best architectures, requirements, and designs emerge from Self-organizing teams. 12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Human Factors Agile development focuses on the talents and skills of individuals, molding the process to specific people and teams. Key traits must exist among the people on effective software team 1.Competence (Skill) : Competence encompasses innate talent, specific software-related skills, and overall knowledge of the process that team has chosen to apply. 2.Common focus : Although members of agile team may perform different tasks and bring different skills to the project, all should be focused on one goal- to deliver a working software increment to the customer within the time promised.
3. Collaboration : SE is about assessing, analyzing, and using information that is communicated to the software team; creating information that will help all stakeholders understand the work of the team. To accomplish these tasks, team members must collaborate. 4. Decision-making ability : Any good team must be allowed the freedom to control its own destiny. Decision-making authority for both technical and project issues. 5. Fuzzy problem-solving ability : The team must accept the fact that the problem that they are solving today may not be solved tomorrow. Lessons learned from any problem-solving activity may be benefit to the team later in project.
6. Mutual trust and respect : The agile team must become a “jelled” team. A jelled team exhibits the trust and respect that are necessary to make them “so strongly knit that the whole is greater than the sum of parts.” 7. Self-organization : The agile team must organize itself for the work to be done. The team organizes the work schedule to best achieve delivery of the software increment.