Friday, October 23, 2020

2.2 Software Development Methodologies

 In the past, developers embraced ideas such as Waterfall, but in recent days, because of the need for faster and more frequent application delivery, developers are moving toward a new paradigm. This paradigm includes using Agile methodology and Lean processes.

Marc Andreessen, a famous venture capitalist, said, "Software is eating the world." The following figure can be attributed to Andreessen.

Software is everywhere. Today, software touches most aspects of daily life in some way. Do you want to stay in contact with your friends? You can use Facebook. Do you want to find your favorite recipe? You can Google it. Do you need a taxi? Uber is an option. In fact, most of these types of companies did not even exist 10 years ago.

The modern world is dynamic and dominated by software and technology. Startup companies are founded every day with the goal to compete and win against more traditional competitors. John T. Chambers, a former executive chairman and CEO of Cisco, said that many of the traditional and dominant companies that have been around for years are now at risk. It is likely that many of these same companies will not be around in 10 years.

Software is transforming industries of all types, including transportation, media, retail, and hospitality.

The company Uber is transforming transportation using software by building a connection between those who deliver the service and their customers.

Facebook content is the user content. Facebook users are the ones who post and share information to span the world, and yet the company is one of the most popular media providers in the world.

Alibaba and Amazon are transforming the retail industry, something that has always been naturally connected to the brick-and-mortar retail establishments. Today, retail stores are going virtual. Virtual stores are quickly becoming the primary means for customers to purchase goods from the comfort of their homes.

Airbnb is doing something like Uber but in the hospitality industry, building direct connections between the people who deliver accommodation services and their customers who consume them.

These illustrations are only a few examples of how applications are transforming the lives of people. However, one can surely find other examples of technology that have had a significant impact on everyone.

The major takeaway from these examples is that each of these companies is a technology and software company.

Most engineers can open a text editor, write some code, and eventually compile and run a script or program of some sort. This kind of approach, if used by a team of developers, has no structure or process. Following this type of approach is error-prone, and the software that is created would likely not meet user expectations. A more structured approach is needed.



The Software Development Life Cycle (SDLC) process is used by software creators to design, develop, and test high-quality software products and applications. In addition to creating high-quality software, the SDLC aims to meet and exceed customer expectations on budget and on time.

There are several methodologies that exist to help implement SDLC. These include Waterfall, Agile, prototyping, rapid app development, and extreme programming:

  • Waterfall: A development methodology where a linear process is visualized as moving down through phases.

  • Agile: One of the newer and most popular methodologies that are based on frequent and small incremental releases.

  • Prototyping: Designed with the idea to build an initial version of a product quickly in order to better understand requirements and scope. By using this prototype, the client can get an actual feel of the system in a relatively short time, even though this effort may complicate larger projects.

  • Rapid app development: Puts less emphasis on planning and more emphasis on process. It is a type of incremental model in which all components are developed in parallel.

  • Extreme programming: An extension of Agile, with unit testing, code reviews, simplicity, as well as customer communication and feedback taken to the "extreme."

Waterfall

The Waterfall methodology is based on a linear and sequential process.

The Waterfall process has been around since the 1950s and is rooted in the manufacturing and construction industries. Because no formal software development methodologies existed at the time, this model was simply adapted for software development.

The Waterfall model provides a very structured approach, which works for some industries but is proving to be a less desirable choice for software development. The Waterfall model assumes that once you move to a certain phase of the life cycle, you can go only "downhill" to the next phase. There is a possibility to remain stuck if something unexpected arises. The Waterfall method assumes that all requirements can be gathered up front during the requirements phase. Once this stage is complete, the process runs "downhill."

During the design phase, all the information obtained that is in the requirements and analysis stage is used to build a new, high-level design. When this phase is complete, the systems analyst begins transforming the design that is based on the specifications of specific hardware and software technologies. This effort leads to the implementation (or coding) process.

Following the development of software, the testing (and verification) phase is used to ensure that the project is meeting customer expectations.

During the maintenance phase, the customer is using the product, and changes are made to the system based on customer feedback.

Waterfall is a good choice when all requirements are very well known before a project begins; therefore, it works well for small, well-defined projects.

Waterfall is a linear process, so each phase must be completed before moving to the next phase. At the end of each phase, a project review is done to determine if the work done meets all expectations. If not, the current project is discarded and the process restarts all over, because remaining phases depend on the current phase. It is important to note that testing starts only after the whole work is complete.

Here are some advantages and disadvantages of Waterfall.

Advantages:

  • Design errors are highlighted before any code is written, saving time during the implementation phase.

  • Good documentation is mandatory for this kind of methodology. This effort is useful for engineers in the later stages of the process.

  • Because the process is rigid and structured, it is easy to measure progress and set milestones.

Disadvantages:

  • In the very early stages of a project, it can be difficult to gather all the possible requirements. Clients can only fully appreciate what is needed when the application is delivered.

  • It becomes very difficult (and expensive) to re-engineer the application, making this approach very inflexible.

  • The product will only be shipped at the very end of the chain, without any middle phases to test. Therefore, it can be a very lengthy process.

Lean

You must understand what the Lean management philosophy is before focusing on Agile methodologies.

