Lecture Notes
Agile Software Development
Course
Orit Hazzan & Yael
Dubinsky
© 2006 All Rights Reserved
Week 1 - Introduction
In this lecture the course overview is presented and its main objectives are outlined. The rationale for the course structure, in both the lecture column and the studio column, is also explained to the students.
With respect to agile development, the Agile manifesto in presented and its implication of the nature of agile software development environments is elaborated. It is emphasized that the course is neither a programming course nor a technical oriented course (no IDEs, for example, are presented); rather, the course looks at a new paradigm of software development – agile software development – trying to convey the idea that, in fact, technical problems related to software development have been already overcome and that the focus should be placed now on the management of human aspects of software development processes. As the Agile Manifesto highlights – this is one of the core ideas of agile software development processes.
Week 2 – Forming Teams
This week is dedicated to one of the main ideas of agile software development environments. It discusses how teams function in agile software development environments and how agile teams achieve their targets by different techniques. The technique highlighted in this lecture is a role scheme, according to which each team members has an additional role in the team in addition of being a software developer. As it turns out, such a role scheme enhances creativity, responsibility, accountability, diversity, and measure collection. Further, such a role scheme fosters the message that each team member has what to contribute to the software development process and that the mutual contribution of each individual in the team creates a whole which is greater than its parts. Other ways by which agile teams achieve their targets, such as measures, are discussed in future lessons.
Week 3 - Planning
It is a very well known fact that many software
projects are not delivered on time and run out of budget. This lesson focuses
on planning and explains how, by adopting several practices, agile software
development environments enable to overcome this characteristic problem of
software development processes. The core idea of this lesson is short releases,
supported by tight time management and sustainable pace. In practice, it
implies that after having a global picture of what is to be developed, each
planning session addresses a very short period of time (one or two weeks) on a
very detailed level (including time estimation in hour resolution) in which we
make sure not to overcommitted and to develop the software in a sustainable
pace. In this lesson, the agile planning process is outlined and the way it
helps overcome the specific problems is software project planning is analyzed.
Week 4 - Customer
This lecture focuses on one of the main changes that the agile approach introduces into software development environments in general and developer conception in particular. Specifically, this talk examines the customer role in agile software development processes. As it turns out, the customer role in agile software development environments is central and is based on an on-going communication between the customer and the developers, both with respect to the requirements as well as with respect to the way their implementation is checked. This communication is established with the aid of several practices, one of which – the planning game – has been mentioned in the previous lesson. Another practice that fosters customer-developer communication is the metaphor – a means that bridges the gap (if exist) between the customer and the developers worldviews. As it turns out, not only the customer role is supported by several practices, it also fosters by itself other features of agile software development, such as knowledge sharing.
Week 5 - Measures
One management mechanism of agile software development
processes is measures. This implies that the entire software development process
is controlled and monitored by a set of measures, some
of them are determined by the team and some – with customer collaboration.
These measures should be as simple as possible to enable their actual
measurement as well as their interpretation by the different players in the
development process for the sake of process improvement. As agile software
development requires constant feedback from the different ingredients of the
software development environments (people and code), only several measures should
be taken; however, they should be taken on a daily- or iteration- basis to
allow them to reflect back, as often as possible, on the process progress. As
agile software developments are ready for changes, it is possible that these
measures are altered from one project to another as well as between different
iterations of the same project. One general rule, however, which is derived
directly from the Agile manifesto, should be
remembered: these measures should support and assist the individuals involved
in the software development process and should not be taken for other purposes.
Week 6 – Testing
Testing is another way by which agile software development environments control the development processes and reduce risk. The introduction of heavy testing early in the development process, during the entire software development process, ensures that the team, as well as the customer, be sure at each step that the software developed so far is correct and bug-less, both from the technical perspective as well as from the functional perspective. This perspective implies a change in team structure in several ways. For example, this process implies that testers are an integral part of the team; not a separate team that gets input from the development people and outputs back bugs to be corrected by the developers. Further, it implies that the regular tension between testers and developers is reduced. Furthermore, testers' low status, that can be identified in many software organizations, is eliminated within such a process. These changes reflect once again the important attributed to people in agile software development processes.
Week 7 - Refactoring
In this lecture the role of refactoring is highlighted from the cognitive perspective. Refactoring will be presented as a cognitive tool that supports gradual knowledge construction with respect to code design and readability. The importance of refactoring is derived from several reasons, three of them are presented here. First, it is well known that software comprehension is hard task. In many cases developers can't cope successfully with code that has been written by others and even by themselves. By allowing an on-going improvement in the code readability, without adding functionality, during the actual code development process, refactoring increases code readability. Second, even in cases where it is acknowledged that there is a need to improve code readability, when specific time is no allocated for this purpose, refactoring is tended to be skipped. Agile development processes, by their tight and ordered planning process mentioned above, further legitimate refactoring by allocating time for this activity of code improvement. Third, with respect to code design, in many cases the code design is not similar to the design that has been shaped originally. Refactoring enables us to address this gap between the code and its design on a regular basis. Similar to testing, the fact that refactoring is specifically integrated into the development process, highlights, this time from the cognitive perspective, the importance attributed to the developers in agile software development process. Once again, and in a similar way to other agile practices, refactoring is not an isolated element: on the one hand, it supports other agile ideas, on the other – it is supported and enhanced by other practices.
Week 8 – Intermediate Review
This lesson starts the second
iteration of the lectures and reviews what we have seen so far in the course and
what we will see in the following lectures. The idea is to summarize the ideas
presented so far into one comprehensive picture which captures the spirit of
agile software development environments and to serve as an introduction to the
second iteration of the course in which, on the one hand we delve into more
details, while on the other hand we put agility in a wider context. The main
idea presented in this lecture is the new paradigm that agile software
development introduces into software development processes. Specifically, while
before the agile movement emerged it had been accepted that software
development processes behave in a similar manner to the development of other
(tangible) artifacts and therefore inspires a linear process, the agile approach
towards software development inspires a more intertwined process, in which the
different typical activities performed during a software development process
(design, coding, etc) form a network oriented image. The question that should
be naturally asked is, why this different image is
needed for the case of software development? Why the linear model of software
development process had to be changed in order to cope with the typical
problems of software development? To answer these questions, this lesson explores
the nature of software, the need to develop software in a unique way and the
way agile development provides solutions to the typical characterized problems.
For this purpose some of the main agile software development methods are
described.
Week 9 - Cognition
In this lesson we revisit
agile software development processes from a cognitive perspective.
Specifically, we examine the notion of reflection, a process through which we
rethink what we have done so far and learn the lessons derived from such an
examination. Since any creative process requires such a reflection process, an
agile development process does integrate reflection processes in a very
systematic way. In this lesson we view several ways by which we can conduct
reflections, the benefits we may gain from the performance of reflection, and
the potential influence of reflection processes on software development. To
illustrate the main ideas and to put the notion of reflection in a more
concrete context, we work in this lesson on several case studies.
Week 10 – Forming teams – Reward
allocation
In the second week of the
semester we discussed how agile software development approaches the creation of
teams. In this lesson we visit this topic again, focusing on how agile methods
support teamwork and collaboration among teammates. This is done by discussing
why in many cases software teammates tend not to collaborate, and how the agile
approach fosters collaboration. This is accomplished by viewing agile processes
from game theory perspective. For this aim the Prisoner Dilemma framework is
discussed and it is shown how an agile software development process eliminates
the conflict involved in such situations by ensuring team members
cooperation.
Week 11 – Pair Programming
This lesson focuses on pair
programming – one of the important features of team work. Its importance is
derived from the fact that this practice, which asserts that actual software
development should be conducted in pairs, supports the development process form
a cognitive, as well as social, perspective. Generally speaking, we may say
that pair programming partially replaces code review processes conducted in
traditional software development processes. However, it has more merits. First,
it helps developers stay focused during the actual development. Second, in each
pair programming session each piece of code is reviewed by two programmers.
Third, it guides a process during which each piece of code is viewed on two
levels of abstraction. Fourth, it fosters knowledge sharing. Despite all these
benefits, pair programming raises some resistance, partially because it is
misinterpreted. In this lesson we delve into the way pair programming should be
carried out, exploring how it contributes to the development process both on
the individual level and the team level.
Week 12 – Agility -A management
perspective
In the next two weeks we
examine agile software development from a wider perspective. In this week we
first examine agility from the management perspective and then, next week, we will
look on the impact of agility on the organization level.
As just mentioned, in this
lecture we examine the concept of agility from the management perspective. It
is well known that many software projects do not meet deadlines, and the
relevant question to be asked is why this happens in software projects. In this
lesson we gather all the principles and practices we have met so far in the
course into a managerial framework, and illustrate how agile projects
management, supported by different practices, provides
an alternative framework for software project management. Further, we show how
the agile approach can be applied to any activity related to project management
and how it provides all management level, at each moment, a clear overview and
an updated status report of the development phase.
Week 13 – Organizational perspective
This lesson continues the
previous one and examines agility on the organizational level. As it turns out,
the introduction of agility into the organization welcomes other by-product
influences. The first one is the openness to changes – a critical element in
today's markets. Another influence, directly derived from the openness to
changes, is that agile software development processes welcome diversity;
therefore, an agile approach has the potential to increased diversity, which,
according to existing evidence, further strengthens and promotes the
organization.
Another important phenomenon
discussed in this lesson is the connection between agile software development
and off shoring and global software development.
Week 14 – Summary
In this lesson, in which we
close the semester, we put all the ideas together and examine mutual
connections between them. For example, we examine how the management
perspective is influenced and influences the technical aspects of agile
software development; we examine how the expression of agility on the team
level is connected to agility on the team and the organization level, etc.
Further, we examine the potential influence of agile software development on
the software industry and the field of computing in the border sense. We also
discuss students' experience in agile software development processes conducted
in the studio and check how these performances can be improved.