Development Methodologies in Software Engineering
As someone interested in computer science, and inspired by this Medium article, this blog post and the next few posts will deal with the roadmap and skills necessary for software development. In software engineering, while it is important to know the syntaxes of different languages and their different functionalities, it is of utmost importance to have the skills necessary to develop programs algorithmically (you can always use StackOverflow for a syntax error, but using Google to figure out the overall idea of the program is much more difficult). One skill, or process, that is crucial for software developers to have is a control of development methodologies. In computer science, a development methodology is the way in which a developer divides the work into phases, from general and fundamental principles to more specific work, to create a product from the ground up and innovate.
There are many different development methodologies in software engineering, each with their own merits. The Waterfall methodology is perhaps the most traditional form of software development. It consists of a rigid, linear design process, in which there are sequential phases focusing on distinct goals. The structure of this method requires that each phase is 100% completed before moving on to the next step, and consequently prevents the developer from returning to a prior phase and making any changes. Therefore, before beginning the development process there needs to be a clear roadmap so that the development goes smoothly and the programmer doesn’t have to scrap the project and restart. The benefit of this methodology is that there is a rigid structure, so everyone knows what the plan is and the project is very organized.
Another popular development methodology is the Agile method, which was created to address the waterfall method’s shortcomings. As opposed to the waterfall method, in the Agile method, teams develop the software in iterations that contain mini-increments of the new functionality. These iterations, called sprints, are periods of time in which a group works on small modules based on a simplistic project design. After each sprint, the team can evaluate the modules and fix bugs and incorporate feedback. Some benefits of the agile methodology is that developers can go back and work on prior phases, the product can be finished a lot quicker because of the cycles involved, and there doesn’t have to be a rigid structure.
The methodology also has some sub-sections, such as the Scrum framework, which has a strong focus on teamwork and collaboration (with a name derived from a rugby term, it makes sense). It has a product owner, a development team, and a scrum master (who makes sure that scrum is followed). Because it follows Agile framework, it also has sprints, sprint planning (when the team gets together to plan the next sprint), a daily scrum (where the team gathers to discuss progress and upcoming goals), a sprint review (at the end of each sprint, when the team presents progress to the stakeholders and receives feedback), and a sprint retrospective (where the team reflects on the previous sprint and figure out what improvements can be made for the next one). Evidently, this process has a lot of collaboration and discussion.
Another sub-section is the Kanban process. It’s highly visual and very popular within the Agile framework, painting a picture of the workflow process and identifying bottlenecks early on. It has six general practices: visualization, limiting work in progress, flow management, making policies explicit, using feedback loops, and collaborative or experimental evolution. It uses visual cues like a Kanban Board (a visual management tool used to visualize the development process), Kanban cards (cards that depict a work item/task in the work process), or even a Kanban swimlane (a visual element on the board that allows you to further distinguish tasks/items by categorizing them in a horizontal sense). This visualization really helps identify where the work will slow down, and help plan for it.
While the Agile and Waterfall methods are the most popular development methodologies, Rapid Application Development also has some important benefits. RAD produces high-quality systems with low investment costs, and it allows developers to adapt to the changing industry quickly and easily. It consists of four phases -requirements planning, user design, construction, and cutover- and repeats until the product meets all requirements. It’s very useful for small to medium-size projects which are time-sensitive, and is especially effective in projects which are not very computationally complex and have a well-defined business objective.
Ultimately, there are a number of different development methodologies that development teams can use. Whether Agile, Waterfall, RAD, or any other process, the right one to use depends on the product and what makes the most sense. But what is necessary is that the team has an organized methodology to stay organized and on top of the workload, and that the developer has a fundamental understanding of these methodologies.
Sources:
Zenkit Blog