Agile Methodology

Agile is a particular approach to project management that is used in SDLC, which is based on incremental development and step by step product delivery.

It is based on adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change (according to Wikipedia).

Contrary to the Waterfall Methodology, which supposes that each phase is started only after the previous one has been fully completed, Agile states that the project is divided into multiple parts, each part going through each phase, everything being delivered to the client at the end. This way, the client can give early feedback over the product that was created, and the final software can be improved over time.

The Agile software development refers to a process that is aligned with the concepts listed in the Agile Manifesto:

  1. Customer satisfaction by early and continuous delivery of valuable software -> Instead of a feedback of the entire product at the end of the development process, the customer specifies exactly what he wants as the product is created, so that improvements can be made every time they are needed
  2. Welcome changing requirements, even in late development -> If the customer decides in the middle of the development that he wants some modifications over what he originally requested, this can be done without many approvals, budgeting and other organisational issues that would make this kind of task very difficult in a Waterfall environment
  3. Deliver working software frequently (weeks rather than months) -> Many times, a company faces delays, and project risks that were not mitigated. This may cause frustration for the customer, as he expects to see some results. Working in an Agile environment gives him some part of the product, for proving that we are actually working on their needs.
  4. Close, daily cooperation between business people and developers -> Daily stand up meetings provide the stakeholders with information regarding the status of the project, the eventual delays, and problems that appeared in the development process. Also, documentation does not stand between effective comunication, so eventual changes do not need to be argued based on documentation.
  5. Projects are built around motivated individuals, who should be trusted -> People work in a close collaboration, and every person is involved in the process. Everyone understands what it needs to be delivered, so everyone can come up with improvement ideas.
  6. Face-to-face conversation is the best form of communication (co-location) -> People discuss in meetings rather than through documentation and approval software. This encourages engagement and brings people together, connecting them for a better collaboration.
  7. Working software is the primary measure of progress -> The progress is not monitored throught test cases executed, passed and failed, but through working software. This is the most important thing when working with Agile.
  8. Sustainable development, able to maintain a constant pace -> It is important to avoid bottlenecks and stay on track, mantaining the deadlines as well as the quality of the product.
  9. Continuous attention to technical excellence and good design -> The focus is on the team, to make sure they are the best in what they do and, if they are not, they are trained, sustained for evolution
  10. Simplicity—the art of maximizing the amount of work not done—is essential -> It is important to create the best product with a limited number of resources, and to create a simple product that would achieve it’s potential without writing 500000 lines of code that would make it not that performant. Less is more.
  11. Best architectures, requirements, and designs emerge from self-organizing teams -> Each team should create it’s own pace, deadlines and goals, instead of following some general rules. This way, teams are managed easier and less pron to mistakes.
  12. Regularly, the team reflects on how to become more effective, and adjusts accordingly -> Agile is about constantly following the flow of development and adapt based on the results, changing where there is a need for change in order to minimise the effort done and deliver quality results.

How to use Agile

