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.
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:
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity -- the art of maximizing the amount of work not done -- is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Based on my experience, and completed by the 12 principles, I would propose the following building blocks of agile development depicted below:
In a nutshell a short description of the building blocks:
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.
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.
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.
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.
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.
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.
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.
The result shall be shippable and working software at the end of each job or iteration.
Visualizing the tasks and their state is the key to making optimization opportunities visible and increasing efficiency.
It is essential to track and monitor the progress of the job or iteration.
Following, a short description of two popular agile development frameworks: Scrum and Kanban.
Scrum comes with a defined process as depicted below:
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.
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.
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.
The following diagram shall give you help with deciding whether you need an agile framework:
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