this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Shorten one-pager, fix reference rates, update Servo grant link

- Remove Progress and Trajectory section from one-pager
- Move Impact of Usage Prioritization table into its place
- Fix NLnet rate to verified 65/hr (was 60), link to nlnet.nl/core/faq
- STF: keep verified TVoD-Bund employment range, drop unverifiable hourly rate
- Update Servo grant link to github.com/servo/project
- Regenerate PDF

+22 -58
+2 -2
dashboard.html
··· 413 413 <p style="margin-bottom:8px;font-size:12px;">Reference rates used to calibrate this figure:</p> 414 414 <table style="width:auto;font-size:11px;margin-bottom:12px;"> 415 415 <tr><th style="text-align:left;">Source</th><th style="text-align:right;">Annual Equivalent</th><th>Notes</th></tr> 416 - <tr><td><a href="https://nlnet.nl/funding.html" target="_blank" style="color:rgb(71,11,0);">NLnet</a> grants (&euro;60/hr)</td><td style="text-align:right;">&euro;108k</td><td style="color:#999;">Below-market philanthropy rate</td></tr> 416 + <tr><td><a href="https://nlnet.nl/core/faq/" target="_blank" style="color:rgb(71,11,0);">NLnet</a> grants (up to &euro;65/hr)</td><td style="text-align:right;">&euro;117k</td><td style="color:#999;">Below-market cost-recovery rate</td></tr> 417 417 <tr><td><a href="https://www.sovereign.tech/programs/fellowship" target="_blank" style="color:rgb(71,11,0);">Sovereign Tech Fund</a> (employment + social)</td><td style="text-align:right;">&euro;79&ndash;101k</td><td style="color:#999;">German public-sector TVöD scale</td></tr> 418 418 <tr><td>European senior SWE median (total cost)</td><td style="text-align:right;">&euro;100&ndash;140k</td><td style="color:#999;">Varies by country; incl. employer costs</td></tr> 419 419 <tr><td>Mozilla Germany senior SWE (<a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany" target="_blank" style="color:rgb(71,11,0);">Levels.fyi</a>)</td><td style="text-align:right;">&euro;145&ndash;164k</td><td style="color:#999;">Top-tier browser-engine employer</td></tr> 420 420 <tr style="background:rgba(71,11,0,0.05);font-weight:600;"><td>Model default (&euro;150k &times; 1.33)</td><td style="text-align:right;">&euro;200k</td><td style="color:#999;">Specialized + multi-disciplinary premium</td></tr> 421 - <tr><td><a href="https://github.com/servo/project/issues/181" target="_blank" style="color:rgb(71,11,0);">Servo grant</a> ($150/hr &times; 1800)</td><td style="text-align:right;">&euro;248k</td><td style="color:#999;">US contractor rate with overhead</td></tr> 421 + <tr><td><a href="https://github.com/servo/project" target="_blank" style="color:rgb(71,11,0);">Servo grant</a> ($150/hr &times; 1800)</td><td style="text-align:right;">&euro;248k</td><td style="color:#999;">US contractor rate with overhead</td></tr> 422 422 </table> 423 423 424 424 <h3 style="margin-top:20px;">Limitations</h3>
+9 -36
data/build-one-pager.mjs
··· 224 224 </div> 225 225 </div> 226 226 227 - <table style="width:100%;border-collapse:collapse;font-size:11px;margin-bottom:12px;background:#fff;border-radius:6px;overflow:hidden;border:1px solid rgba(71,11,0,0.15);"> 228 - <tr style="background:rgba(71,11,0,0.05);"><th style="padding:5px 8px;text-align:left;border-bottom:1px solid rgba(71,11,0,0.2);color:rgb(71,11,0);">Impact of Usage Prioritization</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Full BWA</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Drop &lt;1%</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Drop &lt;5%</th></tr> 229 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Target features</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">${totalBWA}</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">${target_drop1} (<span class="pass">&minus;${drop1_count}</span>)</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">${target_drop5} (<span class="pass">&minus;${drop5_count}</span>)</td></tr> 230 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">BWA growth rate</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~${bwaGrowthPerYear}/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~49/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~47/yr</td></tr> 231 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Parity FTE</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;">~${parityFTE}</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;color:#1f6e1f;">~${parityFTE_49}</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;color:#1f6e1f;">~${parityFTE_47}</td></tr> 232 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Cost/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${parityCostPerYear}M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${costPerYear_49}M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${costPerYear_47}M</td></tr> 233 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">3yr total</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${parityCost3yr}M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${cost3yr_49}M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;${cost3yr_47}M</td></tr> 234 - <tr style="background:rgba(42,125,42,0.06);"><td style="padding:4px 8px;font-weight:700;color:#1f6e1f;">3yr savings</td><td style="padding:4px 8px;text-align:right;color:#686868;">&mdash;</td><td style="padding:4px 8px;text-align:right;font-weight:700;color:#1f6e1f;">&euro;${savings_49}M</td><td style="padding:4px 8px;text-align:right;font-weight:700;color:#1f6e1f;">&euro;${savings_47}M</td></tr> 235 - </table> 236 - 237 227 <div class="two-col"> 238 228 239 229 <div class="section"> ··· 279 269 <div class="two-col"> 280 270 281 271 <div class="section"> 282 - <h2>Progress &amp; Trajectory</h2> 272 + <h2>Impact of Usage Prioritization</h2> 283 273 <table> 284 - <tr><th>Period</th><th>WPT Score</th><th>FTE-eq</th><th>Completions/yr</th></tr> 285 - ${trajectorySnapshots.map((ts, i) => { 286 - const snap = snapshots[ts.idx]; 287 - const wptScore = computeGlobalWptScore(snap); 288 - const fte = fteByPeriod[i]; 289 - // Compute completions per year for this period 290 - let periodCompletions; 291 - if (ts.idx === 0) { 292 - periodCompletions = Math.round(servoCompletionsPerYear * Math.pow(fte / currentContributors, SCALING_EXP)); 293 - } else { 294 - // Count features crossing 95% between first snapshot and this one 295 - const prevSnap = snapshots[0]; 296 - let crossings = 0; 297 - for (const name of widelyAvailable) { 298 - const p = prevSnap.scores[name]; 299 - const c = snap.scores[name]; 300 - if (p !== undefined && c !== undefined && p < 0.95 && c >= 0.95) crossings++; 301 - } 302 - const yearsElapsed = (ts.idx + 1) * 0.5; // approximate 303 - periodCompletions = Math.round(crossings / yearsElapsed) || Math.round(servoCompletionsPerYear * Math.pow(fte / currentContributors, SCALING_EXP)); 304 - } 305 - return ` <tr><td>${ts.label}</td><td>${wptScore}%</td><td>~${fte}</td><td>~${periodCompletions}</td></tr>`; 306 - }).join('\n')} 274 + <tr style="background:rgba(71,11,0,0.05);"><th style="text-align:left;"></th><th style="text-align:right;">Full BWA</th><th style="text-align:right;">Drop &lt;1%</th><th style="text-align:right;">Drop &lt;5%</th></tr> 275 + <tr><td>Target features</td><td style="text-align:right;">${totalBWA}</td><td style="text-align:right;">${target_drop1} (<span class="pass">&minus;${drop1_count}</span>)</td><td style="text-align:right;">${target_drop5} (<span class="pass">&minus;${drop5_count}</span>)</td></tr> 276 + <tr><td>BWA growth rate</td><td style="text-align:right;">~${bwaGrowthPerYear}/yr</td><td style="text-align:right;">~49/yr</td><td style="text-align:right;">~47/yr</td></tr> 277 + <tr><td>Parity FTE</td><td style="text-align:right;font-weight:700;">~${parityFTE}</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">~${parityFTE_49}</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">~${parityFTE_47}</td></tr> 278 + <tr><td>Cost/yr</td><td style="text-align:right;">&euro;${parityCostPerYear}M</td><td style="text-align:right;">&euro;${costPerYear_49}M</td><td style="text-align:right;">&euro;${costPerYear_47}M</td></tr> 279 + <tr><td>3yr total</td><td style="text-align:right;">&euro;${parityCost3yr}M</td><td style="text-align:right;">&euro;${cost3yr_49}M</td><td style="text-align:right;">&euro;${cost3yr_47}M</td></tr> 280 + <tr style="background:rgba(42,125,42,0.06);"><td style="font-weight:700;color:#1f6e1f;">3yr savings</td><td style="text-align:right;color:#686868;">&mdash;</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">&euro;${savings_49}M</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">&euro;${savings_47}M</td></tr> 307 281 </table> 308 - <p style="font-size:10.5px;color:#1d1d1d;margin-top:4px;line-height:1.4;">Velocity is accelerating &mdash; WPT score doubled in 2.5 years. But Servo&rsquo;s completion rate (~${servoCompletionsPerYear}/yr) is less than half BWA&rsquo;s growth rate (~${bwaGrowthPerYear}/yr). Without investment, the gap widens.</p> 309 282 </div> 310 283 311 284 <div class="section"> ··· 336 309 337 310 <div class="section"> 338 311 <h2>Methodology</h2> 339 - <p style="font-size:10px;line-height:1.45;color:#666;">Readiness measured against Baseline &ldquo;Widely Available&rdquo; (BWA) web features &mdash; supported 30+ months across all major browsers. Feature scores from Web Platform Tests (WPT) via WPT Feature Manifest mapping. ${measurableCount} of ${totalBWA} BWA features are measurable; ${noDataCount} lack WPT mapping (${(noDataByReason['js-builtin'] || []).length} JS built-ins tested by test262 not WPT, ${(noDataByReason['semantic-html'] || []).length} semantic HTML elements, ${noDataCount - (noDataByReason['js-builtin'] || []).length - (noDataByReason['semantic-html'] || []).length} other with unknown status). FTE-equivalent from per-author commit frequency (1 FTE &asymp; 22 commits/month, capped at 1.0 per person; 115 authors sum to ~${currentContributors} FTE). BWA growth rate of ~${bwaGrowthPerYear}/year is the 2023&ndash;2025 average, normalized to exclude the 2022 interop spike. Known pipeline: ${projectedBWA.filter(p => p.year <= 2028).reduce((s, p) => s + p.added, 0)} features graduating by 2028. Velocity parity = Servo&rsquo;s annual feature completion rate &ge; BWA annual growth rate. Completions/yr = ${servoCompletionsPerYear} &times; (FTE/${currentContributors})<sup>${SCALING_EXP}</sup> (sublinear <a href="https://en.wikipedia.org/wiki/Brooks%27s_law">Brooks&rsquo;s Law</a> scaling). Stalled = zero or negative velocity over the full observation period (2023-Q3 to 2026-Q1). Regressions = features that lost &gt;5 percentage points. Cost at &euro;${(SALARY/1000).toFixed(0)}k/yr per FTE: &euro;${(BASE_SALARY/1000).toFixed(0)}k European senior SWE median total cost &times; ${SPECIALIZATION_MULTIPLIER}&times; premium for browser-engine specialization (small talent pool, Rust/rendering/layout) and multi-disciplinary practice (software development + W3C/WHATWG standards participation + open-source community management). Calibrated against <a href="https://nlnet.nl/funding.html">NLnet</a> (&euro;108k), <a href="https://www.sovereign.tech/programs/fellowship">Sovereign Tech Fund</a> (&euro;79&ndash;101k), <a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany">Mozilla Germany</a> (&euro;145&ndash;164k), and <a href="https://github.com/servo/project/issues/181">Servo grant rates</a> (&euro;248k US contractor). Excludes other opex, infrastructure, management overhead, and inflation. Usage-prioritized scenarios: at &lt;1% threshold, ${drop1_count} features deprioritized (target ${target_drop1}, growth ~49/yr); at &lt;5%, ${drop5_count} features deprioritized (target ${target_drop5}, growth ~47/yr). Data: wpt.fyi, web-features, Servo git history. Full interactive dashboard: dashboard.html.</p> 312 + <p style="font-size:10px;line-height:1.45;color:#666;">Readiness measured against Baseline &ldquo;Widely Available&rdquo; (BWA) web features &mdash; supported 30+ months across all major browsers. Feature scores from Web Platform Tests (WPT) via WPT Feature Manifest mapping. ${measurableCount} of ${totalBWA} BWA features are measurable; ${noDataCount} lack WPT mapping (${(noDataByReason['js-builtin'] || []).length} JS built-ins tested by test262 not WPT, ${(noDataByReason['semantic-html'] || []).length} semantic HTML elements, ${noDataCount - (noDataByReason['js-builtin'] || []).length - (noDataByReason['semantic-html'] || []).length} other with unknown status). FTE-equivalent from per-author commit frequency (1 FTE &asymp; 22 commits/month, capped at 1.0 per person; 115 authors sum to ~${currentContributors} FTE). BWA growth rate of ~${bwaGrowthPerYear}/year is the 2023&ndash;2025 average, normalized to exclude the 2022 interop spike. Known pipeline: ${projectedBWA.filter(p => p.year <= 2028).reduce((s, p) => s + p.added, 0)} features graduating by 2028. Velocity parity = Servo&rsquo;s annual feature completion rate &ge; BWA annual growth rate. Completions/yr = ${servoCompletionsPerYear} &times; (FTE/${currentContributors})<sup>${SCALING_EXP}</sup> (sublinear <a href="https://en.wikipedia.org/wiki/Brooks%27s_law">Brooks&rsquo;s Law</a> scaling). Stalled = zero or negative velocity over the full observation period (2023-Q3 to 2026-Q1). Regressions = features that lost &gt;5 percentage points. Cost at &euro;${(SALARY/1000).toFixed(0)}k/yr per FTE: &euro;${(BASE_SALARY/1000).toFixed(0)}k European senior SWE median total cost &times; ${SPECIALIZATION_MULTIPLIER}&times; premium for browser-engine specialization (small talent pool, Rust/rendering/layout) and multi-disciplinary practice (software development + W3C/WHATWG standards participation + open-source community management). Calibrated against <a href="https://nlnet.nl/core/faq/">NLnet</a> (&euro;117k, up to &euro;65/hr), <a href="https://www.sovereign.tech/programs/fellowship">Sovereign Tech Fund</a> (&euro;79&ndash;101k, TVöD-Bund + employer costs), <a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany">Mozilla Germany</a> (&euro;145&ndash;164k), and <a href="https://github.com/servo/project">Servo grant rates</a> (&euro;248k US contractor). Excludes other opex, infrastructure, management overhead, and inflation. Usage-prioritized scenarios: at &lt;1% threshold, ${drop1_count} features deprioritized (target ${target_drop1}, growth ~49/yr); at &lt;5%, ${drop5_count} features deprioritized (target ${target_drop5}, growth ~47/yr). Data: wpt.fyi, web-features, Servo git history. Full interactive dashboard: dashboard.html.</p> 340 313 </div> 341 314 342 315 <p style="font-size:9px;line-height:1.45;color:#686868;margin-top:8px;">Thanks to the people who&rsquo;ve reviewed the methodology and approach so far. NOTE: AI was used in the making of this draft report. For suggestions for improvement or spotting of inaccuracies, contact <a href="mailto:dietrich@webtransitions.org">dietrich@webtransitions.org</a>.</p>
+2 -2
data/generate-dashboard.mjs
··· 551 551 <p style="margin-bottom:8px;font-size:12px;">Reference rates used to calibrate this figure:</p> 552 552 <table style="width:auto;font-size:11px;margin-bottom:12px;"> 553 553 <tr><th style="text-align:left;">Source</th><th style="text-align:right;">Annual Equivalent</th><th>Notes</th></tr> 554 - <tr><td><a href="https://nlnet.nl/funding.html" target="_blank" style="color:rgb(71,11,0);">NLnet</a> grants (&euro;60/hr)</td><td style="text-align:right;">&euro;108k</td><td style="color:#999;">Below-market philanthropy rate</td></tr> 554 + <tr><td><a href="https://nlnet.nl/core/faq/" target="_blank" style="color:rgb(71,11,0);">NLnet</a> grants (up to &euro;65/hr)</td><td style="text-align:right;">&euro;117k</td><td style="color:#999;">Below-market cost-recovery rate</td></tr> 555 555 <tr><td><a href="https://www.sovereign.tech/programs/fellowship" target="_blank" style="color:rgb(71,11,0);">Sovereign Tech Fund</a> (employment + social)</td><td style="text-align:right;">&euro;79&ndash;101k</td><td style="color:#999;">German public-sector TVöD scale</td></tr> 556 556 <tr><td>European senior SWE median (total cost)</td><td style="text-align:right;">&euro;100&ndash;140k</td><td style="color:#999;">Varies by country; incl. employer costs</td></tr> 557 557 <tr><td>Mozilla Germany senior SWE (<a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany" target="_blank" style="color:rgb(71,11,0);">Levels.fyi</a>)</td><td style="text-align:right;">&euro;145&ndash;164k</td><td style="color:#999;">Top-tier browser-engine employer</td></tr> 558 558 <tr style="background:rgba(71,11,0,0.05);font-weight:600;"><td>Model default (&euro;${(BASE_SALARY/1000).toFixed(0)}k &times; ${SPECIALIZATION_MULTIPLIER})</td><td style="text-align:right;">&euro;${(SALARY/1000).toFixed(0)}k</td><td style="color:#999;">Specialized + multi-disciplinary premium</td></tr> 559 - <tr><td><a href="https://github.com/servo/project/issues/181" target="_blank" style="color:rgb(71,11,0);">Servo grant</a> ($150/hr &times; 1800)</td><td style="text-align:right;">&euro;248k</td><td style="color:#999;">US contractor rate with overhead</td></tr> 559 + <tr><td><a href="https://github.com/servo/project" target="_blank" style="color:rgb(71,11,0);">Servo grant</a> ($150/hr &times; 1800)</td><td style="text-align:right;">&euro;248k</td><td style="color:#999;">US contractor rate with overhead</td></tr> 560 560 </table> 561 561 562 562 <h3 style="margin-top:20px;">Limitations</h3>
+9 -18
one-pager.html
··· 108 108 </div> 109 109 </div> 110 110 111 - <table style="width:100%;border-collapse:collapse;font-size:11px;margin-bottom:12px;background:#fff;border-radius:6px;overflow:hidden;border:1px solid rgba(71,11,0,0.15);"> 112 - <tr style="background:rgba(71,11,0,0.05);"><th style="padding:5px 8px;text-align:left;border-bottom:1px solid rgba(71,11,0,0.2);color:rgb(71,11,0);">Impact of Usage Prioritization</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Full BWA</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Drop &lt;1%</th><th style="padding:5px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.2);color:#666;">Drop &lt;5%</th></tr> 113 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Target features</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">593</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">558 (<span class="pass">&minus;35</span>)</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">537 (<span class="pass">&minus;56</span>)</td></tr> 114 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">BWA growth rate</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~52/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~49/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">~47/yr</td></tr> 115 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Parity FTE</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;">~44</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;color:#1f6e1f;">~41</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);font-weight:700;color:#1f6e1f;">~38</td></tr> 116 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">Cost/yr</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;8.8M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;8.2M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;7.6M</td></tr> 117 - <tr><td style="padding:4px 8px;border-bottom:1px solid rgba(71,11,0,0.08);">3yr total</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;26.3M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;24.5M</td><td style="padding:4px 8px;text-align:right;border-bottom:1px solid rgba(71,11,0,0.08);">&euro;22.7M</td></tr> 118 - <tr style="background:rgba(42,125,42,0.06);"><td style="padding:4px 8px;font-weight:700;color:#1f6e1f;">3yr savings</td><td style="padding:4px 8px;text-align:right;color:#686868;">&mdash;</td><td style="padding:4px 8px;text-align:right;font-weight:700;color:#1f6e1f;">&euro;1.8M</td><td style="padding:4px 8px;text-align:right;font-weight:700;color:#1f6e1f;">&euro;3.6M</td></tr> 119 - </table> 120 - 121 111 <div class="two-col"> 122 112 123 113 <div class="section"> ··· 162 152 <div class="two-col"> 163 153 164 154 <div class="section"> 165 - <h2>Progress &amp; Trajectory</h2> 155 + <h2>Impact of Usage Prioritization</h2> 166 156 <table> 167 - <tr><th>Period</th><th>WPT Score</th><th>FTE-eq</th><th>Completions/yr</th></tr> 168 - <tr><td>2023 Q3</td><td>36.7%</td><td>~5</td><td>~11</td></tr> 169 - <tr><td>2024 Q3</td><td>39.0%</td><td>~10</td><td>~11</td></tr> 170 - <tr><td>2025 Q3</td><td>42.8%</td><td>~13</td><td>~16</td></tr> 171 - <tr><td>2026 Q1</td><td>46.8%</td><td>~13</td><td>~16</td></tr> 157 + <tr style="background:rgba(71,11,0,0.05);"><th style="text-align:left;"></th><th style="text-align:right;">Full BWA</th><th style="text-align:right;">Drop &lt;1%</th><th style="text-align:right;">Drop &lt;5%</th></tr> 158 + <tr><td>Target features</td><td style="text-align:right;">593</td><td style="text-align:right;">558 (<span class="pass">&minus;35</span>)</td><td style="text-align:right;">537 (<span class="pass">&minus;56</span>)</td></tr> 159 + <tr><td>BWA growth rate</td><td style="text-align:right;">~52/yr</td><td style="text-align:right;">~49/yr</td><td style="text-align:right;">~47/yr</td></tr> 160 + <tr><td>Parity FTE</td><td style="text-align:right;font-weight:700;">~44</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">~41</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">~38</td></tr> 161 + <tr><td>Cost/yr</td><td style="text-align:right;">&euro;8.8M</td><td style="text-align:right;">&euro;8.2M</td><td style="text-align:right;">&euro;7.6M</td></tr> 162 + <tr><td>3yr total</td><td style="text-align:right;">&euro;26.3M</td><td style="text-align:right;">&euro;24.5M</td><td style="text-align:right;">&euro;22.7M</td></tr> 163 + <tr style="background:rgba(42,125,42,0.06);"><td style="font-weight:700;color:#1f6e1f;">3yr savings</td><td style="text-align:right;color:#686868;">&mdash;</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">&euro;1.8M</td><td style="text-align:right;font-weight:700;color:#1f6e1f;">&euro;3.6M</td></tr> 172 164 </table> 173 - <p style="font-size:10.5px;color:#1d1d1d;margin-top:4px;line-height:1.4;">Velocity is accelerating &mdash; WPT score doubled in 2.5 years. But Servo&rsquo;s completion rate (~22/yr) is less than half BWA&rsquo;s growth rate (~52/yr). Without investment, the gap widens.</p> 174 165 </div> 175 166 176 167 <div class="section"> ··· 201 192 202 193 <div class="section"> 203 194 <h2>Methodology</h2> 204 - <p style="font-size:10px;line-height:1.45;color:#666;">Readiness measured against Baseline &ldquo;Widely Available&rdquo; (BWA) web features &mdash; supported 30+ months across all major browsers. Feature scores from Web Platform Tests (WPT) via WPT Feature Manifest mapping. 439 of 593 BWA features are measurable; 154 lack WPT mapping (78 JS built-ins tested by test262 not WPT, 23 semantic HTML elements, 53 other with unknown status). FTE-equivalent from per-author commit frequency (1 FTE &asymp; 22 commits/month, capped at 1.0 per person; 115 authors sum to ~13 FTE). BWA growth rate of ~52/year is the 2023&ndash;2025 average, normalized to exclude the 2022 interop spike. Known pipeline: 130 features graduating by 2028. Velocity parity = Servo&rsquo;s annual feature completion rate &ge; BWA annual growth rate. Completions/yr = 22 &times; (FTE/13)<sup>0.7</sup> (sublinear <a href="https://en.wikipedia.org/wiki/Brooks%27s_law">Brooks&rsquo;s Law</a> scaling). Stalled = zero or negative velocity over the full observation period (2023-Q3 to 2026-Q1). Regressions = features that lost &gt;5 percentage points. Cost at &euro;200k/yr per FTE: &euro;150k European senior SWE median total cost &times; 1.33&times; premium for browser-engine specialization (small talent pool, Rust/rendering/layout) and multi-disciplinary practice (software development + W3C/WHATWG standards participation + open-source community management). Calibrated against <a href="https://nlnet.nl/funding.html">NLnet</a> (&euro;108k), <a href="https://www.sovereign.tech/programs/fellowship">Sovereign Tech Fund</a> (&euro;79&ndash;101k), <a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany">Mozilla Germany</a> (&euro;145&ndash;164k), and <a href="https://github.com/servo/project/issues/181">Servo grant rates</a> (&euro;248k US contractor). Excludes other opex, infrastructure, management overhead, and inflation. Usage-prioritized scenarios: at &lt;1% threshold, 35 features deprioritized (target 558, growth ~49/yr); at &lt;5%, 56 features deprioritized (target 537, growth ~47/yr). Data: wpt.fyi, web-features, Servo git history. Full interactive dashboard: dashboard.html.</p> 195 + <p style="font-size:10px;line-height:1.45;color:#666;">Readiness measured against Baseline &ldquo;Widely Available&rdquo; (BWA) web features &mdash; supported 30+ months across all major browsers. Feature scores from Web Platform Tests (WPT) via WPT Feature Manifest mapping. 439 of 593 BWA features are measurable; 154 lack WPT mapping (78 JS built-ins tested by test262 not WPT, 23 semantic HTML elements, 53 other with unknown status). FTE-equivalent from per-author commit frequency (1 FTE &asymp; 22 commits/month, capped at 1.0 per person; 115 authors sum to ~13 FTE). BWA growth rate of ~52/year is the 2023&ndash;2025 average, normalized to exclude the 2022 interop spike. Known pipeline: 130 features graduating by 2028. Velocity parity = Servo&rsquo;s annual feature completion rate &ge; BWA annual growth rate. Completions/yr = 22 &times; (FTE/13)<sup>0.7</sup> (sublinear <a href="https://en.wikipedia.org/wiki/Brooks%27s_law">Brooks&rsquo;s Law</a> scaling). Stalled = zero or negative velocity over the full observation period (2023-Q3 to 2026-Q1). Regressions = features that lost &gt;5 percentage points. Cost at &euro;200k/yr per FTE: &euro;150k European senior SWE median total cost &times; 1.33&times; premium for browser-engine specialization (small talent pool, Rust/rendering/layout) and multi-disciplinary practice (software development + W3C/WHATWG standards participation + open-source community management). Calibrated against <a href="https://nlnet.nl/core/faq/">NLnet</a> (&euro;117k, up to &euro;65/hr), <a href="https://www.sovereign.tech/programs/fellowship">Sovereign Tech Fund</a> (&euro;79&ndash;101k, TVöD-Bund + employer costs), <a href="https://www.levels.fyi/companies/mozilla/salaries/software-engineer/locations/germany">Mozilla Germany</a> (&euro;145&ndash;164k), and <a href="https://github.com/servo/project">Servo grant rates</a> (&euro;248k US contractor). Excludes other opex, infrastructure, management overhead, and inflation. Usage-prioritized scenarios: at &lt;1% threshold, 35 features deprioritized (target 558, growth ~49/yr); at &lt;5%, 56 features deprioritized (target 537, growth ~47/yr). Data: wpt.fyi, web-features, Servo git history. Full interactive dashboard: dashboard.html.</p> 205 196 </div> 206 197 207 198 <p style="font-size:9px;line-height:1.45;color:#686868;margin-top:8px;">Thanks to the people who&rsquo;ve reviewed the methodology and approach so far. NOTE: AI was used in the making of this draft report. For suggestions for improvement or spotting of inaccuracies, contact <a href="mailto:dietrich@webtransitions.org">dietrich@webtransitions.org</a>.</p>