Essential steps to take before making any technical decision
https://thetshaped.dev/p/4-essential-steps-before-technical-decision
Jun 27

Jun 21

Jun 16

{
"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-27T10:19:01.684Z",
"description": "Production-grade engineering for full-stack JavaScript developers who want to think like architects — React, Node, software architecture, and building real AI systems. No fluff, every week. 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_!wZIk!,f_auto,q_auto:best,fl_progressive:steep/https%3A%2F%2Fpetarivanovv9.substack.com%2Ftwitter%2Fsubscribe-card.jpg%3Fv%3D626544727%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": "Production-grade engineering for full-stack JavaScript developers who want to think like architects — React, Node, software architecture, and building real AI systems. No fluff, every week. 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_!wZIk!,f_auto,q_auto:best,fl_progressive:steep/https%3A%2F%2Fpetarivanovv9.substack.com%2Ftwitter%2Fsubscribe-card.jpg%3Fv%3D626544727%26version%3D9",
"content": "<div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/resilience-patterns-keep-backend-nodejs-service-up-production-timeout-retry-backoff-jitter-circuit-breaker\">3 Resilience Patterns That Keep a Backend Service Up When Its Dependencies Aren't</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/resilience-patterns-keep-backend-nodejs-service-up-production-timeout-retry-backoff-jitter-circuit-breaker\">Timeout, retry with backoff, and circuit breaker — what each one actually does, and the order to stack them.</a></p></div><p>Jun 27</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!j3WR!,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%2F25d31fd6-8d20-435a-9c16-b0bfee4876a6_1200x630.png 960w\" /></picture></div></div><div><div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/cqrs-without-the-astronaut-architecture-split-read-write-paths-typescript-nodejs-backend-service\">CQRS Without the Astronaut Architecture</a></p></div><div><p><a target=\"_blank\" href=\"https://thetshaped.dev/p/cqrs-without-the-astronaut-architecture-split-read-write-paths-typescript-nodejs-backend-service\">You don't need event sourcing or a second database. Just split reads from writes, and finally fix the 20-method service nobody wants to open.</a></p></div><p>Jun 21</p></div><div><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 960w\" sizes=\"(min-width:768px) 50vw, 100vw\"></source><img src=\"https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png\" srcset=\"https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 320w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 640w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!aIaS!,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%2F84b59fb1-bbc5-4f25-b0fa-2eca0ccca0aa_1200x630.png 960w\" /></picture></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>",
"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": 21,
"type": "article"
}
