Hardware is hard. And that’s despite the fact that teenagers now regularly toy around with technologies that electronics engineers would have struggled with 10 years ago. The problem is not the lack of resources, but that the hardware development process has stagnated. Brilliant engineers run at the speed of adequate engineers because the status quo dictates that so much is time spent barely adding value.
As a race our advanced abilities are defined by our tools. The speed of software innovation is in no small part due to the voluminous attention given to methodology and tooling over the last couple of decades. Attempts to impart some of those advancements to the development of hardware has been met with resistance, not just because hardware engineers are professionally conservative, but because the introductions have been fad-driven, or applied without sensitivity to the nuances of hardware development.
The advancements that have moved the needle in software development tend to be associated with the ability to iterate. From Test-Driven Development, to Continuous Integration and the Agile Methodology, all are motivated by the realisation that complex systems achieve stability by responding to feedback. Whether that's feedback from an end-user, or feedback from testing, lowering the barriers to receiving and responding to feedback is key for unlocking efficient iteration.
Coincidentally, this is also one of the major challenges of hardware design - today it is difficult to establish feedback channels until late in a project. Historically, the popular methodologies didn't even consider it worthwhile to perform verification and validation activities until after all the system design was complete. But this no longer need be the case. Thanks to recent innovations in software deployment technology, hardware prototyping technology, and design process methodology, the key enabling blocks now exist to radically improve the ability to build tight feedback loops into the hardware design process.
Today we have the opportunity to cherry-pick from decades of software development innovation. And the top pick for moving the needle in the hardware world, is Behaviour-Driven Development or BDD.
The principles of Test-Driven Development are so valuable in software that it is now often considered professionally irresponsible to develop software without writing tests. Behaviour-Driven Development takes the concept one step further by relieving the developer of much of the burden of implementing individual tests, and instead asking for a description of desirable system behaviour instead. Automation techniques are then used to produce and evolve tests to suit. This concept is uniquely well suited to hardware - traditionally, including hardware tests early in the design process was futile, since the hardware was too immature to test. And besides, designing and maintaining suitable tests is time-consuming, and tests tend to be made obsolete as the design proceeds. On the other hand, defining system behaviour is precisely what the early design stages are all about, so that work is already being done. The disruptive innovation is to codify those behaviours into system properties that can be used in a continuous testing framework as the design matures. As a side effect, you end up with a testable product and a test environment for free!
Achieving Behaviour-Driven Development for hardware requires 3 components: a new methodology that can be adopted by teams currently using traditional methodologies; physical test tooling that eliminates significant custom development for each project; and a software system that automates testing and relieves the design team from the task of maintaining the infrastructure. All three components are now within reach. The opportunity is for hardware innovation at the speed of software. Done right, this could be a watershed transition whereafter it would be considered professionally irresponsible to develop hardware without incorporating BDD.