M01 · Wave 1 · Foundations · Reader

Question to measurable claim

Frame a competitiveness claim, calculate its peer-median productivity gap, and decide what the data can support.

Outcome
Turn ‘Germany is losing competitiveness’ into a testable metric tree, reproduce its peer-median productivity estimate, and bound the conclusion.
Sources
DS001 · DS003 · DS004 · DS011
Visual
Metric tree + annual gap chart + provider cross-check
Deliverable
Article + notebook
Version
1.1.0 · reviewed 2026-08-09
01

The question

“Germany is losing competitiveness” sounds decisive. Analytically, it is incomplete. It does not identify an outcome, an economic unit, a comparison group, a period, or the quantity we want to estimate.

For this lesson, the broad claim becomes a bounded historical question:

From 2000–2019, did Germany’s manufacturing real value added per hour grow more slowly than the median of Austria, Czechia, France, Italy, the Netherlands, and Sweden; was its rebased unit-labour-cost movement less favourable from 2020 to 2021; and what additional evidence would be needed to explain the productivity gap?

This formulation is deliberately narrower than the headline. It does not establish Germany’s current 2022–2026 position. It turns an argument into a measurement plan that another analyst can inspect, reject, or reproduce.

02

The evidence

The evidence package separates four source roles instead of blending unlike statistics into one score.

  • World Development Indicators (DS001) provides whole-economy productivity, manufacturing growth, and export-intensity context.
  • OECD Data Explorer (DS003) provides internationally comparable GDP-per-hour, manufacturing productivity growth, and manufacturing unit-labour-cost series.
  • Eurostat (DS004) provides a second, European national-accounts view of manufacturing real value added, value added per hour, and nominal unit labour costs.
  • EU KLEMS & INTANProd (DS011) defines the growth-accounting extension for TFP and intangible-capital contributions. Its public download and citation are verified, but numeric redistribution permission and the advertised release vintage are not. No EU KLEMS values are republished here pending written permission.

The common comparison window is 2000–2021. The structural reading ends in 2019; 2020–2021 is shown as a pandemic sensitivity rather than treated as an ordinary endpoint.

The worked solution uses OECD manufacturing real-GVA-per-hour growth as the primary outcome, repeats the same calculation with Eurostat, and keeps the two providers separate. WDI remains context. EU KLEMS remains a named but blocked mechanism branch.

03

The visual argument

The metric tree keeps four branches separate before any calculation begins:

  1. Outcome: manufacturing real value added per hour.
  2. Cost position: manufacturing unit labour cost, indexed to 2020.
  3. External exposure: exports as a share of GDP and manufacturing real growth.
  4. Mechanism: TFP and intangible-capital contributions, retrieval-only until EU KLEMS reuse rights are resolved.

The tree defines the analysis. Every leaf names its provider, unit, denominator, period, and limitation. No leaf is averaged into a synthetic “competitiveness score.” The annual chart below the method then shows what happens when one branch is actually calculated.

Competitiveness is a metric tree, not a score

Germany · 2000-2021

The reviewed evidence separates productivity, cost position, external context, and a blocked mechanism branch. It can frame a historical diagnosis; it does not establish current competitiveness.

Broad claimGermany is losing competitiveness
OutcomeManufacturing real value added per hour
Cost positionManufacturing unit labour cost, 2020=100
External contextExports relative to GDP and manufacturing growth
MechanismEU KLEMS TFP and intangible contributions: retrieval-only

GDP per person employed

DS001

Manufacturing GVA per hour growth

DS003

Manufacturing nominal unit labour cost

DS004
Germany representative observations, accessible alternative
DatasetSeriesYearValueUnit / denominator
DS001GDP per person employed2000110,916constant 2021 PPP international dollars / total employment
DS001GDP per person employed2021124,873constant 2021 PPP international dollars / total employment
DS003Manufacturing GVA per hour growth20007.39percent per year / manufacturing hours worked
DS003Manufacturing GVA per hour growth20217.35percent per year / manufacturing hours worked
DS004Manufacturing nominal unit labour cost200087.98index 2020=100 / real GVA per hour in compensation-per-hour ratio
DS004Manufacturing nominal unit labour cost202193.44index 2020=100 / real GVA per hour in compensation-per-hour ratio
04

The method

