What you Need to Know about Software Development Methodologies
In this blog post we’re taking a closer look at methodologies, and how these are used in software development. A methodology is what is used by developers to break down the work into manageable progressive stages where each stage can be validated to ensure quality.
Software development is quite unlike traditional engineering sciences. You may have seen the old humorous auto garage price list that says ”Hourly rate: $10. $20 if you watch. $50 if you help.” Obviously, when it comes to mechanical fault-finding you are likely to want peace and quiet to concentrate, and the average driver is unlikely to be familiar with auto-mechanics. However, in design and development processes, user help is often not only encouraged but can actually be crucial for the success of a project.
So how do development teams work, alongside the customer, to create the finished software product? Let’s take a look at four of the most popular software development methodologies in use today.
1. Waterfall Development
This is a linear, sequential development model, where the processes are seen as flowing steadily downwards through several phases. They go from requirements to design, then to implementation, verification and deployment – followed by ongoing maintenance.
The key emphasis of waterfall development is on planning, timescales, targets, budgets and ultimately implementation of the entire system as one entity. The main advantages here are around the easy forward and backward planning and implementation, but the model has been criticised because of its inflexibility once each stage is complete, and the delayed ability for the customer to provide feedback. Still, this methodology can work well for smaller projects with limited scope.
2. Rapid Application Development
The Rapid Application Development (RAD) methodology also relies on detailed planning, but emphasises flexibility and adaptability as the built prototype model is adjusted through application and testing.
The customer can see the prototype demonstrated, and make a judgement early in the process on how fit for purpose the solution is. Programmers can contribute massively to projects by understanding and interpreting customer needs here.
RAD was designed to reflect the fact that software development is very different compared to processes such as construction development for example. Throughout development, the software itself can change the problem-solving process in many ways, which means that any knowledge gained can feed back into the requirements and design of the solution.
Typically, the RAD phases incorporate planning, user design, construction, and finally the implementation. This methodology is considered to be cost-effective for larger projects as the prototypes developed can be re-used, which helps in saving time and money. On the other hand, it can be challenging for less experienced teams to enforce consistency throughout – and the success of a RAD project relies heavily on the expertise and motivation of the development team.
3. Spiral Development
The Spiral model is typically drawn on a grid of four quadrants, with an outward growth cycle through them. The quadrants represent
- Determining objectives
- Identifying and resolving risks
- Development and testing
- Planning the next iteration
In this four step process, developers are cycling around each ring of the spiral and going through several prototypes until the detailed design has been refined enough to be coded, tested and implemented.
This approach effectively combines some of the principles of waterfall development and rapid prototyping methodologies, in an attempt to get a balanced mix of top-down and bottom-up models. A key benefit of the Spiral model is that projects are segmented, to help reduce risk and make changes easy to implement. On the other hand, it can be a costly model to use – and it is not necessarily a good fit for smaller, low-risk projects.
4. Agile Development (Scrum)
Agile Development is the most widely used methodology in the software world today. It follows an incremental cycle, where software is developed rapidly in staged releases. Once an iteration is completed, the next release continues to build on the functionality of the previous one. Each iteration is typically created in a short burst of one to four weeks.
The software will be demonstrated to the customer at each release stage, which is effectively treated like a sub-project, in its own right. Sometimes these components have standalone functionality as separate software products.
The Agile team will feature all people required to complete the work – such as programmers, product managers, analysts, technical authors and customer representatives. There is also an emphasis on communications in real time, where face to face meetings are favoured over emails and online messaging, where possible.
The main advantages of the Agile model is that it is very responsive to change. Requirements are ever evolving, progress is monitored, and the planning cycles are short. This in turn helps to reduce the risk of the project going off track and becoming expensive or unsuitable. However, the challenge for many organisations in implementing an Agile model lies in the fact that it often requires training and cultural change, in order to reduce resistance to adopting this model – as it’s so different from traditional development methodologies.