Quality Distributed Solution Architecture: Part 2 – Cost of poor Architecture and Design


In our previous post, we delved into the pitfalls of static solution architecture and how it leads to inadequate quality checks until a solution is put into production. In this post, we shift our focus to analyzing the cost and implications of such an approach. The impact of static solution architecture varies with the complexity of the project. While minor defects in straightforward solutions might be manageable, in complex systems encompassing multiple channels, teams, processes, and systems, the repercussions can be severe and far-reaching.

Analysis of Complexity

The first step in understanding the impact is to analyze the complexity of the solution architecture. This involves evaluating various components such as the number of integrated systems, the diversity of user interfaces, the complexity of data flows, and the interdependencies among different modules. For instance, in a multi-channel banking solution that integrates customer-facing portals, internal processing systems, and third-party services, each additional component or interface exponentially increases the complexity.

A useful approach is to categorize components based on their functionality, criticality, and interconnectivity. High-criticality components, like transaction processing systems in banking, warrant more rigorous analysis due to their potential impact on the entire solution. Additionally, the degree of customization and the extent of legacy system integration also add layers of complexity, making the architecture more fragile and susceptible to costly redesigns.

Rough Calculator for Solution Redesign Impact

To estimate the financial impact of redesigning a solution, we can consider a rough calculator that takes into account several key factors:

  1. Number of Components: Each component (e.g., user interface, database, integration layer) adds to the complexity. The cost impact can be considered linearly proportional to the number of components.
  2. Number of Interfaces: The interfaces between different components or systems (e.g., API calls, data exchanges) significantly contribute to the complexity. The more interfaces, the higher the potential cost of redesign.
  3. Interdependency Complexity: Systems with high interdependencies have a multiplicative effect on redesign costs. If changing one component requires changes in others, this escalates the redesign effort.
  4. Customization Level: Highly customized components are more expensive to redesign due to the need for specialized skills and the potential lack of documentation.
  5. Legacy Integration: Integrating with legacy systems often requires additional effort in terms of compatibility and testing, increasing the redesign costs.

Based on these factors, a rough calculation can be made by assigning cost weights to each component, interface, and level of interdependency, and then summing these up. For example, a system with 10 components, 15 interfaces, high interdependency, and significant customization might have a redesign cost multiplier of 3x to 5x compared to a simpler system with fewer components and lower interdependency.

Doing the Math: A ROM Cost Calculation by Architecture Context

let’s define the cost function as Cost(t) = c + n * multiplier * t, where:

  • c is the static initial cost component.
  • n is a base cost unit.
  • multiplier is the attribute-specific multiplier.
  • t is the time factor, representing the ongoing investment over time.

Here is a hypothetical table with more nuanced and context-specific understanding of the cost implications.

Solution Design ContextPerformance (P)Reliability (R)Usability (U)Security (S)Scalability (Sc)Maintainability (M)
Internal SystemsP(t) = c + a * U(t-1)R(t) = c + b * M(t-1)U(t) = c + d * P(t-1)S(t) = c + f * R(t-1)Sc(t) = c + g * S(t-1)M(t) = c + h * Sc(t-1)
Digital ChannelsP(t) = c + i * (# users) * P(t-1)R(t) = c + j * (transaction vol.) * R(t-1)U(t) = c + k * (user feedback) * U(t-1)S(t) = c + l * (security incidents) * S(t-1)Sc(t) = c + m * (data growth) * Sc(t-1)M(t) = c + n * (update freq.) * M(t-1)
Systems MigrationP(t) = c + o * (data size) * P(t-1)R(t) = c + p * (system uptime) * R(t-1)U(t) = c + q * (user training) * U(t-1)S(t) = c + r * (compliance req.) * S(t-1)Sc(t) = c + s * (future growth) * Sc(t-1)M(t) = c + t * (legacy issues) * M(t-1)
B2B/Partner IntegrationP(t) = c + u * (API calls) * P(t-1)R(t) = c + v * (partner SLAs) * R(t-1)U(t) = c + w * (integration ease) * U(t-1)S(t) = c + x * (data breaches) * S(t-1)Sc(t) = c + y * (partner growth) * Sc(t-1)M(t) = c + z * (integration changes) * M(t-1)
IVR IntegrationP(t) = c + aa * (call volume) * P(t-1)R(t) = c + bb * (system downtime) * R(t-1)U(t) = c + cc * (user errors) * U(t-1)S(t) = c + dd * (privacy req.) * S(t-1)Sc(t) = c + ee * (peak load) * Sc(t-1)M(t) = c + ff * (update cycles) * M(t-1)
Inbound DocumentsP(t) = c + gg * (doc volume) * P(t-1)R(t) = c + hh * (processing errors) * R(t-1)U(t) = c + ii * (format variety) * U(t-1)S(t) = c + jj * (access control) * S(t-1)Sc(t) = c + kk * (storage growth) * Sc(t-1)M(t) = c + ll * (format changes) * M(t-1)
Outbound Notifications/DocsP(t) = c + mm * (delivery speed) * P(t-1)R(t) = c + nn * (delivery success rate) * R(t-1)U(t) = c + oo * (readability) * U(t-1)S(t) = c + pp * (confidentiality) * S(t-1)Sc(t) = c + qq * (recipient growth) * Sc(t-1)M(t) = c + rr * (content updates) * M(t-1)
Table for cost calculation
  • P(t), R(t), U(t), S(t), Sc(t), and M(t) represent the costs at time t for Performance, Reliability, Usability, Security, Scalability, and Maintainability, respectively.
  • c is the static initial cost component.
  • n is a base cost unit.
  • The multiplier (e.g., 1.2, 1.5, etc.) reflects the relative increase in cost due to the specific attribute’s complexity and importance in that context.
  • P(t-1), R(t-1), U(t-1), S(t-1), Sc(t-1), and M(t-1) are the costs from the previous time period.

This model suggests a compounding effect where the cost for each attribute in a given time period depends on the cost incurred in the previous period, creating a feedback loop that reflects the ongoing, evolving investment in each aspect of the solution architecture.

Conclusion

Understanding the complexity and calculating the potential cost of redesigns in static solution architecture highlights the need for a more dynamic and flexible approach. In the next post, we will introduce a proactive methodology that can mitigate these risks by incorporating early-stage simulations and iterative design processes.

Leave a Comment