Follow the stops in order, in the app. Download the demo files first.
A complete Black Belt project run end to end in Analytics. You load each file, click where this guide says, and you should see the same numbers. If you do, you have learned the app and the method together. If you don't, the If something doesn't match section at the end tells you where to look.
Who this is for. A Green or Black Belt whose training went quickly and who still has questions such as "why am I checking normality?", "my data is text, so what now?" or "the data doesn't say what the team was sure of". Every stop answers those questions for this project, and the answers carry over to yours.
How each stop is laid out
One rule for the whole project. Call the characteristic
Seal_Thickness_mm everywhere. The project board matches records by that
name, and a different spelling in one study makes the board look broken.
Read these once before you start. Every stop uses them.
| Word | What it means, in plain words |
|---|---|
| Specification limits (LSL, USL) | What the customer allows for one part. Set by the customer or the design, not by your data. |
| Control limits | What the process does by itself when nothing unusual is happening. Calculated from your data. Never mix them up with specification limits. |
| Subgroup | A few parts made close together (here, 5 in a row). Differences inside a subgroup are short-term noise. Differences between subgroups mean something changed. |
| Stable (in control) | Only ordinary, random variation, with no point outside the control limits. Only a stable process has a capability you can promise. |
| Within σ and overall σ | Short-term spread (inside subgroups) and whole-period spread. Cp and Cpk use within; Pp and Ppk use overall. |
| p-value | If the suspected cause truly had no effect, the p-value is the chance of seeing a difference this large by luck alone. Small (below 0.05) means luck is a poor explanation. It says nothing about how big the effect is. |
| Confidence interval | The range of values the true number could plausibly take, given your data. If the interval contains your goal, your data cannot yet decide. |
| Effect (in an experiment) | How much the Y changes when one factor moves from its low setting to its high setting. |
Get them with Download the demo files on the app's front page. They are listed here in the order you use them.
| File | Phase | What it is | Rows |
|---|---|---|---|
DP1_define_reject_log_june.csv |
Define | One row per rejected seal in June, reason typed by the inspector | 312 |
DP2_measure_gauge_study.csv |
Measure | Gage R&R: 10 parts × 3 operators × 3 trials | 90 |
DP3_measure_baseline_june.csv |
Measure | 25 subgroups of 5 seals, one subgroup a day, with die temperature, line speed and shift | 125 |
DP4_analyze_by_subgroup.csv |
Analyze | The same June data, one row per subgroup | 25 |
DP5_improve_doe_july.csv |
Improve | A designed experiment: 3 factors, 2 replicates, 4 centre points | 20 |
DP6_improve_pilot_august.csv |
Improve | One month at the new settings, 30 subgroups of 5 | 150 |
DP7_control_before_after.csv |
Control | June and August stacked, with a Phase column |
275 |
DP2 and DP6 are the same data as the Seal thickness worked example, so the numbers in that example and in this guide agree.
The scenario. An injection-moulded gasket line. Seal thickness is the customer characteristic. Specification 2.000 ± 0.150 mm, so LSL 1.850, USL 2.150, target 2.000. About 5,400 seals were made in June.
Do this. Load DP1_define_reject_log_june.csv. Open Pareto.
Category variable = Reject_Reason. Leave the count variable on None (count
occurrences). Generate.
You should see eight bars, with "Too thick" appearing twice: 162 in one bar and 9 in another, near the end. (exact)
That's not an app fault. Nine rows were typed as Too thick with a space at
the end, and to a computer that is a different word. Go to Reshape, filter
and clean → Clean, tick Trim whitespace from text, apply, and use the
cleaned data. Run the Pareto again:
| Reason | Count | % | Cumulative % |
|---|---|---|---|
| Too thick | 171 | 54.8 | 54.8 |
| Surface flash | 58 | 18.6 | 73.4 |
| Short shot | 37 | 11.9 | 85.3 |
| Edge damage | 21 | 6.7 | 92.0 |
| Contamination | 13 | 4.2 | 96.2 |
| Unclassified | 11 | 3.5 | 99.7 |
| Too thin | 1 | 0.3 | 100.0 |
(exact)
Why this step. A project needs one Y. The Pareto chooses it from evidence rather than from whoever complained most recently. Here one reason is more than half of all rejects, so the project is about seal thickness running high. It is not about thickness in general: one seal in 312 was too thin.
What if your data isn't like this.
Show the math. % = count ÷ total = 171 ÷ 312 = 54.8%. Cumulative % adds the bars from the left: 54.8 + 18.6 = 73.4.
The trap. A split bar makes the top reason look smaller than it is. Before trimming, "Too thick" showed 51.9% and 2.9% in two places. Always read the whole category list before trusting the order.
On the Project (DMAIC board), fill the project card:
| Field | Value |
|---|---|
| Y | Seal_Thickness_mm |
| Goal | Cpk ≥ 1.33 on seal thickness, and thickness rejects below 0.1% |
| Sponsor | Production manager |
| Start | 2026-06-01 |
Problem statement (for the report): "In June 2026, 171 of about 5,400 seals (3.2%) were rejected as too thick, over the 2.150 mm upper limit. Too thick is 55% of all rejects. The goal is Cpk ≥ 1.33 and thickness rejects below 0.1% by the end of August."
A good problem statement names what, how much, when and where, and does not name a cause. "Rejects are high because the night shift is careless" is a conclusion wearing a problem statement's clothes. Keep it out, because the data at Stop 6 will disagree with it.
Do this. Load DP2_measure_gauge_study.csv. Open the Gage R&R Guide.
Part = Part, Operator = Operator, Measurement = Seal_Thickness_mm,
tolerance 0.300 (or LSL 1.850 and USL 2.150).
You should see
| Source | SD | % Contribution | % Study Var |
|---|---|---|---|
| Repeatability | 0.00319 | 0.18 | 4.28 |
| Reproducibility | 0.00257 | 0.12 | 3.45 |
| Total Gage R&R | 0.00410 | 0.30 | 5.50 |
| Part-to-part | 0.07442 | 99.70 | 99.85 |
%GRR 5.50% · %Tolerance 8.20% · ndc 25 · ACCEPTABLE (exact). The part × operator interaction has p = 0.835, so it is pooled into repeatability.
Why this step. Every number from here on is a number the gauge gave you. If the gauge is poor, the process will look worse than it is, and you may spend months "improving" a process that was never the problem.
What if your data isn't like this.
Show the math. %Study Var = GRR SD ÷ total SD = 0.00410 ÷ 0.07453 = 5.50%. The number of distinct categories is ndc = 1.41 × part SD ÷ GRR SD = 1.41 × 0.07442 ÷ 0.00410 = 25.6, truncated to 25. Below 10% is acceptable and ndc of 5 or more lets the gauge tell parts apart. This gauge passes both comfortably.
The trap. %Contribution (0.30%) and %Study Var (5.50%) describe the same gauge on different scales, with different thresholds. Quoting 0.30% against a 10% rule makes a gauge look better than it is. The app keeps them in separate columns for that reason.
Do this. Load DP3_measure_baseline_june.csv. Open the Control Chart
Guide. Column = Seal_Thickness_mm, group column = Subgroup, rows are in
time order. Subgroups of 5 → the guide names X̄-R.
You should see
| Chart | Lower | Centre | Upper | Points out |
|---|---|---|---|---|
| R (ranges) | 0 | 0.07816 | 0.16523 | 0 |
| X̄ (averages) | 2.00916 | 2.05426 | 2.09936 | 5 |
(exact). The X̄ points out are subgroups 10 and 15 (above) and 12, 21 and 23 (below). Verdict: not stable.
Why this step. Read the range chart first. It shows whether spread within a subgroup is steady. It is (0 out), so the X̄ limits can be trusted. The X̄ chart then says the average moves from day to day far more than five seals made together would suggest. Something changes between subgroups. Find it and the project is largely solved.
What if your data isn't like this.
Show the math. X̄ limits = X̿ ± A2 × R̄ = 2.05426 ± 0.577 × 0.07816 = 2.05426 ± 0.04510, giving 2.00916 to 2.09936. R upper limit = D4 × R̄ = 2.114 × 0.07816 = 0.16523. A2 and D4 are table constants for subgroups of 5.
The trap. Drawing the specification limits on an X̄ chart. The specification is for single seals, but an X̄ chart plots averages of five, which vary much less. Every average can sit inside the spec while individual seals fall outside it. The app does not draw them, deliberately.
Do this. Same file. Open the Capability Guide. Column =
Seal_Thickness_mm, LSL 1.850, USL 2.150, target 2.000. Step 2: in time
order, readings taken as a group, group column = Subgroup. Leave the
within-sigma selector on Pooled standard deviation.
The guide will warn that the process is not stable before it shows any index. That warning is correct and is the point of this stop. Continue to see the numbers, and read them with the warning in mind.
You should see
| Value | ||
|---|---|---|
| n | 125 in 25 subgroups of 5 | exact |
| Mean | 2.05426 | exact |
| Overall SD | 0.05162 | exact |
| Pooled within σ | 0.03336 | exact |
| Anderson-Darling | A² 0.291, p ≈ 0.61, normal | close |
| Cp | 1.499 | exact |
| Cpk | 0.957, 95% CI 0.812 to 1.102 | exact |
| Pp | 0.969 | exact |
| Ppk | 0.618 | exact |
| Expected out of spec (overall) | ≈ 31,900 ppm (3.2%) | close |
| Observed out of spec | 4 of 125, all above USL | exact |
Why this step, and how to read four indices without getting lost. Ask two questions in turn:
So the customer receives Ppk 0.62, the machine is capable of Cp 1.50, and the whole difference is drift plus off-centring. Neither needs a new machine. That one sentence tells the sponsor what kind of project this is.
The expected 3.2% out of spec agrees with the reject log: 171 of about 5,400 seals is 3.2%. When two independent sources agree, you can trust both.
What if your data isn't like this.
Show the math.
The trap. Reporting Cpk 0.96 as "nearly capable". On an unstable process, Cpk describes a process that exists only in short bursts. The customer receives the Ppk process.
The team's fishbone produced three suspects, and each of them has a supporter:
| Suspect | Recorded as | Type of X | The right tool |
|---|---|---|---|
| Shift ("night shift is careless") | Day or Night | Text, 2 groups | Two-sample comparison |
| Line speed ("we run too fast") | m/min | Number | Regression |
| Die temperature (the maintenance technician's view) | °C | Number | Regression |
This table is the most useful thing a shaky belt can learn. The test is chosen by the type of Y and the type of X, never by which test you learned last:
| X is text (groups) | X is a number | |
|---|---|---|
| Y is a measurement | t-test (2 groups), ANOVA (3 or more) | Regression / correlation |
| Y is pass/fail or a count | Chi-square, test of proportions | Logistic regression |
The Which test? Guide asks you these two questions and names the test.
Why a new file with 25 rows, not 125? Look at DP3. All five seals in a
subgroup share one die temperature, one speed and one shift, because they
were made together. For temperature, speed and shift, June gives you 25
observations, not 125. Testing on 125 rows counts every day five times and
makes weak effects look significant. DP4 holds one row per subgroup, with
the average thickness.
This is the assumption called independence. It appears in every test's list of assumptions and is the one belts skip most often. Ask: "Does each row carry new information about the X I'm testing?"
Do this. Load DP4_analyze_by_subgroup.csv. Which test? Guide:
Y = Avg_Seal_Thickness_mm, group = Shift.
You should see
| Day | Night | |
|---|---|---|
| n | 13 | 12 |
| Mean | 2.0608 | 2.0472 |
| SD | 0.0454 | 0.0405 |
Read it like this. p = 0.44, so the data cannot tell the shifts apart. If anything, the day shift runs slightly thicker, the opposite of the story.
Say it correctly. Not "the shifts are the same". The interval runs from −0.022 to +0.049 mm, and a 0.049 mm difference would matter. The honest sentence is: "June's data gives no evidence that shift matters, and shift cannot explain the day-to-day swings we saw, which are larger than this whole interval." The second half of that sentence is what closes the question.
Why this step. Blaming people is the easiest root cause to reach for and the most damaging one to get wrong. Testing the belief with data, then publishing the result, protects the night shift and keeps the team's trust.
What if your data isn't like this.
Show the math. t = difference ÷ √(s₁²/n₁ + s₂²/n₂) = 0.01355 ÷ √(0.04542²/13 + 0.04051²/12) = 0.01355 ÷ 0.01719 = 0.789.
The trap. Running this test on the 125-row file. Every day counts five times, the p-value shrinks, and a real-looking "shift effect" can appear from nothing.
Do this. Same file. Regression & correlation → Regression, simple
linear. Y = Avg_Seal_Thickness_mm, X = Line_Speed_m_min.
You should see slope +0.00107 mm per m/min, p = 0.736, R² = 0.5% (exact). Practical significance: EXPLAINS ALMOST NOTHING.
Read it like this. Across June, speed ran from 42 to 50 m/min and thickness did not follow it. Knowing the speed tells you nothing about the thickness. The belief was reasonable, and the data doesn't support it.
The good news in a "no". If speed doesn't affect thickness, speed may be a free lever: the line could run faster without hurting quality. Stop 9 tests that directly.
Do this. Same file and tab. X = Die_Temp_C.
You should see
| Value | |
|---|---|
| Equation | Avg thickness = −0.1263 + 0.010355 × Die_Temp_C |
| Slope | +0.0104 mm per °C, t = 12.65, p < 0.001 |
| R² / adjusted R² | 87.4% / 86.9% |
| S (residual SD) | 0.0155 |
| Practical significance | USEFUL FOR PREDICTION: the spread you would quote narrows from ±0.084 to ±0.030 mm |
(exact)
Read it like this. Each degree hotter makes the seal about 0.010 mm thicker. June's die temperature wandered from 204.5 to 219.8 °C, which alone moves thickness by 0.16 mm, more than half the whole tolerance. Subgroup 10, the highest point on the X̄ chart, was the hottest day (219.8 °C).
To centre the process at 2.000 mm: (2.000 + 0.1263) ÷ 0.010355 = 205.3 °C. June averaged 210.6 °C.
Why this step, and why it isn't the end. This is June's data as it happened, not an experiment. It shows that temperature and thickness move together. It cannot prove that changing the temperature will change the thickness: something else could drive both. Stop 9 proves it by setting the temperature on purpose.
What if your data isn't like this.
Show the math. Practical significance = 1 − S ÷ SD(Y) = 1 − 0.0155 ÷ 0.0428 = 0.638. The model removes about 64% of the spread you would have to quote. The ±0.030 band is 1.96 × S.
The trap. Stopping at "p < 0.05, root cause found". A p-value says an effect is real, not that it is big. Line speed could have been "significant" with enough data and still been useless. Read R² and the practical-significance verdict alongside p.
The team agreed to test three factors on purpose in one day. Each run made five seals and recorded their average.
| Factor | Low | Centre | High |
|---|---|---|---|
| Die temperature, °C | 200 | 205 | 210 |
| Line speed, m/min | 40 | 45 | 50 |
| Cooling time, s | 8 | 10 | 12 |
That is 2³ = 8 combinations, each run twice (16 runs), plus 4 runs at the centre = 20 runs in random order.
Do this. Open the DOE Guide. Under Or bring completed data, upload
DP5_improve_doe_july.csv. Map the columns:
Die_Temp_C, Line_Speed_m_min, Cooling_sSeal_Thickness_mmBlocksCenterPtFit the full model.
You should see (full model with the centre-point term)
| Term | Effect | Coefficient | p |
|---|---|---|---|
| Die temperature | +0.1006 | 0.0503 | < 0.001 |
| Cooling time | −0.0430 | −0.0215 | 0.002 |
| Line speed | −0.0030 | −0.0015 | 0.786 |
| Temp × Speed | +0.0027 | 0.0013 | 0.808 |
| Temp × Cooling | +0.0080 | 0.0040 | 0.477 |
| Speed × Cooling | +0.0003 | 0.0001 | 0.981 |
| Temp × Speed × Cooling | +0.0070 | 0.0035 | 0.530 |
| Centre points (curvature) | 0.0071 | 0.567 |
S = 0.0216, R² = 90.4%. Effects and coefficients are exact. p-values are close, because they depend on which terms are in the model.
Remove the terms that are not significant (by hand, or with backward elimination). The model keeps temperature and cooling:
Thickness = 0.0434 + 0.01006 × Die_Temp_C − 0.01075 × Cooling_s, with S 0.0185 and R² 89.2% (close).
Read it like this.
The new settings: die temperature 205 °C, cooling 10 s, speed 50 m/min. Predicted thickness 1.998 mm. Temperature to be controlled, not just set: June's problem was that it wandered.
Why this step. Data you collect by watching (Stops 7 and 8) shows association. Data from an experiment shows cause, because you set the X and nothing else could have moved it. Tollgate reviewers ask "how do you know?", and this stop answers them.
What if your data isn't like this.
Show the math. Effect of temperature = average at 210 °C − average at 200 °C = 2.04689 − 1.94630 = 0.10059 mm over 10 °C. Coefficient = effect ÷ 2 = 0.0503, because coded units run from −1 to +1, a distance of 2.
The trap. Running the experiment in standard order (all low temperatures first, then all high). If the machine warms up during the day, the warm-up looks like a temperature effect. Randomising the run order is what makes a designed experiment trustworthy.
August ran at the new settings with the temperature controller retuned.
Do this. Load DP6_improve_pilot_august.csv. Capability Guide, same
entries as Stop 4, group column Subgroup, pooled standard deviation.
You should see
| Before (June) | After (August) | |
|---|---|---|
| Mean | 2.0543 | 2.0091 |
| Overall SD | 0.0516 | 0.0339 |
| Pooled within σ | 0.0334 | 0.0333 |
| Cp | 1.50 | 1.50 |
| Cpk | 0.96 (0.81 to 1.10) | 1.41 (1.22 to 1.60) |
| Ppk | 0.62 | 1.38 |
| Expected out of spec | ≈ 31,900 ppm | ≈ 18 ppm |
| Control chart | 5 points out | 0 out |
(exact, except the ppm, which is close)
Read it like this.
Do this. Load DP7_control_before_after.csv. Control Chart Guide,
column Seal_Thickness_mm, group Subgroup, and use Phase as the
stage column.
You should see two sets of limits, one per phase:
| Phase | X̄ centre | X̄ limits | R̄ | Points out |
|---|---|---|---|---|
| 1 Before | 2.05426 | 2.00916 to 2.09936 | 0.07816 | 5 |
| 2 After | 2.00914 | 1.96467 to 2.05362 | 0.07708 | 0 |
(exact). The guide's stage test should report that the stages differ.
For numbers to go with the picture, use the Which test? Guide: two
independent groups, More than 40, Y = Seal_Thickness_mm, group = Phase.
You should see the difference Before − After = +0.0451 mm (95% CI 0.0345
to 0.0557, Welch p < 0.001) and the spread falling 0.0516 → 0.0339,
Brown-Forsythe p < 0.001 (close).
A note on rigour. Before-phase readings share a day's temperature (the independence point from Stop 5), so these p-values are smaller than they should be. The conclusion doesn't depend on them: the staged chart shows the change plainly. The staged chart is the evidence. The p-values are the footnote.
Why this step. A staged chart is the picture a sponsor understands in five seconds: the old process, the change, the new process, each with its own limits. It is also what the next person looks at when someone asks "did that project last?"
Do this.
DP6_improve_pilot_august.csv again. Control Chart Guide → X̄-R →
verdict STABLE (0 points out, longest run 5 against a rule of 9).Seal_Thickness_mm carries three chips:
gauge, capability and chart.| Field | Type this |
|---|---|
| Who checks it | Line operator |
| How often | Every 2 hours |
| What they take each time | 5 consecutive seals, measured with the studied gauge |
| Where it is recorded | The X̄-R chart at the line |
| Who answers when it signals | Shift lead |
The row should now read COMPLETE: charted, capable, measured with a studied gauge, and filled in. 5. On Step 3, type the reaction plan below into the table and press Save this reaction plan, then paste the recommendations further down into the Recommendations box and press Save recommendations. 6. Download the handover pack. It should open with HANDOVER READY on the cover and carry the gauge bar, the histogram and the X̄ and R charts.
A reaction plan that works on the shop floor
| When you see | Do this | Who |
|---|---|---|
| X̄ above the upper limit | Check the die temperature reading. Above 207 °C: reset to 205 °C, hold the last hour's seals, measure 5 of them. | Line operator |
| X̄ below the lower limit | Check cooling time is 10 s. Check the die temperature is not below 203 °C. | Line operator |
| R above its limit | Stop. Check the gauge against the reference block before touching the process. | Shift lead |
| 9 in a row on one side | Not urgent. Log it and tell the process engineer the same day. | Shift lead |
Why this step. Improvements fade because the reason for the new settings leaves with the belt. A control plan written in "when you see, do this" form stays with the line.
Recommendations (this is the text box on the final report):
- Collect about 400 readings at the new settings to confirm Cpk ≥ 1.33. The current interval (1.22 to 1.60) cannot yet settle it.
- Trial a die temperature set point of 204 °C. The pilot runs 0.011 mm above target, and the slope is 0.010 mm per °C.
- Keep the line at 50 m/min. Speed has no effect on thickness, so the extra throughput is free.
- Next project: surface flash, 18.6% of rejects and the second Pareto bar.
| Phase | Question | Answer | Evidence |
|---|---|---|---|
| Define | What's going wrong? | Seals too thick, 55% of rejects | Pareto, Stop 1 |
| Measure | Can we trust the gauge? | Yes: %GRR 5.5%, ndc 25 | Stop 2 |
| Measure | Is it stable? What can it hold? | No, 5 points out. Ppk 0.62, Cp 1.50 | Stops 3–4 |
| Analyze | Night shift? | No evidence (p = 0.44) | Stop 6 |
| Analyze | Line speed? | No (R² 0.5%) | Stop 7 |
| Analyze | Die temperature? | Yes: 0.010 mm per °C, R² 87% | Stop 8 |
| Improve | Proven? Best settings? | Yes, by experiment: 205 °C, 10 s, 50 m/min | Stop 9 |
| Improve | Did it work? | Ppk 0.62 → 1.38. Rejects about 3.2% → 18 ppm | Stop 10 |
| Control | Will it last? | Stable, limits saved, reaction plan written | Stops 11–12 |
What the project taught, in five lines
Cover the answers and try these. Each one is a decision a belt makes on a real project.
Answers
Work backwards.
Every number here was computed independently of the app, from these same files, with the published formulas. The data were generated once, with a fixed seed, and are plain CSV files, so nothing on your side is random.
© 2025–2026 Dr. Mahmood Al Kindi