Tolerance Stackups in Digital Fabrication: A Practical Guide to RSS Analysis, Engineering Fits, and Technology Selection

Complete guide to tolerance stackup analysis for 3D printing and CNC machining. Covers RSS and worst-case methods with LaTeX, technology-specific tolerances (FDM/SLA/SLS/MJF), engineering fit design rules, and a practical pre-manufacturing checklist.

·

Tolerance Stackups in Digital Fabrication: A Practical Guide to RSS Analysis, Engineering Fits, and Technology Selection

Your 3D printed assembly doesn't fit together. The shaft is too tight for the bearing. The snap-fit tabs won't snap. You print it three more times, tweaking tolerances in 0.1 mm increments until something works — and you have no idea why. A week of trial and error later, the parts finally assemble, but you've burned through half a spool of filament and you're no closer to understanding the underlying problem.

This is the tolerance stackup problem. It's the single most common cause of assembly failure in digital fabrication, and it's almost entirely preventable with a systematic approach.

In this guide, we'll walk through the complete tolerance stackup methodology — from the mathematical foundations of worst-case and RSS (root sum squared) analysis, through technology-specific tolerance data for FDM, SLA, SLS, MJF, and CNC, to practical design strategies for engineering fits. By the end, you'll have a repeatable process for specifying tolerances that work on the first print.


What Is a Tolerance Stackup?

A tolerance stackup occurs whenever multiple parts with their own dimensional variation come together in an assembly. Each part has a nominal dimension and a tolerance — the allowable deviation from that nominal. When you stack parts together (a shaft through a bearing, a PCB into an enclosure, a bolt through multiple plates), the individual tolerances accumulate. The accumulation can make the difference between a smooth-running assembly and one that binds, rattles, or simply won't go together.

Consider a simple 3-part stack: a base plate, a spacer, and a lid, all designed to fit within a total height constraint of 50 \pm 0.3\text{ mm}.

If each part is specified at its nominal thickness with a tolerance of \pm 0.15\text{ mm}, the worst-case accumulated tolerance is:

That's already 50% over the 0.3\text{ mm} assembly limit — and we haven't even accounted for surface roughness, thermal expansion, or assembly misalignment.

This is why understanding how tolerances combine is foundational to designing anything that assembles. You can't just assign \pm 0.1\text{ mm} to everything and hope for the best — you need a method.


Two Approaches: Worst-Case vs. RSS

There are two primary methods for analyzing tolerance stacks: worst-case analysis and statistical (RSS) tolerance analysis. Understanding when to use each is critical — they serve different purposes and produce dramatically different results.

Worst-Case Analysis

Worst-case analysis assumes every part in the assembly is manufactured at its extreme tolerance limit — and all extremes point in the same direction. It's the "everything that can go wrong, does go wrong, simultaneously" method.

For n components with tolerances T_1, T_2, ..., T_n, the worst-case assembly tolerance is:

This method is always conservative, often unrealistically so. For a 5-part assembly where each part has \pm 0.1\text{ mm} tolerance, worst-case says the assembly tolerance is \pm 0.5\text{ mm}. But what are the actual odds that all five parts simultaneously hit their extreme tolerance in the same direction?

For a process where tolerances represent \pm 3\sigma (99.7% of parts within spec), the probability that all five parts simultaneously hit the same extreme is:

That's effectively zero. Worst-case analysis is appropriate for safety-critical, low-volume assemblies (medical implants, aerospace fittings) where a single failure is unacceptable. It's overkill for production volumes and will drive your manufacturing costs through the roof by forcing unnecessarily tight tolerances.

RSS (Root Sum Squared) Analysis

The RSS method recognizes that dimensional variations in a production run tend to follow a normal distribution and are statistically independent. Some parts will be slightly larger, some slightly smaller — and the probability that they all deviate in the same direction falls dramatically as part count increases.

The key insight: variances add, not standard deviations. For independent normally-distributed dimensions:

Where \sigma_i is the standard deviation of each dimension. If tolerances are specified at \pm 3\sigma (the standard assumption in manufacturing), then:

And the RSS assembly tolerance becomes:

This is the fundamental RSS equation. Let's apply it to our 3-part stack example from earlier:

Under RSS, the assembly tolerance is \pm 0.26\text{ mm} — comfortably within the \pm 0.3\text{ mm} target. Compare that to the worst-case result of \pm 0.45\text{ mm}, which was 50% over spec. The RSS method reveals that the assembly will actually work for 99.7% of production, without requiring tighter individual tolerances.

When to Use Which

Here's the decision framework:

graph TD
    A[Start: Tolerance Analysis Needed] --> B{Production volume?}
    B -->|1-10 units| C{Is failure catastrophic?}
    B -->|100+ units| E[Use RSS Analysis]
    C -->|Yes - medical/aero| D[Use Worst-Case Analysis]
    C -->|No - prototype/fit check| E
    D --> F[Compute WC sum<br/>T = Σ Tᵢ]
    E --> G[Compute RSS<br/>T = √(Σ Tᵢ²)]
    F --> H{Assembly in spec?}
    G --> H
    H -->|Yes| I[✅ Release tolerances]
    H -->|No| J{Tighten which dim?}
    J --> K[Tighten dim with largest σ²<br/>Recompute RSS]
    K --> H

The Piston O-Ring Example

Let's walk through a real RSS analysis. You're designing a hydraulic piston with an o-ring seal. The o-ring requires 10-30% static compression to seal properly. You have an off-the-shelf cylinder bore (\varnothing 25.4 \pm 0.025\text{ mm}), a standard o-ring with cross-section 1.78 \pm 0.08\text{ mm}, and a custom-machined piston. You need to specify the machining tolerance for the piston's o-ring groove diameter.

Step 1: Build the stack equation. The o-ring compression X depends on the radial clearance:

Where D_{\text{bore}} is the cylinder bore diameter, D_{\text{piston}} is the piston groove diameter, and d_{\text{o-ring}} is the o-ring cross-section diameter.

Step 2: Establish compression limits. For a 1.78 mm o-ring:

Step 3: Compute individual variances. Assuming \pm 3\sigma tolerances:

Dimension · Tolerance · \sigma · \sigma^2

Bore ID · \pm 0.025 · 0.00833 · 6.94 \times 10^{-5}

O-ring CS · \pm 0.08 · 0.02667 · 7.11 \times 10^{-4}

Piston GD · \pm 0.05 · 0.01667 · 2.78 \times 10^{-4}

Step 4: Compute RSS assembly standard deviation:

(The division by 4 comes from the factor of 1/2 in the stack equation — variance scales with the square of the coefficient.)

Step 5: Convert back to \pm 3\sigma tolerance:

Step 6: Check against limits. The nominal compression (using mean values) is X_{\text{nom}} = (25.4 - 22.0)/2 - 1.78 = 1.7 - 1.78 = -0.08\text{ mm} — this is negative, meaning the o-ring isn't compressed at all. We need to adjust the piston groove diameter. After adjusting to D_{\text{piston}} = 21.2\text{ mm}:

Now check limits: X_{\text{min, actual}} = 0.32 - 0.085 = 0.235\text{ mm} (above 0.178 ✓) and X_{\text{max, actual}} = 0.32 + 0.085 = 0.405\text{ mm} (below 0.534 ✓). The \pm 0.05\text{ mm} piston tolerance works.

Without RSS, you might have specified \pm 0.01\text{ mm} on the piston "just to be safe" — a tolerance that costs 3-5× more to machine. RSS gave you the data to make the right call.


Technology-Specific Tolerances

Not all fabrication processes are created equal. The achievable tolerance varies dramatically by technology, and specifying a tolerance a process can't hold is just as bad as not specifying one at all. Here's what each technology can actually deliver, based on data from Xometry's production network:

Technology · Typical Tolerance · Lower Limit · Best For

FDM (Desktop) · \pm 0.5\% · \pm 0.5\text{ mm} · Prototypes, large parts, functional testing

FDM (Industrial) · \pm 0.15\% · \pm 0.2\text{ mm} · Production jigs, end-use parts

SLA/DLP · \pm 0.5\% · \pm 0.2\text{ mm} · High-detail visual models, molds

SLS (PA12) · \pm 0.3\% · \pm 0.3\text{ mm} · Functional parts, complex assemblies

MJF (PA12) · \pm 0.3\% · \pm 0.3\text{ mm} · Production parts, isotropic strength

Carbon DLS · \pm 0.1\% · \pm 0.1\text{ mm} · High-precision engineering parts

