Essential steps to take before making any technical decision

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

Making technical decisions or architectural improvements is not easy. It takes effort, preparation, conscious planning, thoughtful thinking, a strategic approach, and trade-offs. All this because there’re no silver-bullets.

Making the right choices can significantly impact the efficiency and scalability of your project.

Discovery and Preparation are key.

In this article, I’m sharing a 4-step approach to guide you before making any technical decision.

Before diving into any technical specifics, it’s crucial to have a solid understanding of the business domain for which the project is being developed. Know the core processes, business operations, customers, and the everyday challenges the business faces. This understanding ensures that the technical solution aligns with the business objectives and addresses real needs.

Building software for a small business is not easy.
=> We must understand the business and its domain.

You can also talk with the different stakeholders inside the business like finance, ops, etc., and see their everyday tasks, challenges, and the domain language they use daily. This will give you additional context and understanding of the business and how to design the new architecture or project.

In my experience, I’ve found Strategic DDD and Event Storming as great tools to start the business domain exploration.

Strategic DDD is a subset of the Domain-Driven Design (DDD). Strategic DDD consists of identifying two key things:

  1. your Ubiquotous Langauge

  2. your Bounded Contexts and the relation between them.

Event Storming is an interactive workshop technique that brings together domain experts and development teams to explore complex business domains.

Note: More about Strategic DDD and Event Storming in the upcoming articles.

Identify the major technical challenges and problems currently faced by the organization. This might include scalability issues, technical debt, security vulnerabilities, or integration challenges with other systems. Recognizing these problems early will help in prioritizing which issues need immediate attention and which architectural improvements can resolve these challenges.

Prioritization is key to successfully mitigate critical technical problems.

If the technical decision we aim to make doesn’t solve them then what’s the point in taking it in the first place? 🤷‍♂️

Here is an example from a discovery of a project I’ve worked on in the past:

  1. As a first step, we listed the different technical challenges we had at that moment:

  1. As a second step, we prioritized what are the most critical ones we should focus on first:

It’s important to mention that this step, requires, research, thoughtful thinking, discussions, and trade-offs.

We can’t solve all challenges at once. Clear priorities and order are crucial.

Note: The “Why?” behind the decision hides behind a lot of context. The main idea of the example is to showcase what this step looks like in practice.

Architectural quality attributes define the non-functional requirements like performance, scalability, maintainability, reliability, security, etc. Determining what attributes are most critical to your business goals will influence the architectural decisions you make.

For example, if reliability is a crucial factor for your business, you’ll prioritize solutions that enhance uptime and fault tolerance.

Here is an example from a discovery of a project I’ve worked on in the past:

  1. As a first step, we listed and prioritized the different architectural quality attributes based on their importance at that moment:

  1. As a second step, we picked the attributes our technical decision must satisfy:

Note: The “Why?” behind the decision hides behind a lot of context. The main idea of the example is to showcase what this step looks like in practice.

Set clear and measurable goals for what the architectural improvements should achieve. Whether it’s cutting down on maintenance costs, reducing server response times, or improving user experience, having specific targets will help you guide your decisions and make it easier to evaluate the success of the implemented changes.

This step will be much easier and transparent if you already outlined the top technical challenges and problems as well as your architectural quality attributes.

Technical decisions and architectural improvements require thoughtful preparation, strategic approach and trade-offs.

By following these steps:

  1. understanding your business domain

  2. identifying key technical challenges

  3. deciding on critical quality attributes

  4. setting clear goals

you can ensure that your decisions lead to successful outcomes.

Include these steps and considerations as part of your planning process and enhance your architectural designs and solutions.

We’re modeling software to solve complex real-life business problems.

