Essential steps to take before making any technical decision

https://thetshaped.dev/p/4-essential-steps-before-technical-decision

May 2026

April 2026

March 2026

February 2026

{
"by": "petar_ivanov",
"descendants": 1,
"id": 40246291,
"kids": [
40246292
],
"score": 3,
"time": 1714734223,
"title": "Essential steps to take before making any technical decision",
"type": "story",
"url": "https://thetshaped.dev/p/4-essential-steps-before-technical-decision"
}
{
"author": "Petar Ivanov",
"date": "2026-06-16T10:19:04.324Z",
"description": "A newsletter sharing practical tips on React, Node, Software Architecture, and AI. Elevate your Full-Stack JavaScript skills to the next level! Click to read The T-Shaped Dev, by Petar Ivanov, a Substack publication with tens of thousands of subscribers.",
"image": "https://substackcdn.com/image/fetch/$s_!ja1n!,f_auto,q_auto:best,fl_progressive:steep/https%3A%2F%2Fpetarivanovv9.substack.com%2Ftwitter%2Fsubscribe-card.jpg%3Fv%3D1009900503%26version%3D9",
"logo": null,
"publisher": "The T-Shaped Dev",
"title": "The T-Shaped Dev | Petar Ivanov | Substack",
"url": "https://thetshaped.dev/4-essential-steps-before-technical-decision"
}
{
"url": "https://thetshaped.dev/4-essential-steps-before-technical-decision",
"title": "The T-Shaped Dev | Petar Ivanov | Substack",
"description": "A newsletter sharing practical tips on React, Node, Software Architecture, and AI. Elevate your Full-Stack JavaScript skills to the next level! Click to read The T-Shaped Dev, by Petar Ivanov, a Substack publication with tens of thousands of subscribers.",
"links": [
"https://thetshaped.dev/4-essential-steps-before-technical-decision",
"https://thetshaped.dev/p/4-essential-steps-before-technical-decision"
],
"image": "https://substackcdn.com/image/fetch/$s_!ja1n!,f_auto,q_auto:best,fl_progressive:steep/https%3A%2F%2Fpetarivanovv9.substack.com%2Ftwitter%2Fsubscribe-card.jpg%3Fv%3D1009900503%26version%3D9",
"content": "<div><div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/you-are-using-react-compound-components-wrong-type-safe-typescript\">You're Using React Compound Components Wrong</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/you-are-using-react-compound-components-wrong-type-safe-typescript\">The most-copied example in every tutorial is the one place you shouldn't use them.</a></p></div><p>Jun 16</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!NYRE!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!NYRE!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!NYRE!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!NYRE!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6726beff-4391-4d02-99c9-d470a83c8f81_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/how-to-stop-charging-customers-twice-practical-idempotency-guide-http-message-queues\">How to Stop Charging Customers Twice: A Practical Idempotency Guide</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/how-to-stop-charging-customers-twice-practical-idempotency-guide-http-message-queues\">Idempotency in plain English: HTTP, message queues, and the one detail that decides whether it's real.</a></p></div><p>Jun 9</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!vZmh!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!vZmh!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!vZmh!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!vZmh!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061b2e3e-e7e5-483e-939a-d8482a871385_1200x630.png 960w\" /></picture></div></div></div><h3>May 2026</h3><div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/my-frontend-stack-in-2026-react-nextjs-pnpm-vite-ts-tailwind-storybook-tanstack-zustand-zod-oxlint-oxfmt-msw-vitest-playright-sentry\">My Frontend Stack In 2026</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/my-frontend-stack-in-2026-react-nextjs-pnpm-vite-ts-tailwind-storybook-tanstack-zustand-zod-oxlint-oxfmt-msw-vitest-playright-sentry\">The tools I actually reach for when building production apps, from framework to the moment a user hits a bug.</a></p></div><p>May 23</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!Qx-f!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!Qx-f!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!Qx-f!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Qx-f!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431db8a2-533b-4d0c-9491-e02ddbeb4105_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/stacked-prs-the-code-review-workflow-that-makes-difference\">Stacked PRs: The Code Review Workflow That Changed How I Ship Features</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/stacked-prs-the-code-review-workflow-that-makes-difference\">Stacked diffs, the workflow Meta and Google ship on. (7 min)</a></p></div><p>May 13</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!aqfF!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!aqfF!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!aqfF!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!aqfF!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c86b65d-f8b0-4097-9db0-b44af1c2a343_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/20-mistakes-that-quietly-destroy-javascript-typescript-codebases-common-code-smell-patterns-async-performance-testing\">20 Mistakes That Quietly Destroy JavaScript/TypeScript Codebases (Part 2)</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/20-mistakes-that-quietly-destroy-javascript-typescript-codebases-common-code-smell-patterns-async-performance-testing\">Common JS/TS patterns that feel fine until they don't. 11 mistakes, before/after code for each. (11 min)</a></p></div><p>May 9</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!gUhe!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!gUhe!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!gUhe!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!gUhe!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17c7e008-b603-4780-8cac-e0a51bf93617_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/20-mistakes-that-quietly-destroy-javascript-typescript-codebases-common-code-smell-patterns\">20 Mistakes That Quietly Destroy JavaScript/TypeScript Codebases (Part 1)</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/20-mistakes-that-quietly-destroy-javascript-typescript-codebases-common-code-smell-patterns\">Common JS/TS patterns that feel fine until they don't. 11 mistakes, before/after code for each. (11 min)</a></p></div><p>May 2</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!tD0C!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!tD0C!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!tD0C!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!tD0C!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa08009e3-478f-4469-abca-7979c6ac4720_1200x630.png 960w\" /></picture></div></div></div><h3>April 2026</h3><div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/es2025-javascript-typescript-eight-features-you-should-actually-use-production-codebase\">ES2025 Features You Should Actually Use</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/es2025-javascript-typescript-eight-features-you-should-actually-use-production-codebase\">Learn about eight features you must adapt today in your production codebase. (9 min)</a></p></div><p>Apr 22</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!eFhU!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!eFhU!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!eFhU!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!eFhU!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e77a16-cd55-4ced-a67a-7ddeac11a200_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/vertical-slice-architecture-in-nodejs-typescript-one-folder-per-use-case\">Vertical Slice Architecture in Node.js: One Folder Per Use Case</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/vertical-slice-architecture-in-nodejs-typescript-one-folder-per-use-case\">Why organizing by domain module isn't enough and what to do instead. (8 min)</a></p></div><p>Apr 11</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!x3lI!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!x3lI!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!x3lI!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!x3lI!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe656df62-293a-44d7-977d-03c5c427bd13_1200x630.png 960w\" /></picture></div></div></div><h3>March 2026</h3><div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/dependency-injection-in-nodejs-and-typescript-dependency-inversion-part-no-body-teaches-you\">Dependency Injection in Node.js &amp; TypeScript. The Part Nobody Teaches You</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/dependency-injection-in-nodejs-and-typescript-dependency-inversion-part-no-body-teaches-you\">Learn the hidden costs about importing everything directly and the structural change you need to make. (8 min)</a></p></div><div><p>Mar 29 <span>•</span> <span><span><a target=\"_blank\" href=\"https://substack.com/@petarivanovv9\">Petar Ivanov</a></span></span></p></div></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!EaSW!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!EaSW!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!EaSW!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!EaSW!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d012d0b-328c-46d9-b752-ca354941c93c_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/screaming-architecture-and-colocation-nodejs-typescript-react\">Screaming Architecture &amp; Colocation: Let Your Project Structure Tell the Story</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/screaming-architecture-and-colocation-nodejs-typescript-react\">Learn why you should organize your code by what your app actually does, not by technical roles. (5 min)</a></p></div><p>Mar 14</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!Cpx6!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!Cpx6!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!Cpx6!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!Cpx6!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01fd2aa6-0feb-4fb1-ac03-572fd4a7d02a_1200x630.png 960w\" /></picture></div></div></div><h3>February 2026</h3><div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/four-disciplines-that-separate-effective-software-engineers-from-busy-engineers\">4 Disciplines That Separate Effective Engineers From Busy Ones</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/four-disciplines-that-separate-effective-software-engineers-from-busy-engineers\">Learn about the daily habits that help engineers be more effective. (7 min)</a></p></div><p>Feb 24</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!VGWH!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!VGWH!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!VGWH!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!VGWH!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db15d0a-e497-4d86-bc0b-872f4b740762_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/database-design-foundations-backend-engineers-mistakes-and-lessons\">Database Design Doesn't Start With Table. It Starts With Consequences</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/database-design-foundations-backend-engineers-mistakes-and-lessons\">Here's what most backend engineers get wrong about schema design and how to fix it before you hit production. (6 min)</a></p></div><p>Feb 17</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!M8DD!,w_320,h_213,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 320w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_424,h_282,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_640,h_426,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 640w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_848,h_564,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_960,h_639,c_fill,f_webp,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!M8DD!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!M8DD!,w_320,h_213,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 320w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_424,h_282,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 424w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_640,h_426,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 640w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_848,h_564,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 848w, https://substackcdn.com/image/fetch/$s_!M8DD!,w_960,h_639,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb499f478-3f17-4fa8-8307-6a1eb1a2600c_1456x1048.png 960w\" /></picture></div></div></div></div>",
"author": "Petar Ivanov",
"favicon": "https://substackcdn.com/image/fetch/$s_!8rw6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ed74925-4e5c-4468-bc2b-2124fa44481a%2Ffavicon-48x48.png",
"source": "thetshaped.dev",
"published": "",
"ttr": 60,
"type": "article"
}