Correct Parts, Wrong Assembly: Tolerance Stack-Up in Multi-Part 3D Prints

Correct Parts, Wrong Assembly: Tolerance Stack-Up in Multi-Part 3D Prints

You have done everything the guides tell you. Every part in the assembly was measured with a caliper and came out inside spec. The holes are round, the bosses are not cracked, the walls are thick enough that nothing flexes. You lay the parts out on the bench, start stacking them up with the screws, and the last hole does not line up. Or the lid sits down on one corner and rocks. Or the gear pair that meshes perfectly on the bench binds the moment it is bolted into the frame.

Nothing is wrong with any single part. The assembly is wrong anyway. That gap – the one between "each part is correct" and "the assembly works" – is tolerance stack-up, and it is the one topic our entire 3D printing design archive has been circling without ever naming.

This article closes the design chain. Everything from wall count and ribs to threads and seals is about a single part doing its job. Stack-up is about what happens when three of those correct parts meet the same screws.

Why correct parts still do not fit

Here is the arithmetic that makes it inevitable. Suppose a bracket must clamp a 40 mm wide plate. The plate is nominally 40.0 mm. The bracket's inner width is nominally 40.4 mm, a generous 0.2 mm of clearance per side. Both parts are perfectly designed. Both parts are 0.4 mm off in the wrong direction – the plate at 40.4, the bracket at 40.0 – and you have a 0.4 mm interference instead of a 0.4 mm gap. In practical terms, two parts that each measure "in tolerance" have just gone from a sliding fit to a press fit they cannot assemble by hand.

The trap is that we specify and inspect clearances as if they were single values. They are not. A clearance is the difference between two distributions, and the further apart the parts were measured on the day, the more likely nature decides to put the smallest plate and the smallest bracket in the same box.

There is a second, sneakier version of the same problem. Sometimes the parts do go together and the assembly still fails, because the error cancels in a hidden direction. A lid that sits 0.3 mm low at one corner does not leak or rattle. It closes. Then the seal no longer gets its squeeze, and it weeps three weeks later. The assembly passed its functional test on day one and never got a chance to tell you that it was pre-loaded wrong.

Worst-case arithmetic you can do in your head

Tolerance analysis has an intimidating reputation that is mostly undeserved. For 3D printed assemblies you need two numbers and one rule.

The rule: for a dimension formed by a chain of parts, the total variation in the worst case is the sum of the individual variations. If four parts each contribute ±0.15 mm to a stack, the stack moves ±0.60 mm in the worst case, not ±0.15 mm and not ±0.30 mm. Errors add.

The numbers: measured here, on an ordinary desktop FDM machine, with parts measured the way the inspection workflow recommends. External dimensions usually land within ±0.1 to ±0.2 mm. Internal holes are worse, typically ±0.15 to ±0.3 mm, and much worse if the hole is small or the part warped. Resin parts are a different animal entirely – often ±0.05 to ±0.1 mm, but with their own systematic shrinkage that you must calibrate out.

Put those together and the sobering result is this: a stack of four printed FDM parts, each "good", can walk ±0.8 mm. If your design has 0.4 mm of total clearance, the assembly is a coin flip. That is the entire explanation for the last assembly you could not figure out.

A worked example: the plate and the lid

Let us do it properly with a real, common structure – a printed enclosure with a lid that must seat on a gasket inside a rim.

Feature in the chain Nominal Realistic variation
Rim height, printed vertically (Z) 12.00 ±0.15
Lid skirt depth (Z) 12.20 ±0.15
Gasket groove depth, printed into the lid (Z) 1.50 ±0.15
Gasket compressed height, TPU 95A 1.20 ±0.10
Total worst-case movement ±0.55

Design intent: 0.7 mm of gasket squeeze. Worst-case loss: 0.55 mm. That leaves as little as 0.15 mm of squeeze on an unlucky unit, which is not enough to seal. The design is not "wrong" in any single part, but it is engineered to leak on the tail of the distribution.

Two honest fixes exist. You can cut the number of links in the chain by printing the groove into the body instead of the lid, removing one ±0.15 entirely. Or you can buy robustness on purpose – overcompress the gasket so even the worst case still has squeeze, which is exactly what a soft TPU 95A gasket lets you do where a hard gasket would not.

Five ways to make an assembly tolerant

