An agile process reduces the agility and cost of change because software is released in increments and change can be better controlled within an increment.
Agility argue that a well designed agile process “flattens” the cost of change curve shown in following figure, allowing a software team to accommodate changes late in a software project without dramatic cost and time impact.
When incremental delivery is coupled with other agile practices such as continuous unit testing and pair programming, the cost of making a change is attenuated.
Although debate about the degree to which the cost curve flattens is ongoing, there is evidence to suggest that a significant reduction in the cost of change can be achieved.
Agile Process
Any agile software process is characterized in a manner that addresses a number of key assumptions about the majority of software projects:
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
Agility Principles
Agility and cost of change principles for those who want to achieve agility:
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.
Human Factors
Agile development focuses on the talents and skills of individuals, molding the process to specific people and teams. The key point in this statement is that the process molds to the needs of the people and team.
Competence – In an agile development context, “competence” encompasses innate talent, specific software-related skills, and overall knowledge of the process that the team has chosen to apply.
Skill and knowledge of process can and should be taught to all people who serve as agile team members.
Common focus – Although members of the 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.
To achieve this goal, the team will also focus on continual adaptations (small and large) that will make the process fit the needs of the team.
Collaboration – Software engineering (regardless of process) 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; and building information (computer software and relevant databases) that provides business value for the customer.
To accomplish these tasks, team members must collaborate with one another and all other stakeholders.
Decision-making ability – Any good software team (including agile teams) must be allowed the freedom to control its own destiny. This implies that the team is given autonomy decision making authority for both technical and project issues.
Fuzzy problem solving ability – Software managers must recognize that the agile team will continually have to deal with ambiguity and will continually be buffeted by change.
Mutual trust and respect – The agile team must become what DeMarco and Lister call 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 the parts.”
Self-organization – In the context of agile development, self-organization implies three things: (1) the agile team organizes itself for the work to be done, (2) the team organizes the process to best accommodate its local environment, (3) the team organizes the work schedule to best achieve delivery of the software increment.
Self-organization has a number of technical benefits, but more importantly, it serves to improve collaboration and boost team morale.
Read More Topics |
Personal and team process |
Unique nature of web apps |
Arrays in C language |
Address mapping in computer networks |