General outline of an agile methodology for software development
Agile software development involves a decision-making approach in software projects, which refers to software engineering methods based on iterative and incremental development, where requirements and solutions evolve over time according to the need of the project . Thus, the work is carried out through the collaboration of self-organized and multidisciplinary teams, immersed in a shared process of short-term decision-making.
Each iteration of the life cycle includes: planning, requirements analysis, design, coding, testing and documentation. The concept of “Finished” (Done) is of great importance, since the objective of each iteration is not to add all the functionality to justify the launch of the product to the market, but to increase the value by means of “software that works” (without errors).
Agile methods emphasize face-to-face communications instead of documentation. Most of the agile teams are located in a simple open office, sometimes called “launching platforms” (bullpen in English). The office should include reviewers, documentation and help writers, iteration designers and project managers. Agile methods also emphasize that functional software is the first measure of progress. Combined with the preference for face-to-face communications, generally agile methods are criticized and treated as “undisciplined” by the lack of technical documentation.
The modern definition of agile software development evolved in the mid-1990s as part of a reaction against heavily structured and strict “heavyweight” methods, extracted from the cascade development model. The process originated from the use of the cascade model was seen as bureaucratic, slow, degrading and inconsistent with the forms of software development that actually performed an efficient job.
Agile and iterative development methods can be seen as a setback to the practices observed in the early years of software development (although at that time there were no methodologies to do so). In 2001, prominent members of the community met in Snowbird, Utah, and adopted the name “agile methods.” Soon after, some of these people formed the “agile alliance”, a non-profit organization that promotes the agile development of applications. Many methods similar to agile were created before 2000. Among the most notable are: Scrum (1986), Crystal Clear (transparent crystal), extreme programming (in English eXtreme Programming or XP, 1996), adaptive software development, feature driven development, Dynamic Systems Development Method (in English Dynamic Systems Development Method or DSDM, 1995).
The Agile Unified Process of Scott Ambler or Agile Unified Process (AUP) in English is a simplified version of the Rational Unified Process (RUP). It describes in a simple and easy to understand way to develop business software applications using agile techniques and concepts that still remain valid in RUP. The AUP applies agile techniques including Test Driven Development (TDD), Agile Modeling, Agile Change Management, and Database Refactoring to improve productivity.
Lean software development
Lean software development methodology (approximate translation of lean: “fine” or “slender”) is a translation of the principles and practices of how to produce lean, to the area of software development. Initially, originated in the Toyota Production System and now, supported by a current that is emerging from the Agile community. This method offers a solid theoretical framework based on experience for agile management practices.
The lean software development term was used for the first time as the title of a conference organized by the ESPRIT initiative of the European Union.
Without maintaining any relationship, Robert “Bob” Charette, raised a year later the concept of lean software development as part of his research work on better ways to manage risks in software projects.
Later, in May 2003, Mary Poppendieck and Tom Poppendieck present their book “Development of Lean software” . The book presents the traditional Lean principles in modified form, as well as a set of 22 instruments and tools and comparisons with other agile practices. The participation of Mary and Tom in the agile software development community, including lectures at several conferences, has given rise to such concepts, which are more widely accepted in the agile development community. Examples of this would be the use of the term “lean-agile” by consulting companies such as NetObjectives Pace and CC, as well as the inclusion of some of these concepts.
The development of software is a continuous learning process, to which the challenges of the development teams and the size of the final product are added. The best approach to address an improvement in the software development environment is to amplify learning. The accumulation of defects should be avoided by running the tests as soon as the code is written instead of adding more documentation or detailed planning. Different ideas could be tested by writing code and integrating it. The process of collecting user requirements could be simplified by presenting the screens of the end users so that they can make their contributions. The learning process is accelerated with the use of short iterations each of them accompanied by refactoring and integration tests.
Increasing feedback through short meetings with clients helps determine the current stage of development and adjusts efforts to make improvements in the future. During the meetings, both the clients and the development team manage to learn about the scope of the problem and look for possible solutions for a better development. Therefore, customers better understand their needs based on the result of development efforts and developers learn to better meet these needs.
Another idea to extend the learning is through the integration of the client in the development environment to concentrate communication on future solutions and not on possible solutions, thus promoting the birth of the solution through dialogue with the client.