Part 1 – Understanding Software Development Process
By Kalpesh Doshi, Director of Product Management at BrowserStack - August 5, 2019
This is the first post in the 5-part series by Kalpesh Doshi, Director of Product Management at BrowserStack, explaining the broader Software Development process and how Testing fits in. The posts should help young developers and freelancers understand how a robust engineering team functions.
What is Software Development?
Software development refers to an iterative logical process that aims to create a programmed software to meet unique business or personal objectives, goals, or processes. The objective is achieved by a software developer writing computer code. However, it also involves multiple steps such as research, designing a data and process flow, writing technical documentation, comprehensively testing, debugging and pushing it iteratively to live. This process is known as the software development life cycle (SDLC).
Software is developed for a variety of purposes. The three most common ones are:
- To meet the specific needs of a specific client/business (the case with custom software)
To solve a real-world problem
- For personal use (e.g., a pharmacy owner may require inventory managing and billing software.)
- The demand for better quality management of the software development process has enforced the discipline of software engineering, which focuses on applying the systematic approach exemplified in the engineering paradigm to the process of software development.
There are several methodologies available for software project management like Agile, Waterfall, Scrum, Kanban, and a few others.
Usually, any software development is categorized into two types:
- Backend Development
- Frontend Development
What is PDLC (Product Development Lifecycle)
The product development life cycle (PDLC) is the complete process of creating and bringing a new product into the market. It includes the following 5 steps:
- Product Conceptualization
- Product Architecture and Design
- Product Construction or Development
- Product Release
- Product Realization and Future Upgrade
- Product Conceptualisation: Every product has to start with an idea. In some cases, this might be reasonably simple, conceptualizing a new product on something that already exists. In a few cases, it may be something out of the box. Many of the leading tech companies have innovation departments that focus solely on the task of coming up with ‘the next big thing.’ Once the idea is selected, significant time is spent on Market research, Functional analysis, Technical analysis, Feasibility analysis, ROI, and Prototype development.
- Product Architecture and Design: The next phase is to design the technical architecture of the product. In this phase, the business team provides the business specification to technical teams who then build the architecture of the product, create workflow diagrams, and DB design.
- Product Development: In this phase, development teams start developing the product. Development teams may use Waterfall or Agile methodologies to develop a product. Most of the software companies are now moving towards an Agile development methodology to make the product development process faster. In this phase, teams develop, perform unit tests, integration tests, performance tests, and any other testing types depending on the product type. Once this phase is completed, the team creates an Alpha release which may be mostly internal and limited to a few external users.
- Product Release: Once the team is confident about the functionality, usability, and stability of the product based on the Alpha release and receives feedback, the team moves towards the Beta release phase. In the beta release, companies may choose to open it to all the customers or choose to provide access to limited customers who request for Beta access. In this phase, the team wants to get feedback from external customers and make any changes accordingly. Once the team is satisfied with the beta feedback and necessary changes are made to the product, a public release of the product takes place. Public release involves broad announcements, PR, and so forth to create an impact depending on the product.
- Product Realization and Future Upgrade: The next phase is continuous monitoring of the product, its usage, and growth. Along with future enhancements, teams also need to prioritize the bug fixes based on the customer impact.
Most companies adopt these stages to bring a new product to the market. For example, when PayPal came up with the in-context checkout product, they went through all these stages to make sure of a successful launch of the product.
- They did a thorough market research of why In-context is essential compared to out of context
- Defined the primary objective of the new product, which is the reduction in drop-off rate
- Did a thorough analysis of tech feasibility and shoppers adoption
- Worked with the design teams to create a seamless in-context experience
- For a project this big they created three delivery teams each running its scrum managed by a central program
- They released the product MVP in a limited market and kept monitoring the metrics
- The product was refined based on the feedback before launching it to a broader market
What is SDLC (Software Development Lifecycle)
Software Development Life Cycle is defined as a systematic approach used by the software industry to design, develop, and test high-quality software. The main goal behind SDLC is to produce high-quality software that meets or exceeds customer expectations, reaches completion within times and cost estimates.
SDLC consists of the following activities:
- Planning: The most crucial aspect of software development, requirement analysis is done by the most skilled and experienced software engineers in the organization. After gathering and analyzing requirements from the client, the scope document is generated.
- Implementation: Here, the software engineers start writing the code as per the analyzed requirements
- Testing: It is a crucial stage which aims to discover any error, bugs, or flaws in the software
- Documentation: Each activity performed in the project is documented for future reference and enhancement in the development process
- Deployment and maintenance: The software is deployed once it is approved for release.
- Maintaining: This phase occurs once the product is operational. It involves modification of few features over some time. This phase also focuses on monitoring the system performance, bug rectification, and implementing requested changes
Software Development Methodologies
Usually, there are 2 types of software development methodologies –
- Waterfall model
- Agile model
What is the Waterfall model?
A waterfall model represents a linear and sequential approach to software development. The following steps are carried out sequentially in a waterfall approach.
- Requirements: gather, analyze, document
- Design: resulting in the software architecture
- Code: the development, proving, and integration of software
- Testing: the systematic discovery and debugging of defects
- Operations: the installation, support, and maintenance of complete systems
In an actual Waterfall implementation, each of the above steps represents a different stage of software development, and every stage generally terminates before the next stage begins. There exists a stage-gate between each; e.g., before the designing stage can commence, it’s necessary to have customer’s approval.
What is the Agile model?
Agile methodology evolved from different lightweight software approaches in the 1990s and is a response to some project managers’ dislike of the rigid, linear waterfall methodology. It focuses on flexibility, continuous improvement, and speed. The Agile methodology follows an incremental approach.
Developers start with simplistic project design and then begin to work on small modules. The work on these modules is carried out in weekly or monthly sprints, and at the end of each sprint, project priorities are evaluated, and tests are executed. Thus, the equivalent stages of the waterfall model are completed at every single sprint. These sprints allow for exploring bugs, and customer feedback to be incorporated into the design before the next sprint begins.
That said, the process must be well-managed and documentation enforced, as the rapid pace of development can lend itself towards dis-organization. However, if done correctly, it results in a fast, low-risk, and efficient workflow.
Most of the matured companies now use Agile methodology. Most of the customers you speak with talk in terms of Agile processes unless they specifically mention that they are not agile. Though no companies truly follow complete agile methods, they might be using some hybrid model.
As one is familiar with the basics of the Software Development Process, the next step is to learn the different types of testing in an SDLC Process.