Lean takes its origin from the automotive industry in Japan, and its goal is to represent a new way to build products. The Lean philosophy provides the most efficient way possible by eliminating everything that is useless. If you do not need it, get rid of it.

Keep in mind that suboptimal allocation of resources is a waste, and that waste reduction increases profitability. Therefore, implementing a Lean process is meant to minimize constraints (resources) while at the same time producing consistent flow and profitability.

According to Lean pioneers, an enterprise must focus on three major points to fully embrace the Lean philosophy:

  • Purpose: Which customer problems will the project solve? Ask, why does it solve the problem, and keep going with more Why questions to get more answers. Ask why continuously to fully understand the purpose. These types of questions are often referred to as the Five Whys.

  • Process: How will the organization assess each major value stream to make sure that each step is valuable, capable, available, adequate, and flexible? How will these organizations ensure that all the steps are linked by flow, pull, and leveling? There must be a process, and metrics in place to determine this process.

  • People: The root of it all is people. The right people need to take responsibility and produce outcomes. The people need to continuously evaluate the value streams in terms of business process and Lean process. How can everyone who plays a part in the value stream be actively engaged in operating it correctly and always improving it?



Agile

As you have seen so far, Waterfall implements a linear process. However, for larger development projects, it becomes increasingly difficult to use a linear development methodology. This difficulty stems from the fact that feedback is needed each step along the way.

The Waterfall process limits the possibility to freely move between project phases, such as analysis, design, code, and test. You are forced to complete a phase before going forward, with no possibility to go back, often within a very strict timeline.

When using the Waterfall methodology, what would happen if there was an issue in the middle of a phase? You have completed 50 percent of the work, for example, but that effort is completely unusable because you cannot move on until the phase is completed.

If anything changes during the design stage or any subsequent stage, you must go back to the analysis phase to begin again. This work effort is not only inflexible but also expensive and time-consuming.

Due to the nature of these methodologies, another issue is that the test phase is skipped because of time constraints. The result is that a lower quality product is delivered to the customer. Imagine the software that is produced if testing is not done properly. Because of these concerns, the Agile methodology has proliferated.



Lean is merely a concept. Without a way to implement it, it is of no value to the systems that need optimizing. Agile addresses the need for optimization.

Agile is a means of implementing the Lean philosophy in the software development industry. It is primarily based on the concept of short sprints, seeking to do as much as possible in a relatively short time, and without losing a focus on value. Agile software development includes customers in the software development life cycle by delivering software in very early stages, to gain valuable feedback from actual consumers of the software. This procedure is a popular way to test software and learn about issues that can be addressed in future releases.

In contrast to the time-consuming and inflexible approach of the Waterfall method, the Agile method provides continuous and incremental value to the software development process.

In the fast-paced world of software development, user requirements change frequently. As the market environment becomes more competitive, software development companies are applying Agile methodologies to meet the requirements of their customers as quickly and effectively as possible.

Scrum is an Agile project management methodology, though it is helpful to consider it more of a framework for managing processes. Scrum is designed with the idea that requirements are not always fully understood and may not be listed on the early stages of the process. Quick development of small features is what really matters. Therefore, the Scrum framework places value on iteration and incremental software development.

Scrum is an Agile project management methodology:



The methodology lists all the requirements on a Product Backlog. These requirements are built around user stories, or small features of the final application such as create an account, perform login, and so on. This large backlog is split into smaller, manageable pieces and put into Sprint Backlogs that must be completed in a short time. It is common to have sprints that span two weeks.

Scrum also recommends a daily Scrum in which developers address what they did the day before and what they are going to do that day. They discuss the challenges that they are facing and evaluate potential challenges in upcoming work. This discussion ensures that teams are on the same page, and it provides for a more collaborative work environment.

At the end of a sprint, the team provides a shippable product increment that can be delivered to the customer.

Scrum practitioners believe that this emphasis of development over requirements leads to less wasted time and greater productivity.

The Waterfall methodology is split into several sequential and linear phases, namely Analysis, Design, Code, and Test.



Agile has the same phases, but they are managed in a different way. In fact, thanks to the concept of sprints, all phases of the life cycle are completed within each single sprint. Effectively, a developer (or team) can accomplish an entire process in a two-week sprint. This process is a very flexible way to work, providing a means to add, fix, or make changes very quickly. Also, even in the middle of a software development roadmap, you will have completely usable code, adding tremendous value to your work and your customers.

Agile represents a more advanced way to work compared with older methodologies like Waterfall, but it still has its own pros and cons as well. Of course, it still matters which type of software is getting developed. But Agile is better suited for fast-paced environments and when all the requirements are not known upfront.

Advantages:

  • The rapid and continuous delivery of software releases helps customers to better understand what the final piece will look like. This capability also provides a fully working code improved week after week, leading to customer satisfaction.

  • Thanks to Scrum, people interaction is emphasized.

  • Late project changes are more welcome.

Disadvantages:

  • This kind of approach lacks emphasis on good documentation, because the main goal is to release new code quickly and frequently.

  • Without a complete requirement-gathering phase at the beginning of the process, customer expectations may be unclear, and there is a good chance for scope creep.

  • Rapid development increases the chance for major design changes in the upcoming sprints, because not all the details are known.

No comments:

Post a Comment