Starting from room-sized big box computer to credit card sized smartphones, technology has revolutionized over the decades. There was a time in history when the man had to do everything on their own but that episode is long gone, machinery and technology have taken over now.
Now man does not need to do anything through bare hands, giving commands and letting robots and machinery handle your tasks for you is the routine of today’s world.
Just take the example of Siri (a virtual assistant that works with Apple), you don’t do anything without asking Siri about it, your family might feel jealous of how much you interact with her instead of them. Just try to recall the last time you called somebody on your own or opened the weather app to check the temperature.
I am sure, you don’t remember it. You just ask Siri to do your tasks on your phone. She is more like your personal assistant that responds to your voice commands accordingly. Isn’t it just hilarious? Can your forefathers even imagine living life and doing simple tasks of a day like you do? The answer is, no, for sure.
Well, to do the wonders in the field of technology, many scientists have worked for decades and many are still working to take it to the next heights for future generations. Behind any machine or any working technology, lies software.
And to develop it, many techniques, methodologies along with tools, models and external elements are required to successfully achieve what you have in your mind. There are so many models and techniques in the market which can help you develop the software you have to want for your business, completely customized according to your needs.
Selecting the methodology:
One of the first decisions which you have to look into is the selection of development methodology. It is not about the style you want to opt for the project or a specific technical approach, although these terms are all used interchangeably. If you have not learned in depth about the Project Management Methodologies that it can be pretty hard for you tell them apart or to understand what makes them different.
It can make you think that it does not really matter what project management method you choose. And this thinking will make you miss out the distinct advantages of different methodologies, which might be your basic requirement.
There are many models out there such as Waterfall model, Iterative model, Agile model, RAD model, Spiral model, Prototype model, Incremental model, and V-model. So which one is best for you depends on the characteristics, the procedure of each model, merits and demerits, advantages, and disadvantages of every approach, all of them need to be considered before opting one.
Here is an overview and comparison of a few of them:
Classical waterfall model was the first methodology which was introduced for software development. It is very simple to understand and easy to use. Earlier it was used by every company but with the advancements in models, companies started using new models which are not only updated but also has better features.
But old remains gold, all the new models are mainly based on this approach and the basic structure is of the Waterfall Model. In the waterfall approach, the whole process is divided into different phases and output of one phase acts as the input for the next one.
So it is impossible for the phases to overlap. As this model demonstrates the software development process in a linear sequential flow, it is also referred to as the “Linear-Sequential Life Cycle Model”.
Phases of the waterfall model:
Here are some main phases of the waterfall model of software development
In this, the clients and the developers have a detailed conversation about the design, purpose, and function they are looking forward to. The specifications of the inputs or the final product which is required are studied in this phase.
After all the research is being done, the requirements from the first phase are converted into designs. System design helps in specifying hardware and system requirements. The overall system architecture is also defined in this phase.
After the software coding, the inputs from system designs are developed into small programs called ”units”. Then each unit is tested for its functionality and this process refers to “unit testing”
After testing the units are integrated into the system, the designed software needs to go through constant software testing to find out the errors. This testing is being made sure so that the clients don’t have to face any problem while the installation of software.
After the functional and non-functional testing, it is the time of releasing the product into the market and it is deployed into the customer’s environment.
The process doesn’t end at installation, making modifications to the system or alternating an individual component according to the demands of customers is also an integral phase. That is done to enhance performance. Regular maintenance is provided for developed software.
All of these phases are cascaded to each other, an outcome of one process acts as the key for the other one to start in the waterfall model.
Real Time Example of the Waterfall model in Software Engineering:
Any project for which complete and consistent requirements are available is amenable to the waterfall model. Even though, it will be a very small project to work. The large projects which can be made using the waterfall model would be projects of re-engineering an existing system, so all the requirements must be known before starting the process.
Advantages of waterfall model in software engineering:
- Allow for departmentalization and control.
- Timing is a very integral key of the waterfall, the schedule is being set beforehand for every stage and deadlines are assigned
- It easily understandable and explainable which makes it easy to use for clients
- The rigidity of the model makes it easy to manage, having specific deliverable and review processes for every phase is a plus
- Overlapping cannot happen in this mode, works easy for smaller projects where requirements are explained well
Disadvantages of waterfall model in software engineering:
- Time and cost is difficult to predict for every phase effectively
- As feedback is not involved at making phases, so in the testing phase, it gets really difficult to modify if something messed up at the end of the procedure.
- Not a reasonable model for complex and object-oriented projects works wonder with small projects.
- Waterfall model is not suitable for requirements are not fixed and have a ratio of moderate to high when comes to changing.
In a practical software development project, the old waterfall model is not going to be a big help. It has a lot of errors in it when it comes to bigger and complex projects. So, Iterative can be a good alternative. In the Iterative model, the development begins by specifying and implementing part of the software which you will review later to identify the further requirements.
According to the iterative model, you can make software by using some of the software specifications and develop the first version of the software. And later on, if you or your client realize that you need some modification than it can be easily made using a new iteration.
When to use the Iterative model:
- The requirement of the system is defined
- New technology involved
- Being learned by the development team
- Big project with high-risk features and goals will change later on
The process of Iterative model is cyclic, once the initial planning is complete, few of the phases are kept repeating over and over again, with the completion of each cycle incrementally improving and iterating on the software.
Phases of the Iterative model
Here are the basic phases of the iterative model:
The very first phase is planning, where teams work on mapping out the specifications of documents. Establishing software and hardware requirements and preparing for upcoming phases is done here.
Analysis and design phase:
An analysis is done to point out the appropriate business logic, database models once the planning is done. After analyzing, the designing phase starts, where the technical requirements are established. That will be utilized in order to meet the need of the analysis stage as well.
Actual implementation and coding process is executed in this phase. All planning, specification and designing documents happens and implemented into the initial intention of the project.
After completion of coding and integration, testing is initiated in order to identify the errors in the software.
The final phase is the evaluation; the status of the project is being examined here by the clients and the developers in order to see if the project is according to the suggested requirements.
Advantages of the iterative model in software engineering:
Before selecting the right model for the project, it is very important to look into its advantages and disadvantages. Design or function related flaws can be identified by the developers as this approach is implemented at the initial level, It is the biggest plus of this approach. Other benefits are:
- A limited budget is required because errors are being identified beforehand
- Easily adaptable to an ongoing process f changing by the clients
- Best suited for an agile organization.
- Cost effective to change the scope or requirements in the Iterative model as compare to any other.
- Iterative model can plan parallel development.
- It is easy to test and debug during a smaller iteration.
- Each iteration is easily managed
- Risks are identified and taken care off during the process.
- Less time is spent on documentation.
- More time and attention is given to designing.
- The consistent process of feedback while presenting sketches and blueprints of the products to the users and live feedback and help in bringing the required changes.
Disadvantages of the Iterative model in software engineering:
- Each phase is rigid with no overlaps.
- Not giving more time to research can cause an issue later in design or system architecture.
- More resources may be required.
- More management attention is required in this model.
- Not suitable for smaller projects.
- High skilled resources are required for a complete analysis.
- Project progress highly depends on the risk analysis phase, anything going wrong in that phase can mess up the whole procedure.
- Defining increments may require a definition of the complete system.
Iterative model deals with requirements, design, build and test phases over and over again for each requirement. It can accommodate changes in requirements very easily as it keeps coming from the user or the clients’ side.
The iterative model also helps to build any major requirement or identify any design errors throughout the procedure because of its iterative nature.
Agile scrum model:
A widely used methodology of Agile is Scrum. It is a lightweight software development methodology that focuses on having small time-boxed sprints of new functionality. Agile Scrum is hand on a system consisting of simple interlocking steps and components, including, product backlog, which is made by the power owner, one small piece is being taken care of from the priority list at a time and it is called sprint.
The team completes the sprint in the assigned time period and also reports daily, that process is called daily scrum and backlog governance is also being done to make reports successfully. The ScrumMaster plays his role in keeping the team focus on the goal. In the end, the teams deliver a sprint and start working on the next one.
Advantages of scrum:
- Scrum emphasis on customer interaction, feedback, and adjustments instead of focusing on documentation and predictions only for the process.
- As scrum projects are divided into sprints, at the end of every sprint, there is a fully functional system that can be released.
- The requirements of the project are prioritized instead of codifying up=front.
- The requirements are composed of user stories which are helpful and can be scheduled in a particular sprint.
- Scrum focus more on project management side in terms of tools and processes, it becomes easy to adopt from day one with less initial invention and customization.
Disadvantages of Agile scrum:
- Not flexible to change according to customer requirements.
- Time is wasted building features which are not really required by users
- The end user cannot give feedback until it is completely coded.
- The testing cannot be done so finding out the stability of software cannot be done till the end of the procedure.
Scrum actually brings everyone on board which may include the stakeholders, to help in deciding the main features.
Rapid application development model:
RAD is completely different from any other types of engineering because changes can be made almost instantaneously and it even gives the edge to make amendments at the end of the development process.
The key benefit of the rapid application development approach is fast turn out of the project and it really attracts the developers as it is working in a fast-paced environment which is ideal for software development.
By minimizing the planning stage and maximizing the prototype development, the rapid pace is achieved in the RAD Model.
By this approach, it has become easy for the stakeholders and the project managers to accurately measure progress and communicate in real time to focus on changes and take care of error as soon as possible. That brings efficiency, faster development, and effective communication.
Phases of rapid application development:
The whole process can be divided into four main phases:
This is the critical step for the success of the project ultimately. It is the project scoping meeting where developers, clients, and team members communicate to determine the goals and expectations for the project. That might include
- Researching the current problems
- Defining the requirements for the projects
- Finalizing the requirements
After researching it is the time of developing the user design. During this phase, the client is in constant touch with the developers to ensure their needs are being met at every step and design-ins going the way they have in their mind.
It is almost like customized software development where the users can test each prototype of the product. In this stage, all the errors and bugs are sorted out.
After addressing all the potential changes and making the design, come the time of constructing the final working model quickly. These are sub-phases:
- Program and application development
- Unit and system testing.
This is the final phase and it includes data conversion, testing, and changeover to the new system. After this, the product can be launched when the coders are looking into final bugs in the system.
Advantages of rapid application developers:
- RAD breaks the project into smaller manageable tasks.
- Clients get the best version in a shorter period of time.
- Regular communication and constant feedback increases the efficiency of the design and build process.
Disadvantages of RAD in software engineering:
- In the hurry of completing everything timely, it is very common to leave something important unattended.
- Making changes at any time of the process is not the only advantage but also drawback because the whole process has to start from the beginning
- No so cost friendly, depending on the iterations
- Suitable only for small and medium projects.
Rapid application development teams try to accomplish more in less time without leaving client satisfaction behind and focus on high iterative design and construction.
Difference between waterfall and iterative model in software engineering:
Here are some parameters which help in understanding the difference between waterfall and iterative model in software engineering:
Waterfall focus changes from analysis design>code>test
Iterative focus shifts between the analysis/design phase to the coding/testing phase.
Waterfall model detect and fix during system and regression testing at the last phase of the project
Iterative detect and fix in each iteration, for the new feature followed by regression testing.
Waterfall learns the lesson from the previous release and implemented in the next release.
Iteration also has the same approach.
Waterfall does not have any risk identification, it firefights during the testing phase.
Iterative has risk identification and mitigation in dev and test phase of every iteration.
Waterfall does retrospection after every release.
Iteration does retrospection after every iteration/milestone.
Waterfall takes feedback at the end of the project
Iterative take feedback at the end of every iteration.
In the waterfall, goals are defined for each phase by defining entry and exit criteria. And delivering artifacts phase wise.
In iterative, the completion of analysis and design for a set of features is done by one team followed by completion of code and test by another team.
Definition of ready:
In waterfall, analysis and design should be completed for all stories before programming.
Iterative, analysis and design should be completed for a set of stories before programming
In the waterfall, the product owner decides the project scope.
In iterative project manager decides scope for iteration in consultation with the product owner.
In waterfall, project manager estimates and gets approval from the product owner for the entire project.
In iterative, the project manager provides the estimation for each iteration.
In waterfall, milestones are scheduled like analysis, design, development, and testing.
In iterative, scheduling is based on iteration like iteration #1, #2, #3
In the waterfall, the team needs to stick to the baseline project plan.
In iterative, the team needs to stick to the baseline iteration plan.
In waterfall, PM calls for the status meetings at the scheduled intervals.
In iterative, the same approach is being followed.
Planned vs. actual:
In the waterfall, developers have to stick to the baseline of the project’s plan.
In iterative, the developers have to stick to the baseline iteration plan.
These are some of the differences between the waterfall and iterative model in software engineering.
Difference between waterfall and RAD model:
There are some main factors which define the difference between the waterfall and the RAD model
In the waterfall model the planned schedule is followed closely and if any significant change occurs during the process, the phase has to start from the beginning.
In RAD the phases are open-ended and the project is only done when the client is completely satisfied.
The ideal size of the project:
Waterfall cover projects from very small to the very large ratio
RAD covers small and medium-sized projects.
Developer experience level:
In the waterfall, the developer can be from junior to senior
In RAD the developer has to be multi-talented, very experienced and flexible.
For waterfall the clients who know exactly what they want from the beginning is ideal
For RAD only good communicator, open to suggestions and the client with the bigger picture will work just fine.
Approach to change:
In waterfall change at any point in the process is extremely negative.
In RAD change is always welcome.
In the waterfall, the risk is assessed at the beginning of the process only.
RAD is always ready for risks.
Project management style:
In the waterfall, the developers stick to the original plan.
RAD is very adaptive.
Use of new technology:
Waterfall does not require anything after specs are set
RAD welcomes new changes
In the waterfall, Every feature in the specs is built.
In RAD only those features are build in which are proving too useful.
Updates and versions:
Updates are planned and methodical in the waterfall model.
RAD has ad-hoc and quick updates
Price is fixed in the waterfall model.
RAD cost varies depending on the number of iterations.
The waterfall model only delivers once the project is complete.
RAD working model delivers as soon as possible.
These are some features which define the difference between waterfall and RAD model in software engineering.
Which model to select?
Before selecting any model, there are few questions which should be addressed other than looking into the differences in the approach of any model. These questions will not just help to find the model but will also play a role in finding the best according to your demands. These questions are:
- What is the size of the project you are going to work on?
- Do you need a prototype?
- Are you using a packaged solution?
- How flexible is your team?
- How much will your customer participate in the process?
- Does your project manager have experience?
Above mentioned important queries need to be answered before going any step ahead.