Everybody is talking about agile development but not many companies have implemented it successfully or decided to abandon the traditional software development process. Becoming agile is not something that can be achieved overnight. There are two key elements to become agile: to be organised and to act continuously. But how can you combine those things and fit them into your development cycle to actually become an agile company?
Becoming agile is a process that cannot be implemented like a tool. The whole company needs to change and gain agility. When describing development strategy the word agile was used first at a small congress in 2001. Since then the concept of Agile has grown and has now became a necessity : it allows developers to adapt quickly to customers requests and to deliver a high-quality software.
The definition of the word “agile” is to be quick and well-coordinated in movement as well as have an ability to think quickly. So mainly adapt and coordinate with the environment.
A company becomes agile by gaining agility. That can be achieved through a continuous cycle composed by continuous requirements analysis, continuous design improvements, continuous integration and continuous testing. See how the word “continuous” becomes important?
There is one more thing that is essential to become agile: it’s the mindset of the people working towards gaining agility. Those who are working towards this approach are the people that need to understand why becoming Agile can be a great help when having to re-adapt constantly to a fast changing environment with constantly changing requirements.
Traditional software development
The Agile development methodology started to spread starting from 2002, but many companies still use the more traditional waterfall model, struggling to implement agile methodology. The traditional software development process is typically structured in phases:
- A requirements gathering phase, where usually analysts and business stakeholders decide what features their software/application needs;
- A design phase, where analysts and architects or senior developers decide the design;
- A coding phase carried out by the development team;
- A testing phase to see if everything works, performed by developers and QA;
- At the end user acceptance testing will be done, right before signing off and release.
What you notice while reading this kind of process it that each part of the development process happens only once. There is not much interaction between the different phases, which results in a slow and not very adaptable process. So if there are changes to be made after the project/feature is already running, there are two options: wait until the feature is complete and then make changes or introduce the changes right away but the whole development process will be re-started from the beginning and the delivery will be delayed. An agile approach can reduce this delay significantly.
The Agile manifesto is the movement that started in 2001 with a small conference in Utah, where all the people who were talking and writing about “Light” or “Lightweight” methodologies and processes met to discuss this topic further. At this get-together they came up with the word “agile”, which they felt was more appropriate. Since then these people call themselves The Agile Alliance and when we talk about agile we talk about the values that are stated in the Manifesto for Agile Software Development.
The agile manifesto values:
- “Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan”
How to achieve Agile development
1. Implement the right Agile methodology
There are different agile methodologies that can be implemented, together or alone, and they promote the values of the agile manifesto:
- DSDM (Dynamic systems development method): is an agile project delivery framework used as a software development method. It brings together flexibility and agility necessary for successful organisation. It was designed to be easily tailored and used together with other traditional methods or complement other agile approaches like Scrum.
- Scrum: Scrum is the most used agile software development approach. This approach enables the development teams to respond to new emerging requirements and to deliver quickly adapting constantly to new demands. In teams that adopt Scrum, you’ll find a Scrum Master: his purpose is to organise, break down and prioritise tasks and to remove impediments, to help the team deliver on time.
- XP (eXtreme Programming): is a software development methodology intended to deliver high-quality software and to be responsive to constantly changing customer requirements. It takes best practises of software development to extreme levels and adopts agile principles at the same time.
So what has really changed in the agile methodologies and approaches compared to a more traditional waterfall method are the fixed variables in the project and the tasks subdivision.
In the traditional approach the features that need to be developed are fixed, while quality, time and price are variable. Long time passes between each feature is released and the customer has to wait for the feature to be finished to make changes to it.
In an Agile environment, time, costs and quality are fixed while features are the variables. The big feature is broken into smaller tasks and the releases are made into short iterations (ideally 10 working days). The customers can see the progress quickly and the development team can quickly adapt to new requests and requirements. The 3 approaches listed above can be used together. There is no rule what to use when. Your company has to find out which combination works best based on your achievements and goals, adapting and changing constantly.
This kind of development environment focusses collaboration between teams and that is why developers and QA teams need to become feature teams.
2. Create a Feature Team
After deciding which Agile approach you would want to have, you have to put together you Agile teams, or Features Teams, to help your company gain agility.
- What is a feature team?
A feature team “is a long-lived, cross-functional, cross-component team that completes many end-to-end customer features – one by one.”
This means that the team is composed by people that have different roles and that are able to produce a feature from the very beginning to the very end, without having to interact with other teams.
With the traditional software development structure, your company would have one group composed by analyst, one group composed by architects, one by developers, one by testers and so on. With a feature team, your company will have a different teams each composed by one/two analyst(s), one/two architect(s), one/two developer(s) and one/two testers.
- How many people should be in a feature team?
If the company adopts a Scrum approach, the team will have usually 7 members (+/- 2 members), which is stated to be the ideal number for close collaboration.
- What are the benefits of having feature teams?
The purpose of a feature team is to deliver the best possible value to the customer, because the Agile is a customer-centric approach.
“Feature teams are an essential element to scaling up agile development. Without a feature team structure your organisation is likely to create numerous wastes and sub-optimisations that lead to a sequential development cycle.” Feature teams structure has the capability to resolve many of the wastes that a component-team, waterfall process oriented, would create. The downside to a feature team is that it introduces change and challenges.
- How do feature teams work on a project/feature?
With the Scrum methodology there is usually a Scrum Master, that will prioritise tasks and break big task into small iterations or sprints and find new requirements with frequent iterations with clients. They would also remove impediments and distraction to help the teams deliver on time and even speed up the releases.
Different feature teams can work on a same big feature – every team has a different smaller task, working at the same time with shared code. This will result in more reviews on the same code and better quality of the whole code.
- Can feature teams work remotely together?
Feature teams should be co-located for faster, better and more efficient communication, collaboration and coordination. Regular meetings to reflect how to become more effective, tune and adjust behaviour accordingly are also requirements.
- How does the team leader/Scrum Master interact with the other team members?
The team leader or Scrum master should talk regularly with the team, giving and asking for feedback, understanding what the team needs. It is also advised to mix tools from different technologies, instead of using just one at all costs. This continuous adapting based on the requirements and needs is also one challenging aspect of an agile approach.
- How should the documentation be written?
Documentation when adopting agile methodologies should be kept at the bare minimum amount of information that will allow a feature to be developed, and always broken down into very small units.
3. Fundamental tools for agile development
Short iteration and development cycle make also sure that the software works. With longer iterations if something is not working it is more difficult to search through the whole code to find that one pieces that is not working.
Combining short sprints and regression tests every new build with test automation is the key to continuous development and continuous integration: it will speed up the whole testing process because searching through small bits and pieces of code instead of a massive one is easier and quicker.
If you want to learn more about the benefits of test automation you can read this article “10 Benefits of Automated Testing”.
Agile development and mobile apps
Mobile application development is the the perfect environment to implement Agile processes: apps need to have short release cycle, bugs and features need to be removed/added quickly so that end users do not lose interest in the app. Agility is in this case the core requirement. This kind of development methodology is the perfect fit for this scenario – keeping iterations and releases short, clients and user happy and the possibility to react fast to user’s requirements while delivering a high-quality product.