The importance of agile in software development
Why has agile methodology proven to be such a game changer in the software world? It all started way back in the early 2000s when there was a realization that applying waterfall methods to software projects was neither efficient nor effective. The practice of tackling tasks in series i.e. first analysing requirements, then designing a solution and finally developing the solution and delivering the results, had many limitations. Whilst this waterfall approach was well suited for projects which were more of a manufacturing nature, and you had to wait for one step to complete before embarking on the next step, it proved to be very ill suited when developing software. Because software can be complex, making it difficult to estimate when the code can be delivered, software projects running in water fall methods often result in very long delays and lack of functionality.
Analysis, development and testing in one cycle
As a result, agility in software projects is all about a continuous cycle of analysis, design, development and testing. That’s right – analyse, design, develop, test …and repeat!
This iterative approach ensures that the problem is being broken down into parts which are manageable and can be worked upon within a shorter timeframe. Agile is all about defining the minimum viable product which will deliver enough functionality and value to drive product uptake, in a fast and efficient manner. Once this MVP is deployed, then the aim is to incrementally deliver more value in the form of either more features, which translate into more functionality directly to the customer, or else more technical robustness such as security and hardening of the software itself. Although this might not be considered as delivering value, it is essential to have a sound product.
Focus on Test driven development
One of the core fundamentals of agile is test driven development i.e. to build software starting with its test first. This is absolutely crucial because it allows the testing of this software to be built inherently into the system, allowing for test automation and the possibility for continuous deployments. This is such an important feature that Robert Martin, one of the founders of the agile mindset, argues in his book Clean Agile, that developers should refuse to develop code any other way.
There are different agile methodologies such as XP, Scrum etc. They vary in their implementation of the agile principles, yet at their very core they all implement the fundamentals. One of the most popular methods is Scrum which implements a number of ceremonies to ensure good governance, transparency and collaboration. It starts with the principle that the scrum team is capable of handling the task at hand, but largely allows the team to self-organize. Two important roles in a scrum team are the product owner and the scrum master.
The product owner is the person representing the business function of a company, understanding the high level requirements as requested by non-technical counterparts and translating them into user stories which the development team can then translate into workable tangible tasks. These tasks need to clearly define the definition of done to ensure that both developers and the product owner have agreed upon what the results of this tasks should look like.
The scrum master plays an important role of ensuring that there are no impediments in the paths of the developers, and that each person is capable of handling the tasks he has committed to deliver.
Scrum requires the implementation of sprint cycles, which are typically one or two week development cycles. Each scrum team plans for the sprint cycle through planning meetings, daily stand-ups to assess progress and sprint review and retrospect meetings to show the work delivered to business users.
As a result, agile does require better planning, because the team needs to know what they are expected to be working upon throughout the sprint cycle. Questions which arise throughout the development phase should be tackled immediately, and hence it is important that key stakeholders such as business analysts or owners ensure that any queries and doubts are clarified as early as possible.
It is important to maintain a healthy backlog of tasks such that developers can pick up additional tasks in case they have spare capacity or are stuck with some other tasks.
Agile delivers better visibility of how a software project can be delivered. After only very few sprints, scrum teams learn how many tasks they are able to deliver in a given sprint. Coupled with techniques such as scrum poker, whereby developers vote and agree on the complexity of tasks and the effort needed to deliver each task, the team learns to commit to the right number of deliverables. As a result the business knows when it can expect to deliver particular products, what the first deliverable will look like and how incremental deliverables can be deployed.
Agile methodology for software can be compared to planning a trip from one city to another. If you were to travel from Paris to Rome, you’d look at the map and decide your first next destination, and focus on getting to that destination. It is however important to keep the end goal in mind. You definitely don’t want to end up derailed in Berlin!
At thewebally, we use agile to deliver software solutions incrementally and efficiently, always iterating to take customer feedback into consideration. We help you assess what your minimum viable product should be, by prioritizing what you deem as most important and crucial.