DMLS/SLM (Metal) · \pm 0.2\% · \pm 0.1\text{–}0.2\text{ mm} · Metal end-use parts

PolyJet · \pm 0.05\text{–}0.1\text{ mm} (first 100 mm) · — · Visual/aesthetic prototypes

CNC Machining · \pm 0.05\text{–}0.1\text{ mm} (standard) · \pm 0.005\text{ mm} (precision) · Production metal/plastic parts

Note: The percentage tolerances mean the tolerance scales with part size. A 200 mm FDM part has a tolerance of \pm 1.0\text{ mm}, not \pm 0.5\text{ mm}. The "lower limit" is the floor — even a 10 mm part won't go below that limit.

What Drives These Numbers

Material shrinkage is the dominant factor. PLA shrinks 0.3–0.5% during cooling. Nylon 12 shrinks 2–3.5%. PVDF can shrink up to 4%. Semi-crystalline polymers (PA, PPS, PEEK) shrink more than amorphous ones (ABS, PC) because polymer chains align into ordered crystalline regions during cooling, causing densification.

Process physics matters too. In FDM, the extruded bead bulges beyond the nozzle path by roughly 10-25% of the nozzle diameter. A 0.4 mm nozzle produces a bead roughly 0.44–0.50 mm wide. This bulge directly impacts feature resolution and fit clearances.

Layer thickness creates a stair-stepping effect on curves and angles. A 0.2 mm layer height on a 45° slope produces visible steps that can alter the effective dimension of a feature by up to 0.1 mm.

Thermal effects in powder bed processes (SLS, MJF) cause uneven cooling. Large flat surfaces are particularly prone to warping because the top cools faster than the bottom — the classic "potato chip" effect. MJF mitigates this somewhat with its heated build chamber and uniform fusing agent application, but parts still shrink 2–3%.

The Process Capability Reality

The tolerances above assume a well-calibrated machine running optimized parameters. In practice, process capability varies:

graph LR
    A[Technology Choice] --> B[Material Selection]
    B --> C[Printer Calibration]
    C --> D[Part Geometry]
    D --> E[Post-Processing]
    E --> F[Actual Tolerance]
    
    style A fill:#ffffff,stroke:#000000,color:#111827
    style B fill:#ffffff,stroke:#000000,color:#111827
    style C fill:#ffffff,stroke:#000000,color:#111827
    style D fill:#ffffff,stroke:#000000,color:#111827
    style E fill:#ffffff,stroke:#000000,color:#111827
    style F fill:#f9fafb,stroke:#000000,stroke-width:2px,color:#111827

The single biggest variable? Printer calibration. A well-tuned desktop FDM printer can outperform a neglected industrial machine. Before relying on any published tolerance data, print a calibration cube and measure it. If your 20 mm cube measures 19.7 mm, you have a 1.5% systematic error that needs to be compensated in your slicer (or fixed mechanically) before you design anything with fits.


Engineering Fits for 3D Printed Parts

ISO 286, the international standard for engineering fits, was developed for subtractive manufacturing. It assumes you can hold tolerances of \pm 0.01\text{ mm} or better — an assumption that breaks down completely for FDM and most additive processes.

For 3D printed assemblies, you need a different framework. The three fit categories remain the same, but the design rules change:

Clearance Fits: The 1-2× Extrusion Width Rule

For FDM parts that need to slide or rotate, the most reliable rule of thumb is to allow 1–2× your extrusion width as radial clearance. The extrusion width is typically 1.0–1.25× your nozzle diameter.

Nozzle Diameter · Extrusion Width · Tight Sliding Fit · Free Running Fit

0.4 mm · 0.48 mm · 0.5 mm · 1.0 mm

0.6 mm · 0.72 mm · 0.7 mm · 1.5 mm

0.8 mm · 0.96 mm · 1.0 mm · 2.0 mm

For example, a bearing pocket designed for a \varnothing 22\text{ mm} bearing on a 0.4 mm nozzle printer should be modeled at \varnothing 22.5\text{ mm} for a tight press-in fit, or \varnothing 23.0\text{ mm} for a drop-in fit.

This rule accounts for both the bead bulge (the extruded filament is wider than the nozzle path) and surface texture (the ridged surface of FDM parts increases effective diameter). For SLS and MJF parts, which have smoother surfaces and better dimensional accuracy, you can reduce these clearances by 50–60%.

Transition and Interference Fits: Design Around the Material

