13System Engineering and Agile 2

Today's products are often a combination of hardware and software. A car contains millions of lines of software code, as well as thousands of mechanical parts. An iPhone or Android phone contains an extremely complex operating system, but also a myriad of extremely carefully engineered parts. There is a lot of software in the world, but while many products today are exclusively software, most modern products are not software; they are physical objects that contain parts and often “embedded” software as well.

Some products are complex and contain other products, or assemblies. An assembly is a reusable component that consists of many other components. For example, an engine is an assembly, because it is a component in its own right, can be used in many kinds of car, and consists of many smaller parts. System engineering, aka systems engineering, is the discipline of designing complex hardware products, which may or may not contain software.

In the early days of computing, the process used for creating software was much like creating hardware. Software was created by laboriously crafting it and testing. This was not unlike a blacksmith forging a new tool, by hammering on it, inspecting it, hammering again, inspecting again, until finally it meets the blacksmith's expectations and the tool is declared done and placed in water to cool it. To inspect software, one runs it to verify that it produces correct output.

What about a hardware machine that ...

Get Agile 2 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.