Begin with the decision, not the dataset. Then make every design choice executable.

  1. State who could act differently after seeing the result.
  2. Select one primary outcome and distinguish contextual indicators from mechanisms.
  3. Fix the unit of observation: country-year for whole-economy context or country-industry-year for manufacturing evidence.
  4. Choose benchmarks before examining the ranking.
  5. Define the estimand. Here it is the mean of 20 annual gaps: Germany’s manufacturing productivity growth minus the median growth of the six declared peers in each year from 2000 through 2019.
  6. Record units and denominators. GDP per worker, GDP per hour, a growth rate, an index, and an export share are not interchangeable.
  7. Preserve provider vintages and flags. Similar-looking OECD and Eurostat series remain separate observations.
  8. Compound Germany’s annual rates and the annual peer-median path separately. Do not compound an average rate or treat the constructed peer path as one country.
  9. Report 2020–2021 as sensitivity, repeat the calculation with Eurostat, and state what the result does not establish.

For year t, the calculation is gap_t = Germany_growth_t - median(peer_growth_t). The structural estimand is the arithmetic mean of gap_t for 2000–2019. The worked solution below executes this exact sequence on the published panel and exposes every annual input.

The primary OECD result is 2.35% per year for Germany versus 2.65% for the annual peer-median path, an average gap of −0.29 percentage points per year. A separate Eurostat provider cross-check gives 2.35%, 2.64%, and the same rounded −0.29-point gap. Compounding the annual OECD rates gives 54.6% for Germany and 66.8% for the constructed peer-median path.

Worked solution / 1,386 rows to one bounded answer

Solve the claim with the data

The metric tree chooses the estimand. This calculation now executes it without mixing providers, hiding the comparison group, or treating pandemic years as ordinary data.

  1. 01

    Choose one outcome series

    Use OECD manufacturing real GVA per hour growth (DS003) as the primary outcome. Keep Eurostat for a separate robustness check.

  2. 02

    Freeze the comparison

    Keep Germany as the focus and AT, CZ, FR, IT, NL, and SE as the six peers declared before inspecting results.

  3. 03

    Build one peer median per year

    For each year, take the median of the six peer growth rates. Do not pool all country-years or average provider series.

  4. 04

    Calculate the annual gap

    Subtract the peer median from Germany. Average those 20 annual gaps over 2000–2019 and compound each annual path separately.

  5. 05

    Stress-test the answer

    Report 2020–2021 outside the structural estimate, repeat the method with Eurostat, and inspect ULC movement without claiming absolute cost levels.

annual_gapt = Germany_growtht − median(peer_growtht)Structural estimand = mean of annual gaps for 2000–2019

Germany mean2.35%annual real GVA/hour growth
Peer-median mean2.65%six-country annual median
Estimand−0.29 ppGermany minus peer median
Germany compounded54.6%2000–2019 annual rates
Peer path compounded66.8%annual peer-median rates

Germany versus the declared peer median

OECD manufacturing real GVA per hour growth, percent per year

Germany Peer median
-15-10-505101520200020052010201520192021sensitivity

Germany trails the peer median on average before 2020, falls further behind in 2020, and rebounds more strongly in 2021. Pandemic disruption motivated the pre-declared sensitivity window; the opposing signs show why pooling those years would distort the structural reading.

Robustness check

A provider cross-check reaches the same rounded answer

The same estimand is calculated separately from each provider. The values are never averaged into a synthetic score.

Provider-specific structural estimates, 2000–2019
ProviderGermany meanPeer meanAnnual gapCompounded paths
OECD Productivity database2.35%2.65%−0.29 pp54.6% vs 66.8%
Eurostat labour productivity2.35%2.64%−0.29 pp54.4% vs 66.7%
Run the same calculation in DuckDB

Place the permitted CSV beside this query and run the statement unchanged. The expected row is 2.35, 2.65, -0.29, 54.6, 66.8 after rounding.

Download permitted CSV
WITH selected AS (
  SELECT year, geo, value
  FROM read_csv_auto('competitiveness-panel.csv')
  WHERE datasetId = 'DS003'
    AND seriesKey = 'GVAHRS.C.XDC_H.LR.GY._Z._Z'
    AND year BETWEEN 2000 AND 2019
),
annual_comparison AS (
  SELECT
    year,
    max(value) FILTER (WHERE geo = 'DE') AS germany_growth,
    median(value) FILTER (
      WHERE geo IN ('AT', 'CZ', 'FR', 'IT', 'NL', 'SE')
    ) AS peer_median_growth
  FROM selected
  GROUP BY year
)
SELECT
  round(avg(germany_growth), 2) AS germany_average,
  round(avg(peer_median_growth), 2) AS peer_median_average,
  round(avg(germany_growth - peer_median_growth), 2) AS annual_gap_pp,
  round(
    (exp(sum(ln(1 + germany_growth / 100))) - 1) * 100,
    1
  ) AS germany_compounded_growth,
  round(
    (exp(sum(ln(1 + peer_median_growth / 100))) - 1) * 100,
    1
  ) AS peer_path_compounded_growth
FROM annual_comparison;

Sensitivity

Keep 2020–2021 visible, but separate

Annual productivity-growth sensitivity
ProviderYearGermanyPeer medianGap
OECD2020-2.01%-0.52%−1.49 pp
OECD20217.35%4.65%+2.70 pp
EUROSTAT2020-2.00%-0.55%−1.45 pp
EUROSTAT20217.30%4.65%+2.65 pp

Movement check

The 2020–2021 ULC movement does not confirm the claim

Unit labour cost indexes, 2020=100
ProviderGermany 2021Peer medianGap
OECD95.3196.49−1.17 index points
EUROSTAT93.4497.07−3.63 index points

Both gaps are negative. That is not a less-favourable 2021 movement. Because every country is rebased to its own 2020 value, these indexes do not compare absolute labour cost levels across countries.

Inspect the 22 annual OECD comparisons used above
Germany, peer median, and annual gap
YearWindowGermanyPeer medianGap
2000Structural7.39%6.64%+0.75 pp
2001Structural2.01%2.69%−0.68 pp
2002Structural-0.53%2.79%−3.32 pp
2003Structural3.62%3.23%+0.39 pp
2004Structural4.22%5.39%−1.17 pp
2005Structural4.37%5.00%−0.63 pp
2006Structural8.79%6.64%+2.15 pp
2007Structural2.89%3.90%−1.02 pp
2008Structural-4.09%-1.11%−2.98 pp
2009Structural-12.35%-6.55%−5.81 pp
2010Structural17.35%9.61%+7.73 pp
2011Structural5.34%4.55%+0.79 pp
2012Structural-1.55%0.36%−1.92 pp
2013Structural-0.54%0.30%−0.84 pp
2014Structural3.87%1.86%+2.01 pp
2015Structural0.06%2.09%−2.03 pp
2016Structural4.05%1.38%+2.67 pp
2017Structural3.15%3.10%+0.05 pp
2018Structural0.10%1.39%−1.29 pp
2019Structural-1.03%-0.33%−0.69 pp
2020Sensitivity-2.01%-0.52%−1.49 pp
2021Sensitivity7.35%4.65%+2.70 pp
05

The notebook

First reproduce the worked result; then use the workbench to change the design.

  1. Download the permitted M01 CSV.
  2. Run the DuckDB query shown in the worked solution without changing it.
  3. Confirm the rounded output 2.35, 2.65, -0.29, 54.6, 66.8 and inspect all 22 annual comparisons.
  4. Check that Eurostat independently produces the same rounded annual gap.
  5. Only then change one choice in the workbench: the outcome, benchmark, estimand, metric, or caveat.
  6. Explain why your changed result answers a different question.

The workbench validates structure, not ideology. It does not replace the calculation above. Multiple trees can pass when their choices are explicit and coherent, but each one must eventually be executed against data. A printable blank tree, full worked solution, annual table, and expected output remain available when scripts or local storage are unavailable.

Metric-tree workbench

Answers stay in memory · checkpoints stay on device

The worked solution used one defensible design. Change at least one analytical choice, then explain why your tree answers a different question. The check validates explicit structure, not one approved interpretation.

Metrics, sources, units, and denominators
At least one limitation
0/360
0 of 8 checkpoints completeCheck the tree when every choice is explicit.

Optional PWT denominator and convergence extension

The existing Data Lab can test a separate PWT-based per-worker or per-hour convergence question. It does not reproduce M01’s World Bank, OECD, Eurostat, or EU KLEMS evidence and must not be used as its receipt.

Open the PWT Data Lab extension

Printable metric-tree fallback

Works without scripting

Complete the same analytical decisions on paper. The worked result is one valid tree, not the only valid answer.

Printable blank metric tree

Decision and claimWrite the choice, source, unit, denominator, and limitation.
Outcome and unitWrite the choice, source, unit, denominator, and limitation.
Comparison and estimandWrite the choice, source, unit, denominator, and limitation.
Metrics and caveatWrite the choice, source, unit, denominator, and limitation.

Worked Germany example

Decision
Whether a historical manufacturing productivity gap warrants deeper diagnosis.
Outcome
Manufacturing real GVA per hour growth.
Unit
Country-industry-year.
Comparison
Germany against the declared six-country peer median.
Estimand
Germany minus peer-median average annual growth over 2000-2019.

Expected structural checks

  • The claim names a decision, outcome, economic unit, comparison, and period.
  • Every metric retains its dataset, unit, denominator, and vintage.
  • Context indicators and mechanism evidence are not averaged into one score.
  • The implication states what to investigate or decide without claiming causality.
M01 source roles and publication boundary
IDProviderRoleRights state
DS001World BankGDP per person employed; Manufacturing value added growth; Exports of goods and servicesredistribution permitted with attribution
DS003OECDGDP per hour; Manufacturing GVA per hour growth; Manufacturing unit labour costredistribution permitted with attribution
DS004EurostatManufacturing real GVA growth; Manufacturing real GVA per hour growth; Manufacturing nominal unit labour costredistribution permitted with attribution
DS011LUISS / EU KLEMS consortiumManufacturing value added per hour growth; TFP contribution; Non-NA intangible capital contributionblocked pending written permission

Limitations

  • EU KLEMS numeric redistribution permission is not verifiable from published provider terms.
  • EU KLEMS portal and linked workbook disagree on 2025 versus 2024 release vintage.
  • The common four-source panel ends in 2021 and cannot establish present-tense 2022–2026 competitiveness.
06

The executive interpretation

A leader should not ask for “the competitiveness number.” They should ask which outcome is deteriorating, relative to whom, over what period, and through which mechanism.

The worked evidence supports a modest historical manufacturing-productivity gap: about 0.29 percentage points per year against the declared peer median in 2000–2019. It does not support the narrower claim that Germany’s 2020–2021 unit-labour-cost movement was less favourable; both rebased provider indexes sit below the peer median in 2021. It also does not establish the mechanism or Germany’s current 2022–2026 position.

What should an executive do differently after seeing this? Treat the historical productivity gap as a reason to commission a current, mechanism-level diagnosis—not as permission to assert that present competitiveness or labour-cost pressure has already been proved.

07

How this can mislead

  • The complete four-source window ends in 2021 and cannot establish the present-tense 2022–2026 claim.
  • World Bank productivity is whole-economy evidence, while OECD, Eurostat, and EU KLEMS manufacturing measures use different classifications and construction methods.
  • GDP per worker, GDP per hour, growth rates, and 2020-based indices answer different questions.
  • The peer benchmark is a new median in each year. Its compounded path is a transparent constructed benchmark, not the experience of one country.
  • Higher unit labour costs may reflect wage convergence, labour hoarding, shorter hours, quality upgrading, or temporary utilisation rather than structural decline.
  • A 2020=100 ULC index compares movement from each country’s own base. It does not compare absolute labour-cost levels across countries.
  • Exports as a share of GDP measure openness and domestic-demand composition, not export market share or domestic value added in exports.
  • TFP is a residual that also absorbs utilisation, reallocation, assumptions, and measurement error.
  • Pandemic disruption, the post-2021 energy shock, automotive transition, China exposure, demographics, exchange rates, offshoring, and sectoral reallocation remain rival explanations.

Evidence receipt

m01-competitiveness-v2
Source and vintage
  • DS001: World Bank · WDI API source 2, last updated 2026-07-13 · redistribution-permitted-with-attribution Canonical source
  • DS003: OECD · Dataflow validFrom 2026-06-23T15:35:46.08Z; registry flags retained · redistribution-permitted-with-attribution Canonical source
  • DS004: Eurostat · nama_10_a64 updated 2026-07-08; nama_10_lp_a21 updated 2026-07-30 · redistribution-permitted-with-attribution Canonical source
  • DS011: LUISS / EU KLEMS consortium · Blocked: portal says Release 2025 while linked workbook identifies 2024 release / Eurostat extraction 2024-04-08 · blocked-pending-written-permission Canonical source
Query or filter

DS001 https://api.worldbank.org/v2/country/DEU;AUT;CZE;FRA;ITA;NLD;SWE/indicator/SL.GDP.PCAP.EM.KD;NV.IND.MANF.KD.ZG;NE.EXP.GNFS.ZS?source=2&date=2000:2021&format=json&per_page=20000&footnote=y

DS003 https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_PDB@DF_PDB/DEU+AUT+CZE+FRA+ITA+NLD+SWE.A.GDPHRS._T.USD_PPP_H.LR.N._Z.PPP?startPeriod=2000&endPeriod=2021&dimensionAtObservation=AllDimensions&format=csvfilewithlabels | https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_PDB@DF_PDB/DEU+AUT+CZE+FRA+ITA+NLD+SWE.A.GVAHRS.C.XDC_H.LR.GY._Z._Z?startPeriod=2000&endPeriod=2021&dimensionAtObservation=AllDimensions&format=csvfilewithlabels | https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_PDB@DF_PDB/DEU+AUT+CZE+FRA+ITA+NLD+SWE.A.ULCH.C.IX.V.N._Z._Z?startPeriod=2000&endPeriod=2021&dimensionAtObservation=AllDimensions&format=csvfilewithlabels

