The difference between hardware and software is that you design hardware first, address most of the uncertainty, and only then build the thing. You can't reliably plan the design phase for hardware. Too many unknowns that have yet to be found out about. Just like with software designs.
With software, the process of designing and building are the same. Upfront you know nothing, then you start iterating and at some point you have the finished thing after you've progressively learned all the requirements. There is no separate build phase. People used to pretend there was and that never really worked. The end result of a software project is an executable specification. The process of specifying is all that ever happens. Writing a specification for the specification is not really a thing. At best people attempt partial, very incomplete and hand wavy specifications. But it's not the same thing and it typically lacks the rigor of a hardware design.
Agile hardware design is increasingly a thing as well. E.g. SpaceX is iterating on their rocket designs. This is not some grand design they came up with years ago but a specification that they keep on refining by attempting to build it and by learning from the failures. The number of iterations is not a fixed number. It's as many as they need to. They build parts, tools, and machinery along the way as they discover what they need. Very different from how rocket design used to work. And apparently a lot cheaper too.
With software, the process of designing and building are the same. Upfront you know nothing, then you start iterating and at some point you have the finished thing after you've progressively learned all the requirements. There is no separate build phase. People used to pretend there was and that never really worked. The end result of a software project is an executable specification. The process of specifying is all that ever happens. Writing a specification for the specification is not really a thing. At best people attempt partial, very incomplete and hand wavy specifications. But it's not the same thing and it typically lacks the rigor of a hardware design.
Agile hardware design is increasingly a thing as well. E.g. SpaceX is iterating on their rocket designs. This is not some grand design they came up with years ago but a specification that they keep on refining by attempting to build it and by learning from the failures. The number of iterations is not a fixed number. It's as many as they need to. They build parts, tools, and machinery along the way as they discover what they need. Very different from how rocket design used to work. And apparently a lot cheaper too.