What about Agile Development?
Tags: agile, productivity, efficiency, team
Published: 2022-01-06 15:22:26

This article shall give you an overview of agile development and help you decide whether Scrum or Kanban can meet your needs.

But, first of all, a clarification about what agile means.

## 12 Principles of Agile Methodology

In 2001, a group of experts in the field of software development methodologies and frameworks got together to define the [12 principles of the Agile Manifesto](https://agilemanifesto.org/principles.html):

1. Our highest priority is to **satisfy** the customer through **early** and **continuous delivery** of valuable software.
2. Welcome **changing requirements**, even late in development. Agile processes harness change **for the customer’s competitive advantage**.
3. **Deliver** working software **frequently**, from a couple of weeks to a couple of months, with **preference** to the **shorter** timescale.
4. Business people and developers must **work together daily** throughout the project.
5. Build projects around motivated individuals. Give them the **environment** and **support they need**, and **trust them** to get the job done.
6. The most **efficient** and **effective method** of conveying information to and within a development team is **face-to-face conversation**.
7. Working software is the primary measure of progress.
8. Agile processes promote **sustainable development**. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
9. Continuous attention to **technical excellence** and **good design** enhances agility.
10. **Simplicity** -- the art of maximizing the amount of work not done -- **is essential**.
11. The best architectures, requirements, and designs emerge from **self-organizing teams**.
12. At regular intervals, the team **reflects** on how to become **more effective**, then tunes and adjusts its behavior accordingly. 

---

## Building Blocks of Agile Development

Based on my experience, and completed by the 12 principles, I would propose the following building blocks of agile development depicted below:

![Building Blocks of Agile Development](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pc8m2gkqmklg0d6e5bhx.png)

In a nutshell a short description of the building blocks:

### Objectives
The objectives define the root cause of all the sweat and hurt when building software. The main aim should be a satisfied customer. In our case - with regards to agile development - the **customer** would be happy if he could bring in his **requirements and needs**, at any time, with any impact it means to the current development situation. Also, he appreciates the **continuous delivery** of the software he requested at **short time intervals**.

### Participants
One of the basic ideas of agile development is that the **customer**, **business people**, and **development team** work **jointly together** to create the best solution possible, meeting the requirements. 

### Collaboration
The beforehand mentioned participants will work together and will exchange their ideas regularly. Business people and the development team should meet in the best case on a **daily** basis for at least a short synch about progress or discuss problems.

**New** requirements or **changes** of existing **requirements** should be discussed and evaluated which impact they might have on the existing implementation.

It is essential that all participants work together and **support** each other to get the best result possible.

Also - regularly - the participants shall **reflect** their way of working together to optimize the process continuously.

### Planning
All requirements of the customer (mostly functional) and non-functional once shall be collected in a **backlog**.
There, all requirements can be estimated and prioritized.

Based on the estimations and available development team size, the (constant) **workload** can be defined to **reasonable** plan the following implementation of features. 

Visualizing the tasks or user stories the team is currently working on creates **transparency**. It helps to **track** the **progress** and to measure the iteration's quality.

### Development
Agile development requires **a self-organizing team**. The team members are specialists and bring in their know-how, experience, and motivation.

It is beneficial to have players with **excellent technical skills** who can utilize the necessary technologies to implement the requirements perfectly.

A key aspect in agile development is to **focus on working software**. At the end of each iteration, the result should be a software increment covering the requested requirements.

In order to be able to bring in the working power ideally, the development team should have the **ideal environment**. Everything should be in place from the code editor and the code repository until the cloud-driven pipelines with automated testing to optimize the development process.

---

## Focusses and Objectives of most agile frameworks

### Self-Organized Team
It is crucial to have a team that works without the need for instructions in agile development. Every team member knows the process and the dos and don'ts and acts accordingly.

### Pull-Principle
The idea is that each development team member can take (pull) a job according to his availability. This means that everyone commits to a specific task at a particular time. 
No one will push tasks to a developer; instead, jobs are accepted and taken by the development team members.

### Software Increment Orientation
The result shall be shippable and working software at the end of each job or iteration. 

### Transparency
Visualizing the tasks and their state is the key to making optimization opportunities visible and increasing efficiency.

### Measure Progress
It is essential to track and monitor the progress of the job or iteration.

---

## Popular Agile Frameworks

Following, a short description of two popular agile development frameworks: Scrum and Kanban.

### Scrum
Scrum comes with a defined process as depicted below:

![Scrum Process](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kk5yirgra89hucnemknh.png)

The product owner collects all **requirements** in a **backlog**, prioritizes them, and plans a **manageable amount of work** in a **defined time** (sprint). Therefore, it is often used to develop a new feature or an entirely new product.

For the planning of a sprint, beforehand, the effort of the work will be estimated by the team in a virtual entity called story points. These story points will be used during the sprint to progress the team's velocity.

At the end of each sprint, the **results** are **software increments**, e.g., new features or functions in an app.

Also, in Scrum, there are clearly defined roles of the participants, and due to its **restrictions**, it is supposed to be easier useable for teams with less experience.

### Kanban
The primary purpose of Kanban is the **visualization** of work. Like in Scrum, the requirements (**stories**) are collected and then planned for implementation (**to do**). The stories will be written on cards and put onto the Kanban board as depicted below.

![Kanban Board](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kfou5l79rpp4d3ic7i04.png)

In Kanban, an essential principle is to **focus** on a sensible amount of **work** that the development team can **achieve**. Therefore, the number of cards in the board columns is limited. The current number of cards in a column is called the **work in progress** (WIP) and shows the team's current velocity.

Like in Scrum, the result of each of the stories should be a new software increment.

In contrast to Scrum, Kanban does **not require specific roles** and is not as restrictive. Therefore it is more flexible and can be used for reactive jobs, like planning a bug-fixing for productive software.

---

## Do you need an agile framework?

The following diagram shall give you help with deciding whether you need an agile framework:

![Decision Tree Agile](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rlunf9hqzyqyxhlu2hp9.png)

--- 

## Summary

Which is the proper development framework for your project? I can't tell you. But I hope this article gave you some insights into whether it could be an agile development framework.

Photos on [Unsplash](https://unsplash.com)