This article was originally published by Alvaro Rios, Head of Engineering - Medical Devices. This is an updated version.
Join me, as we picture a typical July day in Montevideo, Uruguay, where the weather is often grey and windy. Just about the perfect day for a coffee and bizcochitos – it's common knowledge among my fellow colleagues that I've replaced most of my blood for coffee long ago.
Given the ideal conditions to trigger creative thinking, we started brainstorming and discussing one of our organization's major concerns:
One of the main things I love about Focus is that my work comprises three awesome areas:
I've seen the unique challenges that come with the mix of these three fields.
Embedded software development is still a niche in Uruguay and it requires a different set of skills and processes when compared to those typically used for software development. Moreover, my experience has taught me that hardware development is quite a rough ride when compared to software. Tons of knowledge and experience in a variety of areas are needed just to develop and mass manufacture a small, simple piece of hardware that serves the purpose of little more than Christmas tree lighting – many of you must be acquainted with the classic blinky project.
When it comes to management, combining hardware and embedded software is no easier task. Intuitively, the former has a more waterfallish approach while the latter looks like a candidate to apply agile techniques. For this reason, at some level, it's like herding cats, because this kind of project involves multiple teams working on different components of a product with the inevitable complications that stem from making sure everyone is concentrating their efforts towards the same system integration goal. We try our best to ensure that the hardware and software emerge as a unique product.
After facing some headache-inducing projects, we've had to up our game and streamline our processes to achieve the best quality and delivery of our capabilities. The highlights of this beautiful journey, which is ongoing, are what I want to share with you in the following paragraphs.
When it comes to designing electronic circuits, there are several stages that are typically followed. Here's a breakdown of these stages:
The costs and time required to introduce changes to a hardware project increase as the change is introduced later in the development cycle, even if the impact on the product is minimal. In hardware projects, this behavior is often seen as a theorem, and it is essential for hardware teams to keep this principle in mind when planning and executing their projects. By identifying potential changes early in the development cycle, hardware teams can minimize the costs and time required to implement changes and ensure that their projects are completed within budget and deadlines.
As you may have noticed, there is an obvious waterfall approach in this development process. This approach is necessary because each stage builds upon the previous one. It is impossible to test the PCB without completing the PCB layout, and any changes that would affect the outputs of the earlier stages can have a large impact on the entire project and be challenging to implement, even if they are minor. In software development, solving a bug after deployment is not as catastrophic as it is in hardware development. Imagine throwing away three months of work because you messed up between mils and millimeters when drawing a footprint, that's HARDware.
However, it's worth noting that this stages and phases approach for hardware development doesn't mean that the process is inflexible. In fact, agile development methodologies can be applied to the PCB development process, allowing for more flexibility and adaptability.
Scrum might be the most popular methodology to apply the Agile framework for developing software. But wait, I've just said that change is a scary word for some stages of a hardware project. How can an iteration, change-driven philosophy be merged with the waterfallish approach of hardware development? Let's open a PR!
Implementing scrum in hardware development is harder than software. Some observations on why it's harder:
1) Hardware is harder to modularize and split into small independent tasks.
Reason: Hardware design is de-facto highly coupled. Solution: Always implement a hierarchical block design and focus on defining your hardware module interfaces first. This approach will allow for smoother change management and make it easier to split the team and assign members to specific blocks and integrations.
2) A single product feature usually needs more than one hardware module defined.
Reason: In hardware development, it's harder to apply sprints focused on features since a single feature might require a set of product assemblies completely developed. Solution: Focus the sprints on designing a complete product assembly, such as a hardware module, rather than delivering individual product features. By delivering functional hardware components at the end of each sprint, the team can build a functional system in incremental steps, which can help manage complexity and minimize the risk of project failure.
3) Change cost increments over time.
Reason: Change management in hardware development might be more difficult and costly than in software development. A late-stage change can result in significant rework, delay, and additional costs. Solution: Having a well-defined hardware architecture with clear interfaces and modular blocks can enable the team to manage changes more effectively. When changes occur, the team can update the affected blocks and review the changes in isolation before integrating them with the rest of the system.
4) Partial functionality demonstrations are difficult to achieve.
Reason: Demonstrating partial functionality in hardware development is challenging, unlike software development where it's possible to quickly demonstrate partial functionality through prototyping or mocked functionalities. Solution: Build preliminary prototypes of specific subsystems or modules. In this way, the team can demonstrate partial functionality and validate design assumptions.
5) Hardware testing.
Reason: Hardware testing typically requires fewer test cases compared to software, however, it usually requires specialized and expensive equipment, such as oscilloscopes, logic analyzers, and signal generators. Solution: While test-driven development may not be feasible in hardware development, a well-defined testing plan with clear acceptance criteria and test cases can help ensure quality and reduce the risk of failure.
6) External dependencies.
Reason: Hardware projects have external dependencies, such as mechanical components design, manufacturing and assembly process, test equipment, and supply chain. Solution: By identifying external dependencies early in the project, the team can better plan and coordinate with external stakeholders, adjust timelines accordingly, and minimize delays.
7) Specialization.
Reason: Hardware development often requires specialized skills, and it can be difficult to complete critical tasks if only one team member has the required expertise. Solution: Cross-training team members and rotating tasks can help ensure that critical tasks can be completed, even if team members leave or become unavailable.
As a final note, it's worth mentioning that the market for hardware development outsourcing services is rapidly expanding, with offshore companies taking advantage of globalization to design, manufacture, and test small quantities of prototypes quickly. This trend creates new opportunities for hardware design, but it also increases competition, making it more challenging to stand out in the market.
Therefore, having well-defined and proven management tools and strategies is essential for delivering high-quality products within the intended timeline and budget. It is also crucial to have a motivated team willing to go the extra mile to develop an outstanding product.