What Is Agile?
The agile concept arose from the limitations of the waterfall methodology, where the detailed planning phase was critical for a smooth end of the project. This approach was appropriate when the final product and all the middle steps were sequential, completely defined and predictable.
Most of the software development projects are not actually able to follow such a fixed path and need to be prepared for continuous improvements and even new requirements that show up during products' lifecycle. This is where agile techniques gain relevance thanks to their flexibility and adaptability to new needs.
It is also important to notice that customers do not always have a precise idea of the final product they want, and the market keeps evolving during the development phase. Therefore, it is often necessary to add value to the initial requirements with all the new information that came up from a fast-paced environment.
With this situation in mind, 17 software developers met in 2001, in Utah, to find new lightweight development methods. As a result of this encounter, they published the Agile Manifesto which covers the “better ways of developing software by doing it and helping others do it” and includes 4 values and 12 principles.
Agile philosophy allows teams to adapt rapidly to changing customer requirements or environments where continuous improvements are expected. Agile software development is based on an incremental and iterative approach where there are no final products, but continuously improving ones.
Although agile methodologies can be adopted by many industry sectors, there is extensive evidence of their effective use in the software development industry due to the need to adapt software products to the never-stopping market.
There are several agile development methodologies such as Extreme Programming (XP), Scrum, Feature-Driven Development (FDD), Kanban, Crystal, etc. All of them share a common core, but each one has its own approach. They basically incorporate iteration and incremental deliveries, including continuous improvement in all its processes. In addition, all of them are focused on empowering people to collaborate and make all decisions together quickly and effectively.
An agile team is not a predefined group of people that have a specific number of roles/skills but a cross-functional team with all the competencies needed to define, build, test and deliver working increments of the product such as developers, business analysts/customers, testers, designers, etc.
Business stakeholders and developers must work together to align the product with customer needs and company goals. Agile teams are also self-organized teams where their members choose how to carry out their work rather than being managed and organized by others outside the team. Agile encourages teamwork, accountability and face-to-face communication.
Agile methodologies also emphasize the importance of teamwork and collaboration. Their members learn how to collaborate effectively and efficiently in order to complete the planned work during a time slot. We can summarize all this information by saying that the team model in agile is designed to optimize three aspects: flexibility, creativity and productivity.