{
"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": "2024-04-28T12:15:42.000Z",
"description": "And why discovery and preparation are key?",
"image": "https://substackcdn.com/image/fetch/w_1200,h_600,c_fill,f_jpg,q_auto:good,fl_progressive:steep,g_auto/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a9ad76b-165d-413c-a699-e8c5d0cc8aad_1456x1048.png",
"logo": null,
"publisher": "The T-Shaped Dev",
"title": "4 essential steps to take before making any technical decision",
"url": "https://thetshaped.dev/p/4-essential-steps-before-technical-decision"
}
{
"url": "https://thetshaped.dev/p/4-essential-steps-before-technical-decision",
"title": "4 essential steps to take before making any technical decision",
"description": "Making technical decisions or architectural improvements is not easy. It takes effort, preparation, conscious planning, thoughtful thinking, a strategic approach, and trade-offs. All this because there’re no...",
"links": [
"https://thetshaped.dev/p/4-essential-steps-before-technical-decision"
],
"image": "https://substackcdn.com/image/fetch/f_auto,q_auto:best,fl_progressive:steep/https%3A%2F%2Fpetarivanovv9.substack.com%2Fapi%2Fv1%2Fpost_preview%2F144093956%2Ftwitter.jpg%3Fversion%3D4",
"content": "<div><p><span>Making technical decisions or architectural improvements is not easy. It takes </span><strong>effort, preparation, conscious planning</strong><span>,</span><strong> thoughtful thinking</strong><span>,</span><strong> </strong><span>a</span><strong> strategic approach</strong><span>,</span><strong> and trade-offs</strong><span>. All this because there’re </span><strong>no silver-bullets</strong><span>.</span></p><p>Making the right choices can significantly impact the efficiency and scalability of your project.</p><blockquote><p><strong>Discovery and Preparation are key.</strong></p></blockquote><p><span>In this article, I’m sharing a </span><strong>4-step approach to guide you before making any technical decision</strong><span>.</span></p><p><span>Before diving into any technical specifics, it’s crucial to have a </span><strong>solid understanding of the business domain</strong><span> for which the project is being developed. Know the </span><strong>core processes</strong><span>, </span><strong>business operations</strong><span>, </span><strong>customers</strong><span>, and the </span><strong>everyday challenges</strong><span> the business faces. This understanding ensures that the </span><strong>technical solution aligns with the business objectives and addresses real needs</strong><span>.</span></p><blockquote><p><strong><span>Building software for a small business is not easy. </span><br /><span>=&gt; We must understand the business and its domain.</span></strong></p></blockquote><p><span>You can also </span><strong>talk with the different stakeholders</strong><span> inside the business like finance, ops, etc., and see their everyday tasks, challenges, and the </span><strong>domain language</strong><span> they use daily. This will give you additional context and understanding of the business and how to design the new architecture or project.</span></p><p><span>In my experience, I’ve found </span><strong>Strategic DDD</strong><span> and </span><strong>Event Storming</strong><span> as great tools to start the business domain exploration.</span></p><p><strong>Strategic DDD</strong><span> is a subset of the Domain-Driven Design (DDD). Strategic DDD consists of identifying </span><strong>two key things</strong><span>:</span></p><ol><li><p><span>your </span><strong>Ubiquotous Langauge</strong></p></li><li><p><span>your </span><strong>Bounded Contexts</strong><span> and the relation between them.</span></p></li></ol><p><strong>Event Storming</strong><span> is an interactive workshop technique that brings together domain experts and development teams to explore complex business domains.</span></p><p><em><strong>Note:</strong><span> More about Strategic DDD and Event Storming in the upcoming articles.</span></em></p><p><span>Identify the </span><strong>major technical challenges and problems</strong><span> currently faced by the organization. This might include scalability issues, technical debt, security vulnerabilities, or integration challenges with other systems. Recognizing these problems early will help in </span><strong>prioritizing which issues need immediate attention</strong><span> and </span><strong>which architectural improvements can resolve these challenges</strong><span>.</span></p><blockquote><p><strong>Prioritization is key to successfully mitigate critical technical problems.</strong></p></blockquote><p>If the technical decision we aim to make doesn’t solve them then what’s the point in taking it in the first place? 🤷‍♂️</p><p>Here is an example from a discovery of a project I’ve worked on in the past:</p><ol><li><p>As a first step, we listed the different technical challenges we had at that moment:</p></li></ol><ol><li><p>As a second step, we prioritized what are the most critical ones we should focus on first:</p></li></ol><p>It’s important to mention that this step, requires, research, thoughtful thinking, discussions, and trade-offs.</p><blockquote><p><strong>We can’t solve all challenges at once. Clear priorities and order are crucial.</strong></p></blockquote><p><em><strong>Note:</strong><span> The “Why?” behind the decision hides behind a lot of context. The main idea of the example is to showcase what this step looks like in practice.</span></em></p><p><strong>Architectural quality attributes</strong><span> define the </span><strong>non-functional requirements</strong><span> like performance, scalability, maintainability, reliability, security, etc. </span><strong>Determining what attributes are most critical to your business goals will influence the architectural decisions you make</strong><span>.</span></p><p>For example, if reliability is a crucial factor for your business, you’ll prioritize solutions that enhance uptime and fault tolerance.</p><p>Here is an example from a discovery of a project I’ve worked on in the past:</p><ol><li><p>As a first step, we listed and prioritized the different architectural quality attributes based on their importance at that moment:</p></li></ol><ol><li><p>As a second step, we picked the attributes our technical decision must satisfy:</p></li></ol><p><em><strong>Note:</strong><span> The “Why?” behind the decision hides behind a lot of context. The main idea of the example is to showcase what this step looks like in practice.</span></em></p><p><strong>Set clear and measurable goals for what the architectural improvements should achieve</strong><span>. Whether it’s cutting down on maintenance costs, reducing server response times, or improving user experience, </span><strong>having specific targets will help you guide your decisions</strong><span> and make it easier to evaluate the success of the implemented changes.</span></p><p>This step will be much easier and transparent if you already outlined the top technical challenges and problems as well as your architectural quality attributes.</p><p><span>Technical decisions and architectural improvements require thoughtful </span><strong>preparation</strong><span>, </span><strong>strategic approach</strong><span> and </span><strong>trade-offs</strong><span>.</span></p><p>By following these steps:</p><ol><li><p><strong>understanding your business domain</strong></p></li><li><p><strong>identifying key technical challenges</strong></p></li><li><p><strong>deciding on critical quality attributes</strong></p></li><li><p><strong>setting clear goals</strong></p></li></ol><p>you can ensure that your decisions lead to successful outcomes.</p><p>Include these steps and considerations as part of your planning process and enhance your architectural designs and solutions.</p><blockquote><p><strong>We’re modeling software to solve complex real-life business problems.</strong></p></blockquote><ul><li><p><strong><a target=\"_blank\" href=\"https://newsletter.systemdesign.one/p/dropbox-architecture\">How Dropbox Scaled to 100 Thousand Users in a Year After Launch</a><span> </span></strong><span>by </span><strong><a target=\"_blank\" href=\"https://newsletter.systemdesign.one/?r=643nm\">System Design Newsletter</a><span>, </span></strong></p><span> </span></li><li><p><strong>How I Setup my Terminal for Ultimate Productivity</strong><span> by </span><strong><a target=\"_blank\" href=\"https://newsletter.ashishps.com/\">Dev Design Digest</a></strong><span>, </span></p><span> </span></li><li><p><strong><a target=\"_blank\" href=\"https://hybridhacker.email/p/practical-learning-strategies-for-engineers\">Practical Learning Strategies for Engineers</a></strong><span> by </span><strong><a target=\"_blank\" href=\"https://hybridhacker.email/?r=643nm\">The Hybrid Hacker</a><span>, </span></strong></p><span> </span></li><li><p><strong><a target=\"_blank\" href=\"https://zaidesanton.substack.com/p/10-must-reads-for-engineering-leaders\">10 Must-Reads for Engineering Leaders</a></strong><span> by </span><strong><a target=\"_blank\" href=\"https://zaidesanton.substack.com/\">Leading Developers</a></strong><span>, </span></p><span> </span></li><li><p><strong><a target=\"_blank\" href=\"https://hungrymindsdev.substack.com/p/lyfts-ride-21m-users-tech-dive\">Lyft's Ride to 21M Users: A Tech Dive</a></strong><span> by </span><strong><a target=\"_blank\" href=\"https://hungrymindsdev.substack.com/\">Hungry Minds</a></strong><span>, </span></p></li></ul></div>",
"author": "Petar Ivanov",
"favicon": "https://substackcdn.com/image/fetch/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": "2024-04-28t12:15:42+00:00",
"ttr": 147,
"type": "article"
}