You almost never want to chase a tighter tolerance. Getting a desktop FDM machine from ±0.2 to ±0.1 mm across a whole product is a project. Making the assembly forgiving is an afternoon of CAD. Here are the five moves that do the most work.

1. Shorten the chain

The best tolerance fix is deletion. Every part that touches the chain adds its own variation, so ask of each one: does this need to exist, or can two features become one printed body? Moving a locating groove from a separate part into the parent body removes a whole link. This is why print-in-place designs are often so reliable – not because the printer is more accurate, but because the chain is nearly empty.

2. Give every fastener a clearance hole, and not a small one

A screw is not a locating feature. It is a clamp. If you drill a 3.2 mm hole for a 3 mm screw, you have given yourself 0.2 mm of positional slack – and you will need much more. Standard practice is to give the clearance hole at least 0.4 to 0.6 mm of diametral slack so that the position of the hole can be wrong while the clamping still works. The bracket and mount failures people blame on cracked screw holes are frequently stack-up in disguise.

3. Introduce exactly one adjustment feature

A design with no adjustment must be perfect. A design with one adjustment can be built wrong and still work. That one feature can be a slotted hole instead of a round one, a shim of a known thickness, or a set of three discrete mounting positions where only one is used. The engineering condition for this trick is subtle: the adjustable joint must be tightened last, after every fixed joint is already fastened. Tighten the adjustable one first and you have not removed the stack-up, you have merely moved it somewhere else.

4. Use a self-aligning feature, not a flat face

Two flat faces cannot tell you where they are. A chamfer, a taper, or a lead-in cone can. Every self-aligning feature you add converts positional error into a centering force, and a taper is remarkably forgiving: a 30 degree lead-in over 2 mm of depth will absorb 0.5 mm of lateral misalignment without complaint. This is why pivot and bushing assemblies should be designed as taper-and-seat, never as two cylinders that must be coaxially perfect.

5. Let a compliant part absorb what is left

When the arithmetic refuses to work out, stop fighting it and give the error somewhere to go. A compliant arm, a thin living hinge, or a soft gasket acts as an elastic reservoir: the stack-up still happens, but it is stored as deflection rather than as interference. This is where flexible material earns its keep. A hardness-selected TPU pad between two rigid parts is often the cheapest possible tolerance fix, because it costs one part and no precision.

Where the error actually comes from

It is worth knowing which of the contributions is dominant, because that is the only one worth attacking. In our measurements on printed parts, the sources rank roughly like this.

Source Typical contribution Can you fix it in CAD?
Thermal shrinkage of the material 0.3 to 1.0 percent of dimension Partly – scale the model or choose a lower-shrink material
Extrusion width compensation on holes 0.15 to 0.30 mm per hole Yes – horizontal compensation and flow tuning
Warping on large flat features 0.3 to 1.0 mm across a 100 mm span Partly – geometry, orientation and cooling are all levers
Elephant foot on the first layers 0.1 to 0.3 mm at the base Yes – chamfer the base, tune the first layer
Backlash and belt slop across the machine 0.05 to 0.15 mm No – maintenance only

Two of these are worth a note. Shrinkage is not a mystery, it is a coefficient – if the number is repeatable, you can simply scale the model, and we have written about why shrinkage is arithmetic rather than a defect. Warping is the one that hurts assemblies worst, because it is not a uniform offset you can compensate; it is a shape change that distorts the relationship between features. A 100 mm plate that bows 0.8 mm in the middle can have both of its edge holes perfectly positioned and its centre boss 0.8 mm out. That is why an assembly should never rely on a large printed flat as a locating datum if it can avoid it.

Material choice moves these numbers more than most people expect. Filled engineering filaments are the pragmatic lever here, because the fibre reduces both shrinkage and the creep that lets a clamped joint drift over months. PA6-CF20 and PET-CF17 are the usual picks for parts that must hold a dimension under load, PA12-CF10 trades a little stiffness for much better moisture stability, and ABS-CF and ASA-CF08 cover the case where you also need heat or UV resistance. On the unfilled side, PETG is the honest general-purpose choice and its matte variant changes nothing about the numbers. Where a small assembly needs sharp, stable detail rather than toughness, resin is worth considering – impact-modified engineering resin prints features fine enough that the whole stack-up problem shrinks with the part.

