Before we dive into software, let’s think about the development lifecycle of a car. A car is a nice common point of reference since we all likely rode in one (or a similar vehicle) to come to summer camp.
Requirements Analysis: A car should be able to transport one or more people at least a mile. The car should have wheels, a propulsion system, a braking system, a steering system, and a restraint system. The car should also look nice and be comfortable to ride in for long distances.
Design: The different “pieces” or “modules” of a car are each of the different systems: propulsion, braking, steering, restraint, etc. All of the modules interact together. For example, the braking system should interact with the propulsion system to reduce the flow of fuel and apply the brakes to the wheels. Additionally, the design may include a scale model of the car. Think about those clay models from car commercials.
Development: The development of the vehicle is the next step. This may be done in several iterations before the finalized car for a given model year is released to the manufacturers for production. During this time, the designers will get feedback and also test the car (as described in the next phase of development). There may be several back and forth periods spent in development and test.
Testing: For a car, testing may include things like driving it on a test track to determine how fast the car can go. Additional tests may include safety checks during simulated crashes. All of these tests (and more) are vital to ensure that a car company delivers a safe product that meets the demands (i.e., the requirements) of the consumers.
Deployment: We deliver when we are done. For a car, the plans for manufacturing are delivered to the plant that builds the cars. And eventually, the shiny new car is delivered to a dealership for a customer to purchase.