Comparing and Contrasting Hardware & Software Development
By:Kevin Thompson, Ph.D. – Chief Scientist, cPrime
We all know what Agile is and what software development means, so let’s start by defining what we mean by hardware and hardware development. “Hardware” refers specifically to electrical or electro-mechanical devices, which often contain firmware or embedded software. For example, networking equipment, phones, and other communications technology; consumer electronics; computers; medical devices; ASICs (Application-Specific Integrated Circuits), and so forth. Similarly, “hardware development” is taken to mean the development of designs for devices that are intended to be manufactured).
Similarities between Hardware and Software Development
- They have behavior: Users interact with the products in various ways, products interact with other products, and products produce outputs given inputs
- They have functional (user-facing) and non-functional (non-user-facing) requirements
- They are complex: Any representation of product specifications invariably leads to a tree structure, as major features are decomposed into finer-grained features
Differences between Hardware and Software Development
- Software is easier to change than hardware. The cost of change is much higher for hardware than for software.
- Software products evolve through multiple releases by adding new features and re-writing existing logic to support the new features. Hardware products consist of physical components that cannot be “refactored” after manufacturing, and cannot add new capabilities that require hardware changes.
- Designs for new hardware is often based upon earlier-generation products, but commonly rely on next-generation components not yet present.
- Hardware designs are constrained by the need to incorporate standard parts.
- Specialized hardware components can have much longer lead times for acquisition than is true for software.
- Hardware design is driven by architectural decisions. More of the architectural work must be done up front compared to software products.
- The cost of development for software products is relatively flat over time. However, the cost of hardware development rises rapidly towards the end of the development cycle. Testing software commonly requires developing thousands of test cases. Hardware testing involves far fewer tests.
- Software testing is done by specialized Quality Assurance (QA) engineers, while hardware testing is commonly done by the engineers who are creating the product.
- Hardware must be designed and tested to work over a range of time and environmental conditions, which is not the case for software.
- Hardware development incorporates four parallel, synchronized projects:
1) The detailed design of the manufacturable product
2) the manufacturing process and tooling
3) the test and inspection process and equipment
4) the supply chain for purchased parts
In software development, the detailed design is the product, and production deployment consists of moving the product into a context where it can be used. Due to many of the above factors, it is possible to make major changes in direction for a planned software-product upgrade in mid-development, without massive disruption and waste. Attempts to make such changes in hardware development come at a much higher cost, in terms of sunk costs wasted, and shipping schedules postponed. As a result, major changes must either be deferred to a future product upgrade, or are done when an assessment is made that the impact is justified by the magnitude of the benefits. Ready to learn more about Agile for Hardware development?