Environment belongs in the same list. A material dried to a stable moisture content prints a predictable dimension; a spool that has been sitting open does not. If a design is marginal on tolerance, drying is not a print-quality nicety, it is part of the dimensional spec – which is the whole argument for keeping stock in something like the FDC12 drying cabinet rather than on a shelf.

The measurement problem inside the assembly

There is a hard limit that no CAD trick removes, and it is worth stating plainly because it is the difference between a design that works and a design you can verify.

On a desktop FDM machine you can realistically hold a few tenths of a millimetre on a good day. That means any assembly whose correct function depends on a feature smaller than about 0.3 mm is not really designed – it is hoped for. The practical consequence is a rule worth writing on the wall: if the feature is smaller than the error, it is not a feature, it is a coin toss.

This is why measurement discipline feeds directly into assembly reliability. If you do not know the actual fit your machine delivers, every clearance in your model is a guess, and guesses compound exactly like tolerances do. Print a test piece with holes from 3 to 12 mm, print the matching pins, measure every pair, and write the offset down. Then design with that number instead of with the number you wish were true. The general workflow is described in our dimensional accuracy and inspection pieces; what matters here is that the same calibration number should drive every interface in the assembly.

Designing the datum, not just the part

Most hobby-level CAD teaches you to dimension parts. Assemblies need something slightly different: a decision about which features are trusted, and which are merely along for the ride.

Pick one feature per part and declare it the locating feature. It should be a small, precise, early-printed, non-decorative feature: a countersunk hole, a small boss, a pin. Everything else in that part should be positioned relative to it, and every interface should reference it rather than the part's outer skin. This is the discipline that separates an assembly that assembles from one that merely fits on the bench.

Three habits follow from it. Trust a pin over a face, because a pin is a point and a face is a plane full of opportunities for warping. Put the locating features as close together as the function allows, because the further apart they are, the more any angular error at one becomes a linear error at the other. And never locate from a printed surface that also has to look good – textured or effect filaments in particular change the surface geometry, and a locating face is the wrong place to spend that variation.

Where the printed assembly stops being the right answer

Honesty about limits is part of good engineering, so let us name the point at which tolerance stack-up tells you to stop printing the whole thing.

If a joint needs to hold a position within better than about 0.1 mm, or needs to survive being bolted and unbolted repeatedly without drifting, then a printed part alone is the wrong tool. The answer is usually a hybrid – print the body for shape and cost, and let a bought-in metal element carry the precision. This is the same instinct behind heat-set inserts and embedded hardware: the printed part provides structure and the steel provides the accuracy. The same reasoning applies when a bolted stack is clamped, where the compression behaviour of the printed material, not its dimensional accuracy, is what limits you – a topic the material's creep and preload behaviour governs.

That does not diminish the printed assembly. It just says that precision and structure are separate problems, and that a good design assigns each one to the component best suited to carry it.

The checklist

  1. Write down the chain explicitly. Every part between the two faces you care about, in order, on paper.
  2. Estimate each link's variation. For printed FDM features, start at ±0.15 mm and go up for holes, large flats and thin walls.
  3. Sum them. If the total is more than half your available clearance, redesign now rather than after the print.
  4. Delete a link if you can. Move the feature into the parent body and re-run the sum.
  5. Give every fastener a real clearance hole, 0.4 to 0.6 mm of slack, and treat it as a clamp rather than a locator.
  6. Add exactly one adjustment feature, and tighten it last.
  7. Replace flat locating faces with tapers or chamfers wherever the function allows.
  8. Put a compliant part where the arithmetic refuses to close.
  9. Pick one datum per part and dimension everything else from it.
  10. Write down your machine's real fit numbers and leave them in the file for next time.

The short version

A part is a geometry problem. An assembly is a statistics problem. The moment you have more than one printed part in a joint, you are no longer dealing with a dimension but with the difference between two distributions, and the difference of two good parts is frequently bad.

The engineers who build reliable printed machines are not the ones with the most accurate printers. They are the ones who design assemblies that would still go together if the printer were having a bad day. Shorten the chain, spend your clearance on the fasteners, give yourself one honest adjustment, and let the arithmetic finish the design instead of discovering it on the bench.

How much of your print time goes into assemblies rather than single parts – and has a stack-up ever cost you a rebuild you blamed on the printer? We would like to hear about it.


Grip, Knurl and Handwheel: Designing the Part Your Hand Actually Touches

Load Paths, Not Shapes: Designing 3D Printed Load-Bearing Parts That Do Not Creep Apart