<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[kettanaito.com]]></title>
        <description><![CDATA[Artem Zakharchenko's blog]]></description>
        <link>https://kettanaito.com</link>
        <generator>RSS for Node</generator>
        <lastBuildDate>Thu, 16 Jul 2026 11:18:07 GMT</lastBuildDate>
        <atom:link href="https://kettanaito.com/rss.xml" rel="self" type="application/rss+xml"/>
        <pubDate>Thu, 16 Jul 2026 11:18:04 GMT</pubDate>
        <copyright><![CDATA[All rights reserved © 2026 Artem Zakharchenko]]></copyright>
        <language><![CDATA[en-us]]></language>
        <ttl>40</ttl>
        <item>
            <title><![CDATA[2023 Year in Review]]></title>
            <description><![CDATA[The good, the bad, and the ugly of the year 2023.]]></description>
            <link>https://kettanaito.com/blog/2023-year-in-review</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/2023-year-in-review</guid>
            <category><![CDATA[Personal]]></category>
            <pubDate>Tue, 19 Dec 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A Total Mess Behind GitHub Accelerator]]></title>
            <description><![CDATA[GitHub Accelerator is a life-changing program on paper. In reality, it turned out a bit differently.]]></description>
            <link>https://kettanaito.com/blog/a-total-mess-behind-github-accelerator</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/a-total-mess-behind-github-accelerator</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Wed, 05 Apr 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Advanced forms in React made easy]]></title>
            <description><![CDATA[Learn how to create clean and performant forms using React Advanced Form package.]]></description>
            <link>https://kettanaito.com/blog/advanced-forms-in-react-made-easy</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/advanced-forms-in-react-made-easy</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 14 May 2018 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Build-time Open Graph Images in Remix]]></title>
            <description><![CDATA[Generate Open Graph images in Remix on build time with this neat library.]]></description>
            <link>https://kettanaito.com/blog/build-time-og-images-in-remix</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/build-time-og-images-in-remix</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Building a Tree-shakable Library with Rollup]]></title>
            <description><![CDATA[A missing guideline for JavaScript library authors on building and distributing a tree-shakable library using RollupJS.]]></description>
            <link>https://kettanaito.com/blog/building-a-treeshakable-library-with-rollup</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/building-a-treeshakable-library-with-rollup</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Sun, 28 Jun 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Catching Flaky Tests Before It's Too Late]]></title>
            <description><![CDATA[Learn how you can use reporting tools to automate flaky test discovery]]></description>
            <link>https://kettanaito.com/blog/catching-flaky-tests-before-its-too-late</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/catching-flaky-tests-before-its-too-late</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Container Formats and Where to Find Them]]></title>
            <description><![CDATA[This is how you create custom file formats.]]></description>
            <link>https://kettanaito.com/blog/container-formats-and-where-to-find-them</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/container-formats-and-where-to-find-them</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Fri, 18 Apr 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Debounce vs Throttle: Definitive Visual Guide]]></title>
            <description><![CDATA[A complete guide to learn the difference between debounce and throttle using visual examples. Never confuse the two again.]]></description>
            <link>https://kettanaito.com/blog/debounce-vs-throttle</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/debounce-vs-throttle</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 23 Dec 2019 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Debugging Like A Pro-xy]]></title>
            <description><![CDATA[Learn how to use Proxies to debug tricky issues in JavaScript.]]></description>
            <link>https://kettanaito.com/blog/debugging-like-a-pro-xy</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/debugging-like-a-pro-xy</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Tue, 29 Aug 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Don't Sleep on AbortController]]></title>
            <description><![CDATA[Learn how to make anything abortable in JavaScript.]]></description>
            <link>https://kettanaito.com/blog/dont-sleep-on-abort-controller</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/dont-sleep-on-abort-controller</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Efficient CircleCI debugging with SSH]]></title>
            <description><![CDATA[Stop wasting hours on debugging failed CI jobs, when you can go to the very remote machine that run your tests, open its state, and solve the issue spot-on.]]></description>
            <link>https://kettanaito.com/blog/efficient-circleci-debugging-with-ssh</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/efficient-circleci-debugging-with-ssh</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 11 May 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How To Ask Questions?]]></title>
            <description><![CDATA[Asking the right questions in engineering is hard. This article makes it a bit easier.]]></description>
            <link>https://kettanaito.com/blog/how-to-ask-questions</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/how-to-ask-questions</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Fri, 04 Sep 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Looking For a Job As an Open Source Maintainer]]></title>
            <description><![CDATA[Learn about the precautions to take if you are an open source maintainer looking for a job.]]></description>
            <link>https://kettanaito.com/blog/looking-for-a-job-as-an-open-source-maintainer</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/looking-for-a-job-as-an-open-source-maintainer</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Wed, 06 Dec 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Making Sense of TypeScript Generics]]></title>
            <description><![CDATA[Here's what you need to understand about generics in TypeScript.]]></description>
            <link>https://kettanaito.com/blog/making-sense-of-typescript-generics</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/making-sense-of-typescript-generics</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Fri, 22 Mar 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Mocking in Node.js Has Just Changed Forever]]></title>
            <description><![CDATA[The two largest API mocking libraries in JavaScript now use the same interception algorithm.]]></description>
            <link>https://kettanaito.com/blog/mocking-in-nodejs-has-just-changed-forever</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/mocking-in-nodejs-has-just-changed-forever</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Monitoring JavaScript Bundle Size Changes in Remix]]></title>
            <description><![CDATA[Improve your Remix apps by analyzing the cost of every change you make.]]></description>
            <link>https://kettanaito.com/blog/monitoring-javascript-bundle-size-changes-in-remix</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/monitoring-javascript-bundle-size-changes-in-remix</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[My Struggle With Remix]]></title>
            <description><![CDATA[Remix is a fantastic framework but it's not without its issues. Here are some of my struggles after building a few different projects with it.]]></description>
            <link>https://kettanaito.com/blog/my-struggle-with-remix</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/my-struggle-with-remix</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Wed, 10 May 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[One Thing Nobody Explained To You About TypeScript]]></title>
            <description><![CDATA[One of the most common mistakes in configuring TypeScript.]]></description>
            <link>https://kettanaito.com/blog/one-thing-nobody-explained-to-you-about-typescript</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/one-thing-nobody-explained-to-you-about-typescript</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 18 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Practical Guide to Custom Jest Matchers]]></title>
            <description><![CDATA[Learn how to create custom Jest matchers to reduce the repetition in your tests and make them more readable.]]></description>
            <link>https://kettanaito.com/blog/practical-guide-to-custom-jest-matchers</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/practical-guide-to-custom-jest-matchers</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Wed, 22 Jun 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Symbol.iterator Is Pretty Neat, Actually]]></title>
            <description><![CDATA[Design custom spread syntax experience with Symbol.iterator.]]></description>
            <link>https://kettanaito.com/blog/symbol-iterator-is-pretty-neat-actually</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/symbol-iterator-is-pretty-neat-actually</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Art of Code Review]]></title>
            <description><![CDATA[Lessons learned from reviewing a team of 15 people throughout 2,5 years.]]></description>
            <link>https://kettanaito.com/blog/the-art-of-code-review</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/the-art-of-code-review</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Thu, 27 Dec 2018 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Dark Side of Open Source]]></title>
            <description><![CDATA[Drawing from personal experience how open source can be a double-edged sword.]]></description>
            <link>https://kettanaito.com/blog/the-dark-side-of-open-source</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/the-dark-side-of-open-source</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Mon, 13 Jun 2022 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Difference Between Null and Undefined]]></title>
            <description><![CDATA[In JavaScript, null and undefined cannot be more different. Here's why.]]></description>
            <link>https://kettanaito.com/blog/the-difference-between-null-and-undefined</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/the-difference-between-null-and-undefined</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Sun, 07 Jan 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Plague of Linters]]></title>
            <description><![CDATA[If you ever had a debate about which linting rule to use, you must read this.]]></description>
            <link>https://kettanaito.com/blog/the-plague-of-linters</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/the-plague-of-linters</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Fri, 10 Jul 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Thinking in Functions, Part II: Higher-order Functions]]></title>
            <description><![CDATA[Let's take a dive into what "higher-order" functions are, what problems they solve, and learn how to use them in practice.]]></description>
            <link>https://kettanaito.com/blog/thinking-in-functions-higher-order-functions</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/thinking-in-functions-higher-order-functions</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Sun, 07 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Thinking in Functions, Part I: The Input/Output Pattern]]></title>
            <description><![CDATA[Function is a synonym for action. It's good when your actions have purpose, and their intent is clear. But how to write such functions?]]></description>
            <link>https://kettanaito.com/blog/thinking-in-functions</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/thinking-in-functions</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Mon, 09 Sep 2019 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Thirty Years and Counting]]></title>
            <description><![CDATA[Listen as I reminisce about the past ten years of my life.]]></description>
            <link>https://kettanaito.com/blog/thirty-years-and-counting</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/thirty-years-and-counting</guid>
            <category><![CDATA[Personal]]></category>
            <pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Why Fetch Promise Doesn't Reject on Error Responses]]></title>
            <description><![CDATA[The fetch Promise doesn't reject on error responses and that's entirely correct! Here's why.]]></description>
            <link>https://kettanaito.com/blog/why-fetch-promise-doesnt-reject-on-error-responses</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/why-fetch-promise-doesnt-reject-on-error-responses</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Thu, 12 Oct 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Why I Wouldn't Want to Have an Engineering Degree]]></title>
            <description><![CDATA[Coming from a non-technical background is challenging. Yet I wouldn't want to have studied software engineering regardless because it would've taken one little but incredibly important thing from me.]]></description>
            <link>https://kettanaito.com/blog/why-i-wouldnt-want-to-have-an-engineering-degree</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/why-i-wouldnt-want-to-have-an-engineering-degree</guid>
            <category><![CDATA[Culture]]></category>
            <pubDate>Mon, 23 Aug 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Why Patching Globals Is Harmful]]></title>
            <description><![CDATA[Why I believe patching globals is a bad API design.]]></description>
            <link>https://kettanaito.com/blog/why-patching-globals-is-harmful</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/why-patching-globals-is-harmful</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Writing a Custom Webpack Loader]]></title>
            <description><![CDATA[Learn how to write custom webpack loaders with this example that transforms MP3 file imports into interactive audio players.]]></description>
            <link>https://kettanaito.com/blog/writing-custom-webpack-loader</link>
            <guid isPermaLink="false">https://kettanaito.com/blog/writing-custom-webpack-loader</guid>
            <category><![CDATA[Engineering]]></category>
            <pubDate>Sun, 06 Jun 2021 00:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>