For years I have been using a multi-level revision system. I had to deal with revisions on mechanical parts and associated variety of manufacturing steps, electronics and the multi-level nature of that discipline, as well as finished assemblies.
What I do is a break up the revisions into multiple pieces and keep the revision synced with all stages of the process.
example revision: A-v1a
abbreviated for space: A1A
A = Master design revision. This covers the basic design intent and functionality of the part. It gets incremented when fairly big changes happen that impact the usage or function of the part. If a pad is moved, holes are moved, part type changes on a PCB this is incremented.
-v1 = is the practical revision level. This captures smaller changes that do not impact the intended function of the part but are required to make it work. Traces being moved, component value changes, cosmetic features increment this level. the '-v' is a random addition that I put in early on and habitually kept doing. The idea was that in conversation I was saying 'Revision A, version 1' so A-v1 seemed logical. I am now using the abbreviated 'A1A' a bit more
a = is the manufacturing revision. This captures the manufacturing related changes like CNC programming, special tools, assembly kits, etc. It ties the revisions from engineering to the final assembly which drastically reduces confusion. When the paperwork is sitting on the manufacturing or assembly bench, it is easy to see there is an engineering change because the parts list, assembly instructions, CNC programs, are now older than the engineering data. If the changes were not yet sorted by that point, it triggers a review to see how the engineering changes have impacted the manufacturing and assembly process.
Every stage of the process should have matching revisions on everything - models, schematic, PCB, CNC, BOM, Assy sequence, drawings, etc, etc. A lot of this was figured out after a number of assemblies were bad because of misunderstandings of changes.
Data management is a critical part of this. Related files are grouped into logical folders. Each batch of parts or software release triggers a quarantined package of data that was used to create it along with a batch number. That way, when a problem is found - we can track down all affected assemblies and have a permanent record of exactly what went wrong.