56,966 blogs · [ { "id": "01a08c55-72cb-712d-a87e-70fa35c35258", "title": "The systemic decay of tech hiring", "url": "https://thoughtspile.github.io/2026/06/22/systemic-decay-of-hiring/", "published_at": "2026-06-22T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa35c808ea", "title": "Growing my team 4x has been a pain. Can we do better?", "url": "https://thoughtspile.github.io/2024/04/18/team-scaling/", "published_at": "2024-04-18T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3644c078", "title": "From engineer to manager: what I love, what I hate", "url": "https://thoughtspile.github.io/2024/02/16/eng-to-em/", "published_at": "2024-02-16T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa36b76293", "title": "I conducted 60 interviews in 2 months — here's what I learned", "url": "https://thoughtspile.github.io/2024/01/06/60-interview-lessons/", "published_at": "2024-01-06T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa37441cac", "title": "Svelte stores: the curious parts", "url": "https://thoughtspile.github.io/2023/04/22/svelte-stores/", "published_at": "2023-04-22T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3796c3a8", "title": "Svelte reactivity — an inside and out guide", "url": "https://thoughtspile.github.io/2023/04/22/svelte-state/", "published_at": "2023-04-22T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3824eee9", "title": "How I made banditypes, the smallest TS validation library", "url": "https://thoughtspile.github.io/2023/03/02/banditypes-smallest-validation/", "published_at": "2023-03-02T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3827f627", "title": "Ditch google analytics now: 7 open-source alternatives", "url": "https://thoughtspile.github.io/2023/02/12/open-source-analytics/", "published_at": "2023-02-12T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa38b1818e", "title": "The complete guide to safe type narrowing in TypeScript", "url": "https://thoughtspile.github.io/2023/01/31/typescript-safe-narrow/", "published_at": "2023-01-31T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa395a58b7", "title": "Making sense of TypeScript using set theory", "url": "https://thoughtspile.github.io/2023/01/23/typescript-sets/", "published_at": "2023-01-23T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa396de90b", "title": "Seven habits of bad interviewers", "url": "https://thoughtspile.github.io/2022/03/28/interview-bad-habits/", "published_at": "2022-03-28T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa39d00906", "title": "5 coding interview questions I hate", "url": "https://thoughtspile.github.io/2022/03/21/bad-tech-interview/", "published_at": "2022-03-21T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3a0909f9", "title": "Don't trust JS library size, min+gzip", "url": "https://thoughtspile.github.io/2022/02/15/bundle-size-lies/", "published_at": "2022-02-15T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3a96f13f", "title": "Why I prefer JS for front-end build automation", "url": "https://thoughtspile.github.io/2022/02/14/js-automation/", "published_at": "2022-02-14T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3a9944b4", "title": "Using global memoization in React", "url": "https://thoughtspile.github.io/2022/02/09/react-global-memo/", "published_at": "2022-02-09T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3af9a639", "title": "What is a react component, anyways?", "url": "https://thoughtspile.github.io/2022/01/25/what-is-react-component/", "published_at": "2022-01-25T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3b0cc124", "title": "Good advice on JSX conditionals", "url": "https://thoughtspile.github.io/2022/01/17/jsx-conditionals/", "published_at": "2022-01-17T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3bc6f911", "title": "Make useRef lazy — 4 ways", "url": "https://thoughtspile.github.io/2021/11/30/lazy-useref/", "published_at": "2021-11-30T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3bd6b81e", "title": "Open source starter pack for JS devs", "url": "https://thoughtspile.github.io/2021/11/20/open-source-starter/", "published_at": "2021-11-20T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3bea6441", "title": "useEffect sometimes fires before paint", "url": "https://thoughtspile.github.io/2021/11/15/unintentional-layout-effect/", "published_at": "2021-11-15T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3c3ab4fd", "title": "SemVer: The Tricky Parts", "url": "https://thoughtspile.github.io/2021/11/08/semver-challenges/", "published_at": "2021-11-08T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3cab894e", "title": "Why I always wrap Context.Provider and useContext", "url": "https://thoughtspile.github.io/2021/10/27/better-react-context/", "published_at": "2021-10-27T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3d6648f8", "title": "Can we useRef, but without the .current? Let's try!", "url": "https://thoughtspile.github.io/2021/10/25/useref-no-current/", "published_at": "2021-10-25T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3e1b7ca2", "title": "How to replace useState with useRef and be a winner", "url": "https://thoughtspile.github.io/2021/10/18/non-react-state/", "published_at": "2021-10-18T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3e694e00", "title": "Thanks React, I'm fine with an imperative setInterval", "url": "https://thoughtspile.github.io/2021/10/13/really-declarative/", "published_at": "2021-10-13T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3ed7768c", "title": "Are many useStates better than useState(object)?", "url": "https://thoughtspile.github.io/2021/10/11/usestate-object-vs-multiple/", "published_at": "2021-10-11T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3f3535f8", "title": "Is your babel's transform-runtime getting lazy? You better check.", "url": "https://thoughtspile.github.io/2021/10/06/babel-runtime-version/", "published_at": "2021-10-06T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa3fab81de", "title": "How to destroy your app performance using React contexts", "url": "https://thoughtspile.github.io/2021/10/04/react-context-dangers/", "published_at": "2021-10-04T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa409135d0", "title": "7 things you may not know about useState", "url": "https://thoughtspile.github.io/2021/09/27/usestate-tricks/", "published_at": "2021-09-27T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa40e2ef13", "title": "Zero-setup bundle size checker", "url": "https://thoughtspile.github.io/2021/09/24/quick-size-check/", "published_at": "2021-09-24T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4156f1c2", "title": "Build better libraries, use dev warnings", "url": "https://thoughtspile.github.io/2021/09/22/dev-warnings/", "published_at": "2021-09-22T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa41ce0325", "title": "useLayoutEffect is a bad place for deriving state", "url": "https://thoughtspile.github.io/2021/09/21/useeffect-derived-state/", "published_at": "2021-09-21T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa41ff6676", "title": "How we made our pre-commit check 7x faster", "url": "https://thoughtspile.github.io/2021/06/14/faster-pre-commit/", "published_at": "2021-06-14T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa423473be", "title": "Cleaner ways to build dynamic JS arrays", "url": "https://thoughtspile.github.io/2021/06/11/cleaner-dynamic-arrays/", "published_at": "2021-06-11T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa42f90126", "title": "Two practical uses for capture event listeners", "url": "https://thoughtspile.github.io/2021/06/07/event-capture/", "published_at": "2021-06-07T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa43bf9dde", "title": "Go beyond eslint limits with these 3 tricks", "url": "https://thoughtspile.github.io/2021/06/04/eslint-workarounds/", "published_at": "2021-06-04T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4468ad7e", "title": "Become the master of your eslint with no-restricted-syntax", "url": "https://thoughtspile.github.io/2021/06/02/eslint-restrict-syntax/", "published_at": "2021-06-02T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa44e03c11", "title": "How to increase test coverage FAST", "url": "https://thoughtspile.github.io/2021/05/31/moar-coverage/", "published_at": "2021-05-31T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa459401dc", "title": "So you think you know everything about React refs", "url": "https://thoughtspile.github.io/2021/05/17/everything-about-react-refs/", "published_at": "2021-05-17T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa45ddea32", "title": "Did I just build a better useCallback?", "url": "https://thoughtspile.github.io/2021/04/07/better-usecallback/", "published_at": "2021-04-07T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4655cc93", "title": "How useRef turned out to be useMemo's father", "url": "https://thoughtspile.github.io/2021/04/05/useref-usememo/", "published_at": "2021-04-05T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa473b1770", "title": "How to timeout a promise", "url": "https://thoughtspile.github.io/2021/04/02/promise-timeout/", "published_at": "2021-04-02T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa47b65d3b", "title": "Extravagantly fast rendering with React benders", "url": "https://thoughtspile.github.io/2019/01/06/vdom-bend-memo/", "published_at": "2019-01-06T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa48291ce3", "title": "10 Design Rules for Programmers", "url": "https://thoughtspile.github.io/2018/12/17/design-crash-course/", "published_at": "2018-12-17T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4895c913", "title": "Keep a React component mounted", "url": "https://thoughtspile.github.io/2018/12/02/react-keep-mounted/", "published_at": "2018-12-02T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa49416388", "title": "Major Garbage Producers in JS", "url": "https://thoughtspile.github.io/2018/11/24/garbage-producing-js/", "published_at": "2018-11-24T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa497d1d4f", "title": "Why you Might Want to Extend React Components", "url": "https://thoughtspile.github.io/2018/11/05/react-extend-justified/", "published_at": "2018-11-05T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4a74859b", "title": "OOP for FP lovers: Simplistic Dependency Injection", "url": "https://thoughtspile.github.io/2018/10/28/simplistic-di/", "published_at": "2018-10-28T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4b2433f3", "title": "Five Tricks for Debug-Logging in JavaScript", "url": "https://thoughtspile.github.io/2018/10/05/js-debug-logging/", "published_at": "2018-10-05T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4bede486", "title": "Let's Make Software Better", "url": "https://thoughtspile.github.io/2018/09/29/lets-make-software-better/", "published_at": "2018-09-29T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4c8a3431", "title": "Another Week with Bad Software", "url": "https://thoughtspile.github.io/2018/09/23/bad-software-week/", "published_at": "2018-09-23T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4d582ce9", "title": "Simpifying AngularJS controllers with ES5 get / set", "url": "https://thoughtspile.github.io/2018/09/20/angularjs-service-property-getter/", "published_at": "2018-09-20T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4e14c36d", "title": "Quick Tip: docx is a zip Archive", "url": "https://thoughtspile.github.io/2018/07/14/docx-is-a-zip-archive/", "published_at": "2018-07-14T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4e775eeb", "title": "Advanced Promise Coordination: Rate Limiting", "url": "https://thoughtspile.github.io/2018/07/07/rate-limit-promises/", "published_at": "2018-07-07T00:00:00+00:00" }, { "id": "01a08c55-72cb-712d-a87e-70fa4edfeea7", "title": "Advanced Promises Coordination: Serialization and Concurrency Limiting", "url": "https://thoughtspile.github.io/2018/06/20/serialize-promises/", "published_at": "2018-06-20T00:00:00+00:00" } ] posts Claim your blog
Back to Vladimir Klepov as a Coder
Blog · corpus.blog/blogs/thoughtspile.github.io/posts

Vladimir Klepov as a Coder

thoughtspile.github.io

2026

2024

2023

2022

2021

2019

2018