  Agile processes focus on facilitating early and fast production of working
code, and are based on software development process models that support
iterative, incremental development of software. Although agile methods have
existed for a number of years now, answers to questions concerning the
suitability of agile processes to particular software development environments
are still often based on anecdotal accounts of experiences. An appreciation of
the (often unstated) assumptions underlying agile processes can lead to a
better understanding of the applicability of agile processes to particular
situations. Agile processes are less likely to be applicable in situations in
which core assumptions do not hold. This paper examines the principles and
advocated practices of agile processes to identify underlying assumptions. The
paper also identifies limitations that may arise from these assumptions and
outlines how the limitations can be addresses by incorporating other software
development techniques and practices into agile development environments.