An agile process can be implemented through various frameworks:

  • Scrum – a framework in which teams work in sprints that usually take like two to four weeks. Each sprint is preceded by a Planning Meeting that has the purpose of prioritizing backlog tasks. During development, the tasks are moved from one status to another into a Scrum Board, that is used to track the evolution of the sprint. At the end of the sprint, the finished tasks are moved into the production environment, and the unfinished ones are moved back to backlog.
  • Kanban – Kanban is the Japanese word for visual signal or billboard. Kanban does not have sprints, being a continuous process. The tasks are aranged into a Kanban Board, similar to a Scrum board, containing four columns: Backlog, To Do, In Progress and Done. Each column can contain one or more tasks. The To Do column is filled in with tasks assigned to a certain developer. As the tasks are gaining progress, they can be moved from one column to another. A Backlog task will be moved to a To Do column when the latter is empty, as well as a To Do task will be moved to an In Progress column when the latter is empty. The top most task is the most important, so it will have the biggest priority.
  • Extreme Programming (XP) – a frameork in which teams work in sprints that usually take like one to two weeks. Unlike Scrum, in which the product owner decides the priority of the tasks but the Scrum team decides the items and their execution order, in XP the prioritising is done by the customer, and the order decided by him must be followed by the team. Also, if in Scrum the focus is on the team, roles and how things are done, in XP there is an emphasis on Engineerinng Techniques like BDD, TDD, pair programming, etc (I will explain all this notions in future different articles for better understanding). Better said, it focuses on quality software delivered based on technical emphasis.
  • Feature Driven Development (FDD) – FDD was first introduced to the world in 1999 via the book Java Modeling In Color with UML. It is focused on features, which are developed in five steps: model, build the feature list, plan, design, build the future. So instead of focusing on the process and roles as in a Scrum approach, we focus on features that are to be developed. Features are divided in phases of development that usually take no longer than two weeks. Features are usually developed in feature branches that, after development, are merghed into master branches and released to the production environment throguh pull requests (FDD is very neatly explained here)
  • Adaptive System Development (ASD) – ASD is based on a repeating set of speculate, collaborate and learn cycles. It is characterised by the fact that it is mission focused, feature based, iterative, time boxed, risk driven and change tolerant. It is an antecedent of Agile Software Development. It is called Adaptive because it is made to…adapt to the change conditions caused by different factors. Technology can go out of date, requirements can change, stakeholders might change their expectations etc.
  • Dynamic Systems Development Method (DSDM) – It is a framekwork that shaped the Agile Manifesto, which led to the forming of the Agile Alliance, a nonprofit organization committed to supporting people who explore and apply Agile values, principles, and practices to make building software solutions more effective, humane, and sustainable (according to their site). It is the longest established full project Agile approach, created as an extension of RAD (Rapid Application Development). It is very useful for projects with tight time constraint and low budget, and consists of three phases: Pre-Project, Project Life Cycle, Post-Project.
  • Lean Software Development (LSD) – LSD is an Agile framework that focuses on the problems instead of the features, by developing a culture of collaboration and continuous improvement, delivering results in a reasonable amount of time. It is a holistic way of working which gives you the necessary insights for continuous improvement. It is based on various principles that avoid building waste and tries to deliver quality results in a reasonable time.
  • Crystal Clear – It is about establishing principles and priorities that would help the team develop a valuable product for the customer, which can bring profit and success. The delivery is pretty frequent, usually taking two weeks or a month, maximum. The team comunicates in daily meetings in order to set goals and track them, and developes strategies for fast delivery. As in Scrum, Crystal Clear focuses on the people and not artifacts, and it has an emphasis on general knowledge. This means that everybody in the team should have the same level of information (technical and business), so that one person can replace a missing other. The levels of crystal method are defined by two facts: what losses can cause the pottential defects and the number of people involved.

So these are basically the most important frameworks for working in Agile.

One short note about Kanban and Scrum, they are the most used Agile frameworks and are defined as pull systems, meaning that they make sure the things to be done (identified by different use cases) are going as fast as possible from Backlog to the Customer and that bottlenecks are prevented. Both have a person to help the development team to adopt and maintain good habits. For Scrum, this person is called a Scrum master and for Kanban is called an Agile Coach.

When to use Agile

  • The team is comfortable with change and is open for flexibility
  • The project is new, not updated (it works for updated projects too, but new projects are best suited for Agile)
  • When tight deadlines and frequent, changes are to be expected
  • When fast delivery is more important than quality
  • When the team is willing to think outside the box and not following guidelines

Advantages of Agile:

  • Nothing is strictly established, so there is always room for easy change and improvement, ensuring the up-to-date of the product that you are building
  • Sooner feedback and bigger probability to deliver a quality and useful software
  • Constant fixing of problems
  • More effective communication

Downfalls of Agile:

  • If not throughly managed, you may end up out of budget because of too many changes
  • Initial planning might prove unuseful
  • The product might deviate from the initial plan

These are some basic information of Agile, that I have decided to share with you, based on what I have learned over time and based on my work experience. If you didn’t quite understand the process of Agile development, don’t worry. I will come back with subsequent articles regarding what each of the above frameworks mean and how would a regular development process look in each of them, so stay tuned.