Customized software has become critical to businesses wanting a competitive edge. The early stages of developing a new piece of software can feel a little overwhelming. Fortunately, a variety of systems have been established that can make the process much, much easier. The process of software development has evolved over the last decade, with an emphasis on speed and efficiency.
Describing the state of affairs in 2005, Martin Fowler, Chief Scientist of ThoughtWorks, wrote, “Most software development is a chaotic activity, often characterized by the phrase ‘code and fix.’ The software is written without much of an underlying plan, and the design of the system is cobbled together from many short term decisions. This works pretty well if the system is small, but as the system grows it becomes increasingly difficult to add new features to the system. Furthermore, bugs have become increasingly prevalent and increasingly difficult to fix. A typical sign of such a system is a long test phase after the system is ‘feature complete.’ Such a long test phase plays havoc with schedules as testing and debugging is impossible to schedule.”
The foundation of “modern” software development is based on two primary philosophies, the Agile Development Software Manifesto and the development of DevOps infrastructures. The primary goal of Agile is transforming the development cycle into a collaborative process, promoting flexibility, and assuring everyone on the team is on the same page, streamlining communications and eliminating confusion. DevOps focuses on developing and improving products faster than competing organizations by eliminating communications breakdowns between the operations team and the development team and having them work together. DevOps and Agile philosophies share fundamental goals, but use slightly different tactics in achieving them. Both philosophies promote the use of automation.
Knowing the Different Phases of Software Development
Though there is no “one method” for developing software. Typically, it goes through a series of standardized steps, or phases sometimes referred to as a ‘software development life cycle.’ Following these steps can help assure the quality of the software. The use of a standardized system streamlines the development process by minimizing confusion and maximizing efficiency. The basic steps for software development are listed below:
Understanding the problem– To develop a fully functional software solution, it is important to fully understand the problem, plus any additional requirements the organization may have. This aspect of software development is considered by many to be the most crucial part of the development process.
Planning– The team organizes and lays out a plan for software development. Estimates are made regarding the costs and resources needed for developing the software. This step may be merged with the Feasibility Analysis. At this time, the team can determine the project’s feasibility – where they can avoid wasting time and money, and how to implement the project, with the lowest risks and expenses.
Feasibility Analysis– This step determines whether or not the project is feasible to work on. It also details the risks involved and provides sub-plans for softening those risks. (No one wants to pay for a project that cannot be completed.)
Design and Prototyping– This stage of development involves the software’s entire architecture, which includes user-friendliness. It should be designed so users/customers can get the best outcomes. (Design does play an important role when attracting visitors and potential customers.) Running into snags and unforeseen problems at this stage almost guarantee cost overruns and may result in a collapse of the project. A prototype (a preliminary first model) should be included during the planning phase. However, even after its release, the first version can be viewed as a prototype, capable of further development.
Coding– The designing and writing of code for computer operating systems, computer or smartphone apps, and other devices.
Software Testing– New software typically undergoes a variety of testing phases before being implemented, or sold to a customer. At this phase, glitches and bugs are found and fixed. “APM tools” are becoming popular for testing purposes.
Maintenance– Many organizations include long-term maintenance in the software’s programming.
The Five Popular Software Development Processes
Factors such as the project’s size, the team’s strengths, and weaknesses, and other issues, will help to determine the best development processes for the project. All organizations set up their software development systems in different ways, and each project is handled differently, as well. Despite these differences, nearly all organizations develop software using a variation of one of the following five systems, or a combination of them.
The Waterfall development process is one of the oldest, “least flexible,” and most established models used for building software. It is often described as a “plan-driven” process and requires knowing everything needing to be done, in the correct order, before doing any development. Because of its rigid planning structure, the Waterfall development process should not be used in situations subject to radical change. The Waterfall process works best when goals and requirements do “not” change during development, and the original plans are followed.
The Waterfall development process “does not support” the testing of new products, user feedback in mid-stream, or a dynamic development process. However, techniques, such as continuous integration and deployment can eliminate many many of these issues.
Agile and Scrum
The Agile development process (and Scrum, its most popular methodology) uses a repetitive and dynamic approach. Unlike the Waterfall process, which uses a strict, tightly controlled, sequential flow, Agile uses cross-functional teams that “sprint,” focusing on the project for anywhere from two weeks to two months. (Projects should have a dedicated Scrum Master to ensure sprints and milestones are achieved.)
In Agile, cross-functional teams work in “sprints” for 2 weeks to 2 months, to build and release usable software to customers for feedback. Agile allows organizations to move more quickly and to test theories quickly, and without a significant investment. Testing can take place after each small evolutionary step and makes it easier to detect bugs or return to an earlier version if a problem develops. Unfortunately, Agile’s dynamic nature sometimes causes projects to take longer than anticipated, and to go over budget.
In response to early criticism of the Agile development process, Jim Highsmith, of the Agile Alliance, stated, “The Agile movement is not anti-methodology, many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment.”
Incremental and Iterative
These software development processes offer a middle-ground between the rigid planning of the Waterfall process and the flexibility of Agile. Both processes apply the concept of creating small amounts of software and then presenting them for feedback to different users. However, they differ dramatically in “what” is created.
In the Incremental process, each “incremental” improvement of the product adds one new function or feature. In essence, it is similar to creating an overall plan, developing an MVP (minimum viable product, a version with just enough features to satisfy customers) with core functionality, and then using feedback for developing new features. With the incremental process, early feedback on core features is used to make improvements.
In the Iterative process, each product released comes with a version of all planned features. The process focuses on a simplified implementation that progressively becomes more complex with each added feature until the final version is complete. With the Iterative approach, users gain an early viewing of what the final product could look like, and provide feedback.
The V-Shaped Software Development Process
This is a spin-off of the classic Waterfall method, but “does” support the testing of new software. Instead of working sequentially during the development process and saving all testing for the end of the project, a rigid “validation and verification” procedure follows each phase of the V-shaped development process, with requirements being tested before moving on. It works well for teams working on small projects with a tight focus. Instead of risking following a plan that finds problems at the very end of development, it offers opportunities to test during the development process. This is still a “plan-driven” process, and not for teams wanting greater flexibility.
The Spiral Software Development Process
This method merges the V-shaped process of a focus on testing with the incremental qualities of Incremental, Iterative, and Agile. Once a plan has been developed for a specific iteration, an in-depth risk analysis is done, identifying errors or areas of risk. For example, the plan has a feature that hasn’t been used or tested by customers. This feature can be developed as a prototype, and provided to users for feedback before shifting to full development. As each new feature is completed, the range expands further outward (like a spiral).
This process reduces risk. If a large or critical project requires significant documentation and validation during development, this might be the best choice. This process can also be useful when dealing with a customer who isn’t completely certain about their desired requirements and is comfortable with large edits during the software’s development.
AI and Software Development
Finding and hiring a development company can be difficult. While customized software has become critical to business competitiveness, a shortage of software developers has become a problem. Artificial Intelligence can help by performing many tasks much more quickly than a human could.
According to David Schatsky, managing director of Deloitte, AI is “having a remarkable impact on the software development process, such as reducing by half the number of keystrokes developers need to type, catching bugs even before code review or testing and automatically generating half of the tests needed for quality assurance.
“Researchers have discovered that machine learning and natural language processing can be used to analyze source code and other data about software development, such as records of project schedules and delays and application defects and their fixes. This makes it possible to automate some of the developers’ work. A new generation of AI-powered tools is emerging, guiding and empowering software professionals to produce better requirements documents, write more reliable code, and automatically detect bugs and security vulnerabilities.”