<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Crash Test Dev</title><description>Technical publishing by Ken Chau</description><link>https://crashtestdev.com/</link><item><title>604ms Rebuilds at 50,000 Modules</title><link>https://crashtestdev.com/posts/604ms-rebuilds-at-50000-modules/</link><guid isPermaLink="true">https://crashtestdev.com/posts/604ms-rebuilds-at-50000-modules/</guid><description>Traditional bundlers start from scratch every time. Cloudpack maintains the module graph continuously and treats every output as a query. The result: 604ms warm rebuilds at 50,000 modules.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>50% Less Bandwidth Per Deploy</title><link>https://crashtestdev.com/posts/50-percent-less-bandwidth-per-deploy/</link><guid isPermaLink="true">https://crashtestdev.com/posts/50-percent-less-bandwidth-per-deploy/</guid><description>Every deploy, your users re-download the whole bundle because 1% of modules changed. Delta manifests cut that in half. The browser says what it has. The server returns only what&apos;s missing.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>50KB Down to 2KB: Why We Stopped Parsing Source Files</title><link>https://crashtestdev.com/posts/50kb-down-to-2kb-why-we-stopped-parsing/</link><guid isPermaLink="true">https://crashtestdev.com/posts/50kb-down-to-2kb-why-we-stopped-parsing/</guid><description>A typical TypeScript source file is 50KB. Its module summary is 2KB. At 50,000 modules that&apos;s the difference between 2.5GB and 100MB. The 100MB fits in L3 cache. The 2.5GB doesn&apos;t.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>A Compromised Server Can&apos;t Inject Code</title><link>https://crashtestdev.com/posts/a-compromised-server-cant-inject-code/</link><guid isPermaLink="true">https://crashtestdev.com/posts/a-compromised-server-cant-inject-code/</guid><description>The manifest server tells browsers which chunks to fetch. If an attacker owns it, they can redirect to existing content-hashed chunks. They can&apos;t inject new code. The signature covers the chunk hashes, not the advisory fields.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>We Shipped 40% Less JavaScript and Nobody Noticed</title><link>https://crashtestdev.com/posts/we-shipped-40-percent-less-javascript/</link><guid isPermaLink="true">https://crashtestdev.com/posts/we-shipped-40-percent-less-javascript/</guid><description>Every bundler claims to tree-shake. Most eliminate unused modules. Cloudpack eliminates unused exports within alive modules using a call-edge graph. The difference: 40% less shipped JavaScript.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>Your Users Are Already Telling You How to Bundle</title><link>https://crashtestdev.com/posts/your-users-are-already-telling-you-how-to-bundle/</link><guid isPermaLink="true">https://crashtestdev.com/posts/your-users-are-already-telling-you-how-to-bundle/</guid><description>Every browser session is telling you which chunks belong together. The co-request matrix from real traffic drives chunk grouping. No rebuild required. The optimization loop runs on live data.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>AI Commoditizes Features, But Judgment Compounds</title><link>https://crashtestdev.com/posts/ai-commoditizes-features-but-judgment-compounds/</link><guid isPermaLink="true">https://crashtestdev.com/posts/ai-commoditizes-features-but-judgment-compounds/</guid><description>AI raises the floor dramatically. It does not flatten the ceiling. The profession that survives is the one hardest to demo without, not just hardest to do without.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>90 Seconds to 300 Milliseconds: Fixing CI Install Times</title><link>https://crashtestdev.com/posts/node-modules-in-a-content-addressed-store/</link><guid isPermaLink="true">https://crashtestdev.com/posts/node-modules-in-a-content-addressed-store/</guid><description>Your CI caches node_modules as a tarball. One package changes, you re-upload everything. Per-package content-addressed storage with hardlink restore is the fix.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>How We Made the Cache Stop Lying</title><link>https://crashtestdev.com/posts/two-phase-fingerprinting-buildxls-deep-magic/</link><guid isPermaLink="true">https://crashtestdev.com/posts/two-phase-fingerprinting-buildxls-deep-magic/</guid><description>Weak fingerprints find candidates. Strong fingerprints verify them. The pathset is the bridge. This is how you build a cache that can&apos;t lie.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>Zero-Config File Watching Across Three Operating Systems</title><link>https://crashtestdev.com/posts/hooking-syscalls-without-a-kernel-driver/</link><guid isPermaLink="true">https://crashtestdev.com/posts/hooking-syscalls-without-a-kernel-driver/</guid><description>Three operating systems. Three interception mechanisms. One goal: watch every file a build task touches without root, without a kernel module, with single-digit overhead.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>TypeScript 7 Is 10x Faster. Your Builds Aren&apos;t.</title><link>https://crashtestdev.com/posts/typescript-7-makes-the-build-harness-more-important/</link><guid isPermaLink="true">https://crashtestdev.com/posts/typescript-7-makes-the-build-harness-more-important/</guid><description>tsgo is 10x faster on one machine. But builds don&apos;t run on one machine. The bottleneck just moved, and it moved toward the harness.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>The Architecture Mistake I Made in Lage</title><link>https://crashtestdev.com/posts/what-i-learned-maintaining-lage-and-why-i-rewrote-it/</link><guid isPermaLink="true">https://crashtestdev.com/posts/what-i-learned-maintaining-lage-and-why-i-rewrote-it/</guid><description>I co-created lage at Microsoft. It&apos;s used across the company. Its architecture has a fundamental flaw that I could only fix by starting over.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>Your Build Cache Is Lying to You</title><link>https://crashtestdev.com/posts/your-build-cache-is-lying-to-you/</link><guid isPermaLink="true">https://crashtestdev.com/posts/your-build-cache-is-lying-to-you/</guid><description>Every JS monorepo build cache works the same way: hash what you told it to hash. If you forgot to tell it about a file, the cache lies. Silently. For months.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate></item><item><title>Speeding Up Webpack Typescript Incremental Builds by 7x</title><link>https://crashtestdev.com/posts/speeding-up-webpack-typescript-incremental-builds-by-7x/</link><guid isPermaLink="true">https://crashtestdev.com/posts/speeding-up-webpack-typescript-incremental-builds-by-7x/</guid><description>How the Outlook team at Microsoft cut incremental build times from 35s to 5s by defeating four performance enemies in the Webpack pipeline.</description><pubDate>Fri, 16 Aug 2019 00:00:00 GMT</pubDate></item><item><title>Localize React without Bloating the Bundle</title><link>https://crashtestdev.com/posts/localize-react-without-bloating-the-bundle/</link><guid isPermaLink="true">https://crashtestdev.com/posts/localize-react-without-bloating-the-bundle/</guid><description>A performant approach to React localization using dynamic imports and react-intl-universal, keeping your main bundle free of locale strings.</description><pubDate>Fri, 16 Aug 2019 00:00:00 GMT</pubDate></item></channel></rss>