DS004 https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/nama_10_a64?lang=en&freq=A&unit=CLV_PCH_PRE&nace_r2=C&na_item=B1G&geo=DE&geo=AT&geo=CZ&geo=FR&geo=IT&geo=NL&geo=SE&sinceTimePeriod=2000&untilTimePeriod=2021 | https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/nama_10_lp_a21?lang=en&freq=A&unit=PCH_PRE&nace_r2=C&na_item=RLPR_HW&geo=DE&geo=AT&geo=CZ&geo=FR&geo=IT&geo=NL&geo=SE&sinceTimePeriod=2000&untilTimePeriod=2021 | https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/nama_10_lp_a21?lang=en&freq=A&unit=I20&nace_r2=C&na_item=NULC_HW&geo=DE&geo=AT&geo=CZ&geo=FR&geo=IT&geo=NL&geo=SE&sinceTimePeriod=2000&untilTimePeriod=2021

DS011 {"geo_code":["DE","AT","CZ","FR","IT","NL","SE"],"nace_r2_code":"C","year":[2000,2021],"var":["LP1_G","LP1ConTFP","LP1ConIntangnonNA"]}

Rights boundary
  • DS001: redistribution-permitted-with-attribution · CC BY 4.0
  • DS003: redistribution-permitted-with-attribution · OECD Terms and Conditions
  • DS004: redistribution-permitted-with-attribution · European Commission reuse policy / CC BY 4.0 default
  • DS011: blocked-pending-written-permission
Transformations
  1. Keep each provider series separate; do not average into a composite score.
  2. Filter to DE, AT, CZ, FR, IT, NL and SE for 2000–2021.
  3. Map provider geography codes to ISO-2 display codes while retaining dataset and series keys.
  4. Preserve source-specific units, denominators, vintages and observation flags.
  5. Sort rows deterministically by datasetId, seriesKey, geography and year.
  6. For each OECD and Eurostat manufacturing-productivity series, calculate Germany minus the median of AT, CZ, FR, IT, NL and SE by year; average the 2000–2019 annual gaps and compound the two annual paths separately.
  7. Keep 2020–2021 outside the structural estimate and report both years as pandemic sensitivity.
  8. Use 2020=100 unit-labour-cost indexes only to compare provider-specific movement; do not interpret them as cross-country absolute cost levels.
  9. Exclude all EU KLEMS numeric values until written redistribution permission and vintage conflict are resolved.
Expected output
1,386 rows · 9 series · 7 countries · 2000-2021. Public artifacts: competitiveness-panel.json (cbdb6fc9c9d303d0e1d9590e6ec8f77f193d11489b93cd6e4a926825acbb0306); competitiveness-panel.csv (10a71501a0e2f95399a8359aae2a7d87339111631dec47f91a3a298a935b14a8)

Worked structural result

  • DS003: Germany 2.35%, peer median 2.65%, annual gap -0.29 percentage points.
  • DS004: Germany 2.35%, peer median 2.64%, annual gap -0.29 percentage points.
Limitations
  • The complete four-source design ends in 2021 and cannot establish current 2022–2026 competitiveness.
  • WDI whole-economy indicators and OECD/Eurostat manufacturing indicators use different economic scopes.
  • GDP per worker, GDP per hour, growth rates, indices and export shares are not interchangeable.
  • Unit labour cost movements can reflect wages, hours, quality, labour hoarding or utilisation.
  • EU KLEMS mechanism values are omitted pending permission and vintage resolution.
08

Extension challenge

Change exactly one design choice and explain how the interpretation changes.

  • Replace the peer median with an employment-weighted manufacturing benchmark.
  • End the structural window in 2018 instead of 2019.
  • Replace value added per hour with value added per worker and defend the denominator.
  • Replace the annual peer median with the median of country-specific 2000–2019 average growth rates and explain why the estimand changes.
  • Add Poland to the first three sources while documenting why it cannot enter the selected EU KLEMS extension.
  • Design a separately sourced 2022–2026 extension without splicing it into the historical series.

Your extension is complete when the revised metric tree still names its decision, outcome, unit, comparison, estimand, sources, denominators, caveat, and executive implication.