Most of us think linearly, that is step by step, from start to finish. Think about making something physical, like a wooden table. Your mind quickly starts creating steps leading to that goal. Something like this feels familiar?
- Buy lots of raw wood.
- Buy sandpaper.
- Buy varnish.
- Make four legs.
- Make table top.
- Apply sandpaper.
- Join it all up.
- Apply varnish.
Sorry, I’m no expert in the art of table making but most of you would have a similar list of actions. This is linear, meaning that the table cannot be used at all unless all the steps are complete. If you don’t have a dining table at all in your house, then you’ll probably have to sit somewhere else to eat for a couple of days (depending on how good you are at making a wooden table).
Now think about writing software, say a website to help out your friend sell hats for cats online. Automatically you’ll start thinking:
- Design frontend.
- Develop backend.
- Implement frontend.
- Integrate payment systems.
- Integrate email notification service.
- Test.
- Deploy.
- Handover.
There’s probably a lot of intermediary steps but this is the gist of it all. Again, if you look through carefully, your friend does not get her website unless all of the steps are complete.
Iterative development only means that instead of doing everything in linear sequential steps, you are doing it in cycles. Delivery is key here meaning that you should aim to deliver at least once by the end of each cycle but mature teams are able to deliver the product more than twice each cycle. Thinking in line with the Scrum methodology, each cycle (or sprint) can be one week or up to one month. In our case, if we choose that one cycle is one week, here’s what it might look like:
- Cycle 1:
- Design basic frontend.
- Implement mock backend.
- Implement basic frontend.
- Integrate mock payment system.
- Integrate mock email notification service.
- Deploy and deliver.
- Cycle 2:
- Improve frontend design.
- Implement basic backend functionality still mocking rest.
- Implement improved frontend design.
- Integrate mock payment system.
- Integrate mock email notification service.
- Deploy and deliver.
- Cycle 3:
- Implement more backend functionality.
- Revisit frontend designs.
- Implement frontend design changes.
- Integrate basic payment system.
- Integrate mock email notification service.
- Deploy and deliver.
- Cycle 4:
- Implement more backend functionality.
- Revisit frontend designs.
- Implement frontend design changes.
- Integrate basic email notification service.
- Deploy and deliver.
- Cycle 5:
- Implement more backend functionality.
- Integrate advanced payment system.
- Deploy and deliver.
- Cycle 6:
- Implement more backend functionality.
- Revisit frontend designs.
- Implement frontend design changes.
- Integrate advanced email notification service.
- Deploy and deliver.
Here, you are deploying and delivering the product to your friend every week so that she can inspect the whole flow. This also allows you to receive feedback regarding the entire product every week which is not possible in the linear way of doing things (as your product is not ready for your friend to look at until the end). Also you don’t have to come up with all the cycles at once. You basically have to have the current cycle plus at least next two cycles within your sights.
Mocking things is very important in this flow as it helps your friend to “feel” how the website will look at the end. The mocks allow her to go through the checkout flow as if it was actually there. It might seem like a waste of time as you are developing something that you know will get replaced at the end anyway, it still has tremendous value as there is nothing worse than the client changing her mind and wanting to go in a completely different direction towards the end of the project. The mocks allow the client to focus as they get to see the product as it is being developed while also giving you continuous feedback.
While this was a simple example, it gets quite a bit complicated when new projects are undertaken in large scale organisations as there can be lack of clarity before a project is started. I’ll do another post on the Scrum Framework for this sometime in near future but this post provides a base that can help you understand Scrum as it is also about iterative software development.
Again, if you observe the technological advancements that humans has achieved so far, you’ll notice the iterative approach at large scale. We didn’t aspire to build shiny cars from day one. We first started with the wheel, advanced to wheel barrow, horse cart, trains and then finally a built car.
Hope you enjoyed this article. I’ll appreciate it very much if you could leave your thoughts in the comments below.