Achieving a true interference fit with FDM — where the shaft is larger than the hole — is extremely difficult. The material's layer adhesion is weaker than the bulk material, so forcing an interference fit typically causes delamination, not elastic deformation.

Instead of forcing the material to stretch, use geometry to create the same mechanical effect:

Crush ribs are the most reliable approach. Design the hole at clearance-fit dimensions, then add 0.2 mm vertical ribs around the circumference. The ribs deform locally during assembly, creating controlled interference without stressing the surrounding walls:

Design: 22.5 mm hole + four 0.2 mm radial ribs
Result: 22.1 mm effective ID at rib tips → 0.1 mm interference on a 22 mm shaft

For a permanent press-fit, ribs run the full depth. For serviceable connections, taper the ribs by ~2° so only one end creates interference.

Relief features allow hole walls to flex during insertion. Model the hole at the shaft's true diameter, then add thin radial cuts or split sections that act as living springs. This works well for snap-fit enclosures and serviceable connections.

Hexagonal or square shafts in round holes reduce the stretching required compared to round-on-round interference. The corners concentrate the interference while the flats provide clearance — the hole only needs to stretch locally at fewer points:

graph TD
    subgraph "Round Shaft"
        A[Full circumference<br/>must stretch] --> B[High stress<br/>Risk of cracking]
    end
    subgraph "Hex Shaft"
        C[Only 6 corners<br/>interfere] --> D[Lower stress<br/>Material flexes locally]
    end
    
    style A fill:#ffffff,stroke:#000000,color:#111827
    style B fill:#fee2e2,stroke:#000000,color:#111827
    style C fill:#ffffff,stroke:#000000,color:#111827
    style D fill:#dbeafe,stroke:#000000,color:#111827

Grip fins offer a reusable transition fit. Design thin cantilevered fins that flex during insertion and spring back, maintaining clamping force over multiple assembly cycles. Ensure fins exceed your minimum printable feature size, and trim the base layer to separate each fin from the hole floor so they can move freely.


CNC Machining Tolerances: A Different World

CNC machining operates in a completely different tolerance regime. Standard CNC shops routinely hold \pm 0.05\text{–}0.1\text{ mm}, and precision shops can hit \pm 0.005\text{ mm}. But those tight tolerances come at a cost — here's how cost scales with tolerance:

Tolerance · Relative Cost · Process Required

\pm 0.1\text{ mm} · 1× (baseline) · Standard 3-axis milling

\pm 0.05\text{ mm} · 1.5–2× · Careful setup, slower feeds

\pm 0.025\text{ mm} · 2–3× · Multiple setups, in-process measurement

\pm 0.01\text{ mm} · 4–6× · Precision fixturing, temperature control

\pm 0.005\text{ mm} · 8–12× · CMM inspection, climate-controlled environment

\pm 0.002\text{ mm} · 15–25× · Grinding, honing, specialized equipment

The cost multiplier isn't linear because each tighter tolerance band requires fundamentally different processes, not just more careful machining. Going from \pm 0.1 to \pm 0.05\text{ mm} might just mean slowing down. Going from \pm 0.01 to \pm 0.005\text{ mm} requires a climate-controlled room and a CMM inspection report.

The golden rule of CNC tolerances: only specify tight tolerances on features that actually need them. If a hole is just a clearance hole for a bolt, call out \pm 0.2\text{ mm} and move on. If it's a dowel pin locating hole, specify \pm 0.01\text{ mm} and pay for it. Mixing these up is the most expensive mistake in machining.

The ISO 2768 standard defines general tolerances that apply to any dimension not explicitly toleranced on a drawing. The four classes are:

Class · Designation · Linear Dimensions (mm) · Typical Application

Fine · f · \pm 0.05 (up to 6 mm) · Precision instruments

Medium · m · \pm 0.1 (up to 6 mm) · General engineering

Coarse · c · \pm 0.2 (up to 6 mm) · Rough machining, castings

Very Coarse · v · \pm 0.5 (up to 6 mm) · Unmachined surfaces

Adding "ISO 2768-mK" to a drawing tells the machinist: use medium tolerances for linear dimensions, and class K for angular dimensions. It's the standard starting point for most machined parts.


Practical Tolerance Stackup Workflow

Here's a step-by-step workflow you can apply to any assembly:

1. Identify the Critical Stack

Not every dimension chain matters. A clearance gap between a non-functional cosmetic panel and the chassis? Irrelevant. The fit between a bearing OD and its housing bore? Critical. Start by identifying which assemblies have functional requirements — alignment, preload, sealing, motion, retention.

2. Build the Stack Equation

Write out the mathematical relationship between the individual dimensions and the assembly-level dimension you care about. A simple linear stack:

Where G is the gap, A and B are component dimensions, and C is the mating feature dimension. Include conversion factors (like the 1/2 factor for radial clearance in the o-ring example).

3. Establish Acceptance Limits

What's the acceptable range for the assembly dimension? For a clearance fit: minimum clearance to avoid binding, maximum clearance to avoid excessive play. For an interference fit: minimum interference for retention, maximum interference to avoid material failure.

4. Gather Process Data

For each dimension in the stack, know:

If you don't have process data for your specific machine, use the technology-specific tolerances from the table above as a starting point, then verify with a test print.

5. Compute Assembly Tolerance

For production runs (100+ units), use RSS:

For low-volume or safety-critical assemblies, use worst-case:

6. Apply Mean Shift if Needed

If your manufacturing process has known biases (seasonal temperature variation, tool wear, material batch variation), add a 1.5\sigma mean shift to the affected dimensions. Recompute the assembly tolerance with the shifted means.

7. Compare and Iterate

Compare your computed assembly tolerance to the acceptance limits. If it passes, your tolerances are good. If it fails, identify which dimension has the largest variance contribution (largest \sigma^2 term) and tighten that tolerance first — it gives the biggest improvement per unit cost.


Design Rules by Technology

FDM Design Rules for Fits

SLA/DLP Design Rules for Fits

SLS/MJF Design Rules for Fits

CNC Design Rules for Toleranced Features


A Pre-Manufacturing Checklist

Before you send parts out for fabrication or hit "print," run through this checklist:

  1. Identified all critical dimension chains in the assembly
  2. Written the stack equation for each critical chain
  3. Gathered tolerance data for your specific process (not just generic values)
  4. Computed RSS assembly tolerance and compared to acceptance limits
  5. Checked each tolerance against process capability — is the process actually capable of holding the tolerance you specified?
  6. Applied fit design rules specific to your technology (crush ribs for FDM, clearance rules for SLS, relief features for press fits)
  7. Specified only necessary tight tolerances on CNC parts — every tight tolerance increases cost
  8. Accounted for post-processing — sanding removes material, coating adds it, bead blasting changes surface texture
  9. Printed a test coupon for critical fits — one calibration ring is cheaper than a failed 20-hour print
  10. Documented your assumptions — what \sigma assumption did you use? Did you apply mean shifts?

References

  1. Xometry Pro — "Tolerances & Accuracy in 3D Printing Technologies." Covers technology-specific tolerance data for FDM, SLA, SLS, MJF, DMLS, PolyJet, and Carbon DLS, including shrinkage rates and minimum feature sizes. xometry.pro/en/articles/3d-printing-tolerances
  1. Five Flute — "Introduction to Root Sum Squared (RSS) Tolerance Analysis." Comprehensive guide to the RSS method with detailed mathematical derivation, worked examples (sheet stack, piston o-ring), mean shift analysis, and discussion of assumptions and limitations. fiveflute.com/guide/introduction-to-root-sum-squared-rss-tolerance-analysis
  1. AON3D — "Engineering Fits: How to Design for 3D Printed Assemblies." Practical design strategies for clearance, transition, and interference fits in FDM 3D printing, including the 1-2× extrusion width rule, crush rib design, relief features, grip fins, and split clamp approaches. aon3d.com/applications/engineering-fits-how-to-design-for-3d-printed-assemblies
  1. ISO 2768-1:1989 — "General tolerances for linear and angular dimensions without individual tolerance indications." The international standard defining four tolerance classes (f, m, c, v) for machined parts. Referenced via multiple industry sources including Xometry Pro and RapidDirect tolerance guides.
  1. ISO 286 — "Geometrical product specifications (GPS) — ISO code system for tolerances on linear sizes." The foundational standard for engineering fits (clearance, transition, interference) and the ISO tolerance grade system (IT grades). Referenced through the AON3D engineering fits analysis for context on why additive manufacturing requires a different tolerancing approach.

More FabFlow blog posts