Eric de Carufel
By Eric Nov 8, 2024

Tech Report – Rethinking Software Architecture Beyond “It Depends”. Part 1/2

In the complex world of software design, architecture plays a crucial role, often summarized by the phrase “it depends.” While this expression has its relevance, it fails to capture the depth and richness of software architecture. Moving beyond this adage means:  

making informed decisions
grounded in solid facts,
addressing real problems
with suitable solutions
while adhering to the specific constraints of each project.

This article aims to explore the fundamental dimensions of technical architecture through structural design. We will examine how informed, results-oriented architectural decisions can transform the development of a simple program into a robust and viable system. By adopting a rigorous, context-sensitive approach, software architects can guide their teams toward a functional architecture that not only exists but thrives in a constantly changing environment.

Informed Decision-Making

In the field of software architecture, making informed decisions can significantly impact a project’s success or failure. To identify the right solution, three tools can be particularly valuable: the decision tree, the value matrix, and classification axes.

The Decision Tree

The decision tree is a powerful tool for visualizing and organizing possible choices in a flowchart format. It can be viewed as a layered architecture, where each node represents a question or decision criterion, and each branch signifies the potential options or solutions that will initiate the design process. This structure facilitates a systematic analysis of choices and helps in selecting the most appropriate solution based on the established criteria.

Example: Choosing a database solution

Scenario: You need to select a database solution for a software design that has specific requirements regarding performance, scalability, and data type.

Here’s how a decision tree might be structured for this scenario:

Example of a decision tree for software architecture

Starting Point: First, determine the main type of data your software will process: relational, document, or tabular.

Branching:

  • For relational data: Assess whether an open-source solution is feasible. If so, a MySQL database is recommended. If not, consider Microsoft SQL, especially if you require robust support.
  • For document data: Evaluate the need for high performance. If performance is essential, a NoSQL database like MongoDB is suitable. For less demanding needs, a flat file system may suffice.
  • For tabular data: The choice is straightforward. According to this decision tree, the only option is Table Storage.

By utilizing a decision tree, you can effectively break down the problem and identify the most suitable solution based on the project’s characteristics and requirements. This approach reduces uncertainty and allows you to justify the decisions made in a rational and transparent manner.

The Value Matrix

The value matrix is a powerful decision-making tool that enables you to evaluate various options based on multiple criteria, each weighted according to its relative importance in the solution design. Here’s a step-by-step guide to the basic principles, along with a concrete example.

Steps for using a value matrix:

  1. Identify the options to be evaluated: Compile a list of all possible alternatives for the decision at hand.
  2. Determine evaluation criterion: Select the key factors that will influence your decision (e.g., cost, performance, ease of use, etc.).
  3. Assign weights to each criterion: Establish the relative importance of each criterion, typically using values between 0 and 1, ensuring that the sum of the weights equals 1.
  4. Rate each option: Evaluate each option on a consistent scale for each criterion (e.g., 1 to 5).
  5. Calculate the weighted score: Multiply the score for each option by the weight for each criterion, then sum the results to obtain the overall score.

Let’s imagine we need to select a web development framework. The options are Framework A, Framework B, and Framework C. The chosen criteria for evaluation are ease of use, performance, and cost.

CriteriaWeightFramework AFramework BFramework C
Ease of use0.4435
Performance0.3354
Cost0.3543
Total score4.14.24.4
Example of a weighted score table

Calculation of weighted scores:

  • Framework A: (0.4×4) +(0.3×3) + (0.3×5) = 1.6 + 0.9 + 1.5 = 4.1(0.4×4) + (0.3×3) + (0.3×5) = 1.6 + 0.9 + 1.5 = 4.1
  • Framework B: (0.4×3) + (0.3×5) + (0.3×4) = 1.2 + 1.5 + 1.2 = 3.9(0.4×3) + (0.3×5) + (0.3×4) = 1.2 + 1.5 + 1.2 = 3.9
  • Framework C: (0.4×5) + (0.3×4) + (0.3×3) = 2.0 + 1.2 + 0.9 = 4.1(0.4×5) + (0.3×4) + (0.3×3) = 2.0 + 1.2 + 0.9 = 4.1

Considering this example, although each framework has its strengths and weaknesses based on the evaluated criteria, Framework C achieves the highest score with a total of 4.4, making it the preferred choice according to the defined priorities. The use of the value matrix facilitates an objective and balanced assessment of the available options.

The Classification Axes

To make informed decisions that facilitate the creation of a robust architecture, it is essential to evaluate each option using fundamental concepts. Here are several perpendicular axes that can be useful for assessing potential choices:

Probability of Problem Risk vs. Problem Consequence:

  • Probability: How likely is it that the problem will occur?
  • Consequence: What would be the impact or severity of the problem if it did occur?

Using risk matrices to map these two dimensions can help prioritize mitigation efforts effectively.

Win vs. Effort:

  • Win: What benefits or improvements are expected?
  • Effort: How much effort is required to implement the solution?

This axis allows you to evaluate the potential return on investment (ROI) by identifying initiatives that offer the greatest benefit for the least effort.

Cost vs. Benefiy:

  • Cost: What are the costs involved, including hidden expenses?
  • Benefit: What are the measurable benefits, both short-term and long-term?

Conducting a cost/benefit analysis is crucial for justifying decisions to stakeholders.

Infographie représentant les axes de classification pour l’architecture logicielle

Finding Balance in Decisions

It’s essential to recognize that an architectural decision opens certain doors while closing others. For example, choosing a microservices architecture may offer greater flexibility and scalability, but it can also introduce increased complexity in managing services and inter-service communications. Thus, while a decision enables new possibilities, it also imposes constraints that may limit other future options.

In summary, architectural decisions result from a careful balance between the opportunities they create and the constraints they impose. By adopting a systematic approach and utilizing robust assessment tools, architects can navigate these complexities with wisdom and agility.

Decisions Based on Solid Facts

In software architecture, facts provide an essential foundation for making strategic decisions. These facts include customer requirements, technical constraints, expected performance, and security standards, all of which are critical to designing an architecture that meets specific needs effectively. Let’s delve into each of these elements to better understand their importance and impact on the decision-making process.

Customer Requirements

Importance: Customer requirements define the “why” behind a software project. They include desired functionality, user experience expectations, and targeted business outcomes. Taking the time to understand these requirements ensures the architecture aligns with the project’s core objectives.

Architectural Considerations: When designing the architecture, it’s essential to translate these requirements into precise technical specifications. While compromises or adjustments may be necessary, they must always stay aligned with the customer’s goals. Additionally, the architect should implement mechanisms that allow for the easy integration of future changes, as requirements can evolve over time.

Technical Constraints

Importance: Technical constraints include factors like compatibility with existing systems,
technology or platform choices, and budgetary limits. These elements define the
boundaries within which the architecture must be designed.

Architectural Considerations: Effective architecture addresses these constraints from the start, preventing costly and complex adjustments later. This involves evaluating available technologies, assessing their suitability for the project’s needs, and making thoughtful choices to maximize efficiency while maintaining quality.

Performance Expectations

Importance: Performance is key to ensuring that the software runs efficiently under anticipated loads, providing users with a smooth and reliable experience. This involves aspects like response time, scalability, and system availability.

Architectural Considerations: The architecture must be designed to handle expected loads, using strategies like caching, load balancing, and modular design to support scalability. Analyzing performance expectations early on helps pinpoint potential bottlenecks before they pose issues.

Security Standards

Importance: Security is a fundamental component of software architecture, especially as cyberattacks become increasingly prevalent. Adhering to security standards safeguards sensitive data and ensures compliance with current regulations.

Architectural Considerations: Incorporating strong security measures from the start, like data encryption, access controls, and activity monitoring, is crucial to protecting sensitive information. The architecture should also be designed to adapt to emerging threats without needing significant overhauls.

Conclusion

In any software design, a functional architecture provides a tailored implementation plan, shaped by a deep understanding of customer needs. As we delve into these complexities, it becomes evident that innovative approaches are essential to overcome the challenges we’ve discussed.

So, how can we transform these obstacles into tangible opportunities? Don’t miss Part 2, where we’ll share practical strategies and inspiring examples to take your projects to the next level. Stay tuned for the rest on December 10th.

In the meantime, feel free to reach out to kick-start your project.

Recommended Articles
Published on February 19, 2024

Tech Report - Choosing ABP.IO: Our Software Architects' Prime Pick for 2024

Optimize and innovate your development processes with the ABP.IO platform, a valuable and user-friendly resource for developers.

Read more
Published on July 17, 2023

The Differences Between the Roles of Software Architect and Solutions Architect

Our passionate experts will answer all your questions and talk openly about their responsibilities, the challenges they face on projects and the skills needed to perform!

Read more
Search the site
Share on