Making technical decisions or architectural improvements is not easy.
It takes effort, preparation, conscious planning, thoughtful thinking, strategic approach, and considering many trade-offs.
All this because there’re no silver-bullet solutions.
Making the right choices can significantly impact the efficiency and scalability of your project.
It might set it for success or failure.
A good discovery and preparation are key.
In today’s article, I’ll share my four-step approach to guide you before making any technical decision.
1. Understand The Business Domain And How It Operates
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 talk with the different stakeholders inside the business like finance, ops, marketing, compliance, etc., and see their everyday tasks, challenges, and the domain language they use daily.
This gives an additional context and understanding of the business and how to design the new project or architecture.
Strategic DDD and Event Storming
In my experience, I’ve found Strategic DDD and Event Storming as great tools to start the business domain exploration.
Strategic DDD
Strategic DDD is a subset of the Domain-Driven Design (DDD).
Strategic DDD consists of identifying two key things:
- your Ubiquitous Language
- your Bounded Contexts and the relation between them
Event Storming
Event Storming is an interactive workshop technique that brings together domain experts and development teams together to explore complex business domains.
2. Find Out What Are The Top Technical Challenges
The next step is to 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 our top problems then what’s the point into taking it in the first place? 🤷‍♂️
Example
Here is an example from a discovery of a project I’ve worked on in the past.
As a first step, we listed the different technical challenges we had at that moment:
List of technical challenges.
As a second step, we prioritized what are the most critical ones we should focus on first:
Prioritized list of critical technical challenges.
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.
3. Decide On Your Architectural Quality Attributes
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.
Example
Here is an example from a discovery of a project I’ve worked on in the past.
As a first step, we listed and prioritized the different architectural quality attributes based on their importance at that moment:
All architectural quality attributes.
As a second step, we picked the attributes our technical decision must satisfy:
Prioritized list of all architectural quality attributes.
4. Have Clear Goals
Set clear and measurable goals for what the architectural improvement or change 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.
It will also make it easier to evaluate the success of the implemented changes.
We’re modeling software to solve complex real-life business problems.
This step will be much easier and transparent if you have already outlined the top technical challenges and problems as well as your architectural quality attributes.
đź“‹ Recap
- Technical decisions and architectural improvements require thoughtful preparation, strategic approach, and trade-offs.
- First, understand your business domain and context.
- Second, identify key technical challenges and problems.
- Third, decide on critical architectural quality attributes.
- Fourth, set clear goals.
By following this four-step approach, you can ensure your decisions lead to successful outcomes.
