The keys of iterative and incremental development

25 Apr 2022

Prefer listening over reading? Press play and enjoy

The keys of iterative and incremental development
8:33

How do you develop a project iteratively and incrementally, and what does it mean to do so? In a meetup on April 5, Lesmes López, Agile Delivery Manager (ADM) at Codurance, discussed how to develop projects iteratively and incrementally. He compared a project to a massive elephant, emphasising the need to 'eat' or manage the project piece by piece

Iterative Methodology: Slicing the Elephant

The task can seem overwhelming, much like facing a huge elephant. López highlighted that the key is "slicing the elephant." This means breaking down the project into manageable pieces, ensuring each slice delivers real value to the user and optimises productivity.

Slicing the elephant (Henrik Kniberg and Allstair Cockburn)

Team Collaboration

First and foremost is the collaboration of the team. Each team member may have a different vision of how to carry out the project or what course of action is best. Without a cohesive team, the project may lose pragmatism and agility. López explained that for the project's success, "all the different members of the project must be involved as early and as much as possible in the conception of the project. From inception and development to construction and deployment".

He highlighted three important elements to be taken into account; the value of the project for the company, the usability for the users and the real capacity of the project to be achievable from a technological point of view. 

To achieve this collaboration, López highlighted that it is important to create a unified User Story. Which he defined as something that can be explained and understood in a unified way by all team members: a joint vision.

The key points in creating this User Story are the conversation, the confirmation and the card: the conversation is the most important part, where team members should take time to explain their individual ideas. The next stage would be to bring all versions together and shape them into a single version that everyone agrees on (confirmation).

Finally, the card is about capturing that idea to have it as a reference throughout the project that can be looked at whenever necessary. 

Framing iterative incremental development

Before explaining the keys to an iterative and incremental method, López asked the participants if they considered that a methodology such as SCRUM was sufficient to implement a project in an iterative and incremental way. He then explained that it was not, as methodologies such as SCRUM provided a structure but not a way of carrying out processes.

Then, what does iterative and incremental development refer to? It's about delivering value as quickly as possible and building on each delivery. "Through fast and continuous deliveries we allow the user to interact with the service and learn their real needs and how best to deliver them, adding value with each new release," López defined.  

Within incremental iterative, a key concept is the difference between decomposing and slicing. Decomposing refers to working on individual parts of a project, but then when you try to put them together they have no connection to each other and do not facilitate usability for users. This can lead to communication breakdowns in the team or unnecessary independent testing.

López recommended that it is best to divide the project into vertical slices, that is, to make deliveries that include all the components of the service in order to have a real test of what the product is going to be so that the user can start using it. This way, in the next delivery, functions will be added or removed based on a real interaction between the users and the product. This requires collaborative work between the development teams, not individual deliveries according to work areas, but a single delivery from which value continues to be added as a whole. 

decomposition vs slicing (by Nell Killick)

User Story Mapping: Defining the Project Journey

To elaborate a more precise definition of iterative and incremental development, the ADM divided the two concepts and described: "Incremental by itself would mean that we take a functionality from the architecture, finish it and make a release. Then we do another incremental for other functionality and we do another release. And so on, until at the end we have all the functionalities that we have been incrementing one by one".

Meanwhile, the concept of iterative "starts from the fact that we have created a base of all the functionalities and what we do is iterate what we have and improve it. Each one of these iterations would be a release," he explained.

But in iterative and incremental development, "we mix these two concepts so that in each release the functionalities evolve in different parts, depending on what has real value for the user," he said. In other words, there is an increase and iteration of the functionalities, not in a linear way, but adapted to the real needs that are detected when the user interacts with each of these deliveries.

user story mapping

Key Tools

Having clarified the purpose and methodology, we moved on to more specific tools. López presented User Story Mapping (USM), a visual exercise that helps development teams to define the project's path according to the approach that offers the most pleasant user experience.

He explained that the most important part of the USM is the backbone as it defines the story of what the user wants to achieve and what steps they have to take to get there, that is, the narrative flow of user journeys. "Once we have the backbone identified, i.e. the tasks that define what the user needs, from there, we identify downwards how to develop that task. These will be the user stories that we will work on, breaking down a functionality into different functionalities that complement the main task," he said. 

Therefore, your USM is made up of the backbone, the working skeleton with that first release that contains all the minimum parts to complete the user flow, and then the following releases that are adapted to the amount of functionalities that you want to give to that user per delivery. Always prioritising what gives real value to the user. 

Blog_iterativo_incremental_4

Based on an outline by Jocelyn Goldfein, López emphasises the importance of keeping in mind that release processes will differ according to the technology of the service and the business model. If it is a web or cloud service, it is possible that these releases can be executed more quickly than in an on prem product.

This approach also allows us to consider the cost of making a mistake in our product. For example, delivering a new version of an app, users downloading it and then warning them that it is not the correct version has a greater impact than if we are making a release on a website and in a short time we can fix or modify the error. 

Deployment Strategies

López concluded with a discussion on deployment and release, advocating for managing these separately. This approach allows verification of pipeline functionality and prevents negative impacts on the client by ensuring everything is tested before release. He recommended tools like Dark-Launching, which delivers features to a subset of users, and feature flags, which allow for partial functionality deployment.

Conclusion

Iterative and incremental development is based on rapid and continuous deliveries of real value to users. It is essential that each member of the team is involved in the conception of the project and that a clear and unified vision of the actions to be carried out and the objectives is generated.

The deliveries should not be independent according to work areas, but vertical slices deliveries that make sense to the user and that he/she can start using from the first one. Based on this interaction, subsequent releases will be generated to help improve the user experience, prioritising the functionalities that are most needed to complete the tasks. The key is to balance iterations and increments according to the real needs that are detected at any given moment. 

Stay updated with meetups: