<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Christian Rackerseder | Blog</title><description>Notes on web technologies, engineering tradeoffs, and front-end architecture.</description><link>https://www.echooff.dev</link><item><title>Application performance is a product requirement</title><link>https://www.echooff.dev/blog/application-performance-is-a-product-requirement</link><guid isPermaLink="true">https://www.echooff.dev/blog/application-performance-is-a-product-requirement</guid><description>Application performance is not something engineers can optimize in isolation. It is a product decision, a requirement and a trade-off that has to be made explicit.</description><pubDate>Sun, 10 May 2026 07:10:00 GMT</pubDate></item><item><title>Developer experience is a performance feature</title><link>https://www.echooff.dev/blog/developer-experience-is-a-performance-feature</link><guid isPermaLink="true">https://www.echooff.dev/blog/developer-experience-is-a-performance-feature</guid><description>Optimizing developer experience often has a bigger long-term impact than optimizing rendering benchmarks or bundle size. Faster engineers build better software.</description><pubDate>Sat, 09 May 2026 05:22:00 GMT</pubDate></item><item><title>Pattern matching in TypeScript today</title><link>https://www.echooff.dev/blog/pattern-matching-in-typescript-today</link><guid isPermaLink="true">https://www.echooff.dev/blog/pattern-matching-in-typescript-today</guid><description>JavaScript does not have pattern matching yet, but TypeScript developers can model states clearly and use ts-pattern for exhaustive pattern matching today.</description><pubDate>Fri, 01 May 2026 07:09:00 GMT</pubDate></item><item><title>Stop using barrel exports in JavaScript</title><link>https://www.echooff.dev/blog/stop-using-barrel-exports-javascript</link><guid isPermaLink="true">https://www.echooff.dev/blog/stop-using-barrel-exports-javascript</guid><description>Barrel exports in JavaScript reduce tree shaking effectiveness, hide dependencies and make code harder to maintain. Learn why you should avoid them.</description><pubDate>Sat, 25 Apr 2026 07:32:00 GMT</pubDate></item><item><title>Why you should not access browser globals directly</title><link>https://www.echooff.dev/blog/avoid-direct-browser-globals</link><guid isPermaLink="true">https://www.echooff.dev/blog/avoid-direct-browser-globals</guid><description>Direct access to window, document, navigator and globalThis couples your code to the runtime, makes side effects harder to isolate, and leads to brittle tests.</description><pubDate>Sat, 18 Apr 2026 09:30:00 GMT</pubDate></item><item><title>Stop adding console.log: use logpoints instead</title><link>https://www.echooff.dev/blog/stop-adding-console-log-use-logpoints-instead</link><guid isPermaLink="true">https://www.echooff.dev/blog/stop-adding-console-log-use-logpoints-instead</guid><description>Logpoints let you inspect runtime behavior without changing your code, polluting commits, or pausing execution.</description><pubDate>Sat, 11 Apr 2026 06:53:00 GMT</pubDate></item><item><title>Why Testing Library is not unit testing</title><link>https://www.echooff.dev/blog/why-testing-library-is-not-unit-testing</link><guid isPermaLink="true">https://www.echooff.dev/blog/why-testing-library-is-not-unit-testing</guid><description>Testing Library is useful, but rendering components and testing them through the DOM is integration testing, not unit testing.</description><pubDate>Sun, 05 Apr 2026 14:32:00 GMT</pubDate></item><item><title>Why you should not ship test IDs to production</title><link>https://www.echooff.dev/blog/why-you-should-not-ship-test-ids-to-production-react-testing-library</link><guid isPermaLink="true">https://www.echooff.dev/blog/why-you-should-not-ship-test-ids-to-production-react-testing-library</guid><description>React Testing Library works best with semantic queries like role and label. Shipping data-testid to production hides accessibility problems and turns test-only markup into an accidental contract.</description><pubDate>Sat, 04 Apr 2026 06:22:00 GMT</pubDate></item><item><title>Git LFS is useful, but it is not a free storage upgrade</title><link>https://www.echooff.dev/blog/git-lfs-is-useful-but-it-is-not-a-free-storage-upgrade</link><guid isPermaLink="true">https://www.echooff.dev/blog/git-lfs-is-useful-but-it-is-not-a-free-storage-upgrade</guid><description>Git LFS solves a real problem for large binary files, but it also adds workflow and operational complexity that teams should adopt intentionally.</description><pubDate>Sun, 29 Mar 2026 10:38:00 GMT</pubDate></item><item><title>Why git bisect is one of Git&apos;s most underrated features</title><link>https://www.echooff.dev/blog/git-bisect-underrated-feature</link><guid isPermaLink="true">https://www.echooff.dev/blog/git-bisect-underrated-feature</guid><description>git bisect helps you find the commit that introduced a regression, but large squash merges remove the history that makes it truly effective.</description><pubDate>Fri, 27 Mar 2026 15:46:00 GMT</pubDate></item><item><title>Why I do not use enums in TypeScript</title><link>https://www.echooff.dev/blog/why-i-do-not-use-enums-in-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/why-i-do-not-use-enums-in-typescript</guid><description>Enums add runtime behavior, work against modern TypeScript workflows, and have simpler alternatives like string literal unions and const objects.</description><pubDate>Sun, 22 Mar 2026 16:49:00 GMT</pubDate></item><item><title>High coverage is not enough: mutation testing in TypeScript with Stryker</title><link>https://www.echooff.dev/blog/mutation-testing-typescript-stryker</link><guid isPermaLink="true">https://www.echooff.dev/blog/mutation-testing-typescript-stryker</guid><description>Code coverage shows what your tests execute. Mutation testing shows whether your tests fail when the code is wrong, and where Stryker fits.</description><pubDate>Thu, 19 Mar 2026 08:03:00 GMT</pubDate></item><item><title>Avoid truthy and falsy checks in TypeScript</title><link>https://www.echooff.dev/blog/avoid-truthy-falsy-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/avoid-truthy-falsy-typescript</guid><description>Truthy and falsy checks in TypeScript hide intent and can introduce bugs. Prefer explicit checks for the values you actually care about.</description><pubDate>Sat, 14 Mar 2026 06:22:00 GMT</pubDate></item><item><title>Prefer Task over Promise in TypeScript</title><link>https://www.echooff.dev/blog/prefer-task-over-promise-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/prefer-task-over-promise-typescript</guid><description>Promises hide failure in an untyped rejection path. Task from true-myth makes asynchronous success and failure explicit in TypeScript.</description><pubDate>Sat, 07 Mar 2026 09:12:00 GMT</pubDate></item><item><title>Avoid throwing for expected failures in TypeScript</title><link>https://www.echooff.dev/blog/avoid-throwing-for-expected-failures-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/avoid-throwing-for-expected-failures-typescript</guid><description>Use Result in TypeScript for expected failures, Maybe for absence, and reserve exceptions for truly exceptional situations.</description><pubDate>Sat, 07 Mar 2026 07:21:00 GMT</pubDate></item><item><title>The Billion-Dollar Mistake: Avoid &quot;null&quot; in TypeScript</title><link>https://www.echooff.dev/blog/avoid-null-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/avoid-null-typescript</guid><description>Why null still causes bugs in TypeScript - and how Maybe types make absence explicit.</description><pubDate>Wed, 04 Mar 2026 07:04:00 GMT</pubDate></item><item><title>Dependency injection without frameworks in TypeScript</title><link>https://www.echooff.dev/blog/dependency-injection-without-frameworks-in-typescript</link><guid isPermaLink="true">https://www.echooff.dev/blog/dependency-injection-without-frameworks-in-typescript</guid><description>Explicit dependencies improve clarity and testability. You do not need a framework to achieve that.</description><pubDate>Sun, 01 Mar 2026 12:13:00 GMT</pubDate></item><item><title>Why your unit tests feel fragile</title><link>https://www.echooff.dev/blog/why-your-unit-tests-feel-fragile</link><guid isPermaLink="true">https://www.echooff.dev/blog/why-your-unit-tests-feel-fragile</guid><description>Unit tests do not feel fragile because testing is hard. They feel fragile because our design mixes business logic and side effects.</description><pubDate>Sun, 01 Mar 2026 08:58:00 GMT</pubDate></item><item><title>Why I started this Blog</title><link>https://www.echooff.dev/blog/why-i-started-this-blog</link><guid isPermaLink="true">https://www.echooff.dev/blog/why-i-started-this-blog</guid><description>Why I finally decided to start writing on echooff.dev and what I want this blog to be.</description><pubDate>Sat, 28 Feb 2026 11:39:00 GMT</pubDate></item></channel></rss>