When software engineers join a hardware team, one of the first frustrations is the revision control system. Git branches, pull requests, and continuous integration feel natural to them. But hardware revision control is often a mix of file-based versioning, part number databases, and manual sign-offs. The gap is not just tooling—it is a conceptual difference in how changes propagate. In this article, we unpack that gap and offer a framework for teams that need to bridge both worlds.
Why This Topic Matters Now
Modern products are increasingly cyber-physical: a smart thermostat, a drone, or an electric vehicle all combine software and hardware in tight loops. The software side can iterate quickly, pushing updates daily. The hardware side may take weeks to revise a printed circuit board (PCB) because each change requires new tooling, compliance checks, and physical testing. When these paces clash, teams struggle with coordination, traceability, and blame when something fails.
Consider a typical scenario: a firmware engineer changes a pin assignment in the code to fix a bug, but that pin is tied to a specific hardware revision. If the hardware team has already moved to a new revision that reassigns that pin, the firmware fix becomes useless—or worse, destructive. Without a shared revision control language, such mismatches are common. Many industry surveys suggest that cross-domain revision mismatches account for a significant portion of integration delays in hardware-software projects.
This article is for technical leads, engineering managers, and individual contributors who work at the boundary of software and hardware. We will not prescribe a specific tool, but we will give you a conceptual framework to evaluate your own workflow. You will learn why Git Flow cannot be copy-pasted into hardware, what concepts from hardware revision control are worth keeping, and how to design a hybrid approach that respects both domains.
Core Idea in Plain Language
At its heart, revision control is about managing change. Software Git Flow treats change as a series of lightweight, reversible commits that can be branched, merged, and discarded almost instantly. The cost of a mistake is low: you revert, rebase, or squash. Hardware revision control treats change as a heavyweight, irreversible decision. Once a PCB is fabricated, you cannot rebase it. You spin a new revision, which costs time and money, and you must track every revision because field failures may tie back to a specific batch.
Think of it this way: software changes are like editing a document where every edit is saved and you can undo at any time. Hardware changes are like printing a book: each edition is fixed, and if you find a typo, you must print a new edition. The revision number in hardware is not just a label—it is a legal and contractual identifier. A supplier ships parts with a specific revision; a customer qualifies that revision; changing it may require re-qualification.
This fundamental difference drives everything else. In software, branching is cheap and encouraged. In hardware, branching is expensive and rare. A hardware team might have one active development branch and a few maintenance branches for legacy products. Merging is not a three-way diff; it is a manual process of comparing schematics and bills of materials (BOMs). The tools reflect this: software uses diff and merge algorithms; hardware uses PLM (Product Lifecycle Management) systems with check-in/check-out locking.
So the core idea is not that one is better—it is that they optimize for different constraints. Software optimizes for speed of iteration; hardware optimizes for traceability and cost of change. Any cross-domain workflow must respect both optimizations.
How It Works Under the Hood
Software Git Flow Mechanics
Git Flow uses a branching model with main, develop, feature, release, and hotfix branches. Each branch represents a stage of work. Merges are frequent, and conflicts are resolved algorithmically. The repository stores every version as a directed acyclic graph of commits, each with a hash. This makes it easy to bisect, cherry-pick, and rebase. The key enabler is that the entire history is stored as text diffs, which are cheap to compute and store.
Hardware Revision Control Mechanics
Hardware revision control typically uses a central database (like a PLM or PDM system) that tracks revisions of parts, assemblies, and documents. Each revision is a snapshot of the entire design package: schematics, PCB layout, BOM, mechanical CAD files, and test specifications. Changes are proposed through an engineering change order (ECO) process, which requires review and approval before a new revision is released. The revision number is often alphanumeric (e.g., A, B, C or 1.0, 1.1) and is tied to a specific date and approval.
Branching in hardware is possible but cumbersome. You might create a variant for a customer-specific configuration, but that variant is often a full copy of the design with a new part number. Merging is manual because the files are binary (CAD files, Gerbers) or complex spreadsheets. There is no automatic three-way merge for a PCB layout. Instead, a designer must manually compare two versions using a diff tool that highlights changes in traces or component placements.
Key Differences in Workflow
- Commit granularity: Software commits are small and frequent; hardware revisions are large and infrequent.
- Branch cost: Branches in Git are nearly free; hardware branches require new part numbers and often new qualification.
- Merge capability: Git merges are automated; hardware merges are manual and risky.
- History: Git history is linear (or graph-like) and searchable; hardware history is a list of revisions with change notes.
- Locking: Git uses optimistic concurrency (merge conflicts); hardware often uses pessimistic locking (only one person can edit a file at a time).
These differences mean that a direct translation of Git Flow to hardware would fail. You cannot have dozens of active hardware branches because each one represents a physical commitment. But you can borrow concepts like release branches and hotfixes, adapted to hardware timelines.
Worked Example or Walkthrough
Let us walk through a typical hardware revision cycle for a PCB design, and then map it to Git Flow concepts.
Scenario: Adding a New Sensor
A team is developing a wearable device. The hardware is at revision B, and the firmware is on Git with a develop branch. The product manager requests a new heart-rate sensor. On the software side, a developer creates a feature branch, adds the sensor driver, tests it, and merges to develop. On the hardware side, the electrical engineer must:
- Check the current revision B schematic and BOM.
- Propose a change: add the sensor IC, supporting passive components, and adjust the PCB layout.
- Create an ECO in the PLM system. The ECO includes a description of the change, the affected documents, and a cost estimate.
- The ECO goes through review: a peer engineer checks the schematic; a mechanical engineer checks clearance; a procurement specialist checks part availability.
- After approval, the engineer releases revision C. This creates a new set of design files and a new BOM. The old revision B is archived but still referenced for existing inventory.
- Prototypes of revision C are built and tested. If issues are found, a new ECO is created for revision D.
Now, how does this map to Git Flow? The ECO is like a pull request. The review process is like code review. The release of revision C is like merging to main and tagging a release. But note: there is no develop branch. The hardware team works directly on the current revision (like main) and only branches when absolutely necessary (e.g., a customer-specific variant). Hotfixes are also ECOs, but they are expedited with limited review.
One common mistake is to treat hardware revisions like software commits. A hardware engineer might be tempted to create a new revision for every small change, but that would overwhelm the PLM system and confuse manufacturing. Instead, hardware teams batch changes into meaningful releases. This is similar to software release trains, where multiple features are bundled into a single release.
Edge Cases and Exceptions
Compliance and Certification
In regulated industries (medical devices, automotive, aerospace), every hardware revision may require re-certification. A change as small as a resistor value can trigger a new round of EMI testing or safety certification. In software, a minor patch might skip full regression testing. This asymmetry means that hardware teams are more conservative about what constitutes a revision. They may use a concept of "engineering change" vs. "production change"—the former is for prototyping, the latter for released products.
Part Obsolescence
A unique hardware edge case is part obsolescence. A component used in revision B may become discontinued. The team must find a replacement, which may require a new revision even if the functionality is identical. This is not a feature change; it is a maintenance change. In Git Flow, you would create a hotfix branch and merge it. In hardware, you create an ECO, update the BOM, and release a new revision. The change may be trivial electrically, but the paperwork is the same.
Multiple Product Variants
Hardware teams often manage multiple variants of the same product (e.g., region-specific power supplies). Each variant may have its own revision history. In Git, you would use branches or forks. In hardware, you might use a common base design with variant-specific overlays. The PLM system tracks which variants share which revisions. Merging a change from one variant to another is manual and error-prone.
Firmware and Hardware Coupling
Firmware is software but is tightly coupled to hardware revisions. A firmware binary may be tied to a specific hardware revision via pin mappings, register addresses, or timing constraints. When hardware changes, firmware must be updated. This creates a dependency graph: firmware commit X works with hardware revision B, but not C. Teams need a way to express this compatibility. Some use a compatibility matrix in the revision control system, or they embed the hardware revision in the firmware version string.
Limits of the Approach
The conceptual framework we have described—treating hardware revisions as heavyweight, batched changes with manual merging—has limits. It works well for established products with stable teams, but it struggles in early-stage prototyping where speed is critical. In a startup, hardware teams may want to iterate as fast as software, but the tooling and process fight them. They may resort to informal methods: sharing files on a server, using Git for schematic files (though binary diffs are useless), or skipping ECOs for prototypes. This can lead to chaos when a prototype works but the design files are lost.
Another limit is that the framework assumes a central PLM system. Small teams may not have the budget or expertise to run a PLM. They may use a combination of Git (for firmware) and cloud storage (for design files). That works until they need to trace a field failure back to a specific revision. Without a single source of truth, the traceability breaks.
Finally, the framework does not address the human side: software and hardware engineers have different cultures. Software engineers value agility and dislike heavy process; hardware engineers value rigor and dislike ambiguity. A framework that tries to bridge them must include communication practices, not just tooling. Regular cross-domain syncs, shared terminology, and joint design reviews help, but they are outside the scope of revision control.
Reader FAQ
Can we use Git for hardware design files?
You can, but it is not ideal. Git works well for text files, but hardware design files are often binary (CAD, Gerber, PDF). Git can store them, but diffs are unreadable, and merging is impossible. You lose the main benefit of Git: cheap branching and merging. Some teams use Git for metadata (BOMs in CSV, change logs) and a separate PLM for binary files. That can work if the team is disciplined about keeping them in sync.
What is the best branching model for hardware?
There is no single best model, but a common pattern is to have one main branch (current released revision), one development branch (next revision), and short-lived feature branches for experiments. Feature branches are rare because they require full design copies. A simpler model is to use the PLM's built-in revision numbering and skip Git-style branching altogether. The key is to match the branching model to the team's release cadence.
How do we handle firmware-hardware compatibility in revision control?
One approach is to tag firmware commits with the hardware revision they target (e.g., a tag "hw-rev-B"). Another is to maintain a compatibility file in the firmware repository that lists supported hardware revisions. When a hardware revision changes, the firmware team updates the file and creates a new firmware release. Automated tests can verify compatibility by flashing the firmware onto the correct hardware revision.
Should we use the same tool for both?
Probably not. The needs are different enough that a single tool would be a compromise for both. Instead, use a PLM for hardware and Git for software, and integrate them with a lightweight bridge: a script that updates a status field in the PLM when a firmware release is made, or a webhook that notifies the hardware team when a software change affects hardware. The integration should be minimal to avoid adding overhead.
To move forward, start by mapping your current hardware revision process to the concepts we discussed. Identify where the bottlenecks are: is it the ECO review cycle? The manual merging? The lack of traceability? Then, borrow one or two practices from Git Flow—like release trains or hotfix procedures—and adapt them to your hardware process. Do not try to copy the entire model. Finally, invest in cross-domain training: have software engineers shadow a hardware revision cycle, and vice versa. Understanding the other domain's constraints is the first step to a workflow that works for both.
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!