Agile software development

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.

History

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.

Origin

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.

Amplify learning

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.

What is SCRUM?

Scrum is a process in which a set of good practices are applied on a regular basis to work collaboratively, as a team, and obtain the best possible result of a project. These practices support each other and their selection is based on a study of how highly productive teams work.

In Scrum, partial and regular deliveries of the final product are made, prioritized by the benefit they bring to the recipient of the project. Therefore, Scrum is especially suitable for projects in complex environments, where you need to get results soon, where requirements are changing or poorly defined, where innovation, competitiveness, flexibility and productivity are fundamental.

Scrum is also used to solve situations in which the client is not delivering what he needs, when the deliveries are too long, the costs skyrocket or the quality is not acceptable, when the ability to react to the competition is needed, when the moral of equipment is low and rotation is high, when it is necessary to identify and solve inefficiencies systematically or when you want to work using a process specialized in product development.

See in detail what are the benefits of Scrum, its fundamentals and its requirements.

The process

In Scrum a project is executed in short time cycles and fixed duration (iterations that are usually 2 weeks, although in some teams are 3 and up to 4 weeks, maximum limit of real product feedback and reflection). Each iteration must provide a complete result, an increase in the final product that can be delivered with the least effort to the client when requested.

The process starts from the prioritized list of objectives / requirements of the product, which acts as the project plan. In this list, the client (Product Owner) prioritizes the objectives by balancing the value that they provide with respect to their cost (which the team estimates considering the Definition of Fact) and are distributed in iterations and deliveries.

The activities that are carried out in Scrum are as follows (the times indicated are for iterations of 2 weeks):

Iteration planning

The iteration planning meeting is held on the first day of the iteration. It has two parts:

Selection of requirements (2 hours). The client presents the team with the prioritized list of requirements for the product or project. The team asks the customer the doubts that arise and selects the most priority requirements that it foresees that it will be able to complete in the iteration, so that they can be delivered if the client requests it.

Iteration planning (2 hours). The team elaborates the list of tasks of the iteration necessary to develop the selected requirements. Effort estimation is done jointly and team members self-assign tasks, self-organize to work even in pairs (or larger groups) in order to share knowledge (creating a more resilient team) or to solve together objectives especially complex.

Execution of the iteration

Each day the team holds a synchronization meeting (15 minutes), usually in front of a physical board or blackboard (Scrum Taskboard). The team inspects the work that the rest is doing (dependencies between tasks, progress towards the goal of the iteration, obstacles that may impede this objective) to be able to make the necessary adaptations that allow meeting the forecast of objectives to be shown at the end of the iteration. At the meeting, each team member answers three questions:

  • What have I done since the last synchronization meeting to help the team achieve its goal?
  • What I am going to do from this moment to help the team to fulfill its objective?
  • What impediments do I have or will I have that prevent us from achieving our objective?

During the iteration the Facilitator (Scrum Master) ensures that the team can maintain the focus to meet its objectives.

Eliminate obstacles that the team cannot solve on its own.

It protects the team from external interruptions that may affect the goal of the iteration or its productivity.

During the iteration, the client together with the team refine the list of requirements (to prepare them for the next iterations) and, if necessary, change or replan the project objectives (10% -15% of the time of the iteration) with the objective of maximizing the utility of what is developed and the return on investment.

Inspection and adaptation

The iteration review meeting is held on the last day of the iteration. It has two parts:

Review (demonstration) (1.5 hours). The team presents the client with the requirements completed in the iteration, in the form of an increase of the product prepared to be delivered with the minimum effort. Depending on the results shown and the changes that have taken place in the context of the project, the client makes the necessary adaptations in an objective manner, starting from the first iteration, rescheduling the project.

Retrospective (1.5 hours). The team analyzes how their way of working has been and what are the problems that could prevent them from progressing adequately, continuously improving their productivity. The Facilitator will be responsible for eliminating or scaling identified obstacles that are beyond the scope of action of the team.

What is the agile methodology?

The AGILE methodology is a practice that promotes the continuous iteration of development and testing throughout the life cycle of software development of the project. Both the development and the test activities are concurrent unlike the cascade model.

Agile Vs Waterfall Method

The Agile and Waterfall models are two different methods for the software development process. Although they are different in their approach, both methods are sometimes useful, depending on the requirement and the type of project.

SCRUM is an agile development method that focuses specifically on how to manage tasks within a team-based development environment. Basically, Scrum is derived from the activity that occurs during a game of rugby. Scrum believes in training the development team and advocates working in small teams (for example, 7 to 9 members). It consists of three roles, and their responsibilities are explained below:

Scrum Master

The Master is responsible for setting up the team, speed meeting and eliminating obstacles to progress, so there can be a better outcome, improved and above all results.

Owner of the product

The product owner creates a product record, prioritizes the backlog and is responsible for delivering the functionality in each iteration.

Scrum team

The team manages its own work and organizes work to complete the sprint or cycle

Product Stack

This is a repository where the requirements are followed with details about the non-requirements that must be completed for each version. The owner of the product must maintain it and give it priority, and must distribute it to the scrum team. The team can also request a new addition, modification or elimination requirement

Process flow of Scrum methodologies

The process flow of the scrum tests is as follows:

Each iteration of a scrum is known as Sprint

The product portfolio is a list where all the details are entered to obtain the final product

During each Sprint, the main elements of the product portfolio are selected and become the Sprint portfolio

The team works in the defined sprint portfolio.

Team verifies daily work.

At the end of the sprint, the team delivers the functionality of the product.

Extreme programming (XP)

The extreme programming technique is very useful when there are constantly changing demands or requirements from the clients or when they are not sure of the functionality of the system. He advocates frequent “releases” of the product in short development cycles, which inherently improves system productivity and also introduces a checkpoint where customer requirements can be easily implemented. XP develops software keeping the client on target.

Glass methodologies

The methodology of the crystal is based on three concepts.

Chartering: several activities involved in this phase are to create a development team, perform a preliminary feasibility analysis, develop an initial plan and refine the development methodology

Cyclical delivery: the main development phase consists of two or more delivery cycles, during which the team updates and refines the launch plan.

Implements a subset of the requirements through one or more program tests that integrate iterations.

Integrated product delivered to real users.

Review of the project plan and development methodology adopted.

Conclusion: the activities carried out in this phase are the implementation in the user’s environment, post-implementation reviews are carried out and reflections are made.

Dynamic software development method (DSDM)

DSDM is a rapid application development (RAD) approach to software development and provides an agile project delivery framework. The important aspect of DSDM is that users must actively participate and teams have the power to make decisions. Frequent delivery of the product becomes the active focus with DSDM. The techniques used in DSDM are:

  • Time Boxing
  • Rules of MoSCoW
  • Prototyping
  • The DSDM project consists of 7 phases.
  • Draft project
  • Feasibility study
  • Business study
  • Iteration of the functional model
  • Design and build iterations.
  • Implementation
  • Post-project
  • Character driven development (FDD)

This method focuses on the characteristics of “design and construction”. Unlike other agile methods, FDD describes very specific and brief phases of the work that must be carried out separately by function. Includes domain tutorial, design inspection, construction promotion, code inspection and design. FDD develops products following the things in the objective.

Modeling domain objects

Development by feature

Component / class property

Featured teams

Inspections

Configuration management

Regular constructions

Visibility of progress and results.

Development of Lean Software

The Lean software development method is based on the principle “Just-in-time production”. Its goal is to increase the speed of software development and lower costs.

Lean development can be summarized in seven steps.

  • Eliminating waste
  • Amplifier learning
  • Defer commitment (decide as late as possible)
  • Early delivery
  • Empower the team
  • Building integrity
  • Optimize the set