title: “System Design”

linkTitle: “System Design”

System Design

Core Principles

  • Feedback Loop: In most cases, when working on a project or designing a new system, it’s all about the existence of a feedback loop and shortening it.
  • Modularity: The Golden Age of Modularity
  • Interactions: The question of how to describe interactions is crucial for architecture analysis and for considering a system’s behavior.
  • Contextual Design: Architectural design is system design. System design is contextual design – it is inherently about boundaries (what’s in, what’s out, what spans, what moves between), and about tradeoffs. It reshapes what is outside, just as it shapes what is inside.
  • Design Across Time: System design is design across boundaries, and across (and over) time. It’s integrative. The system itself shapes the possibilities and probabilities of sociotechnical adaption.

Concepts and Patterns

  • Microservices:
    • IPC: The choice of Inter-Process Communication mechanism is an important architectural decision that can impact application availability.
    • Data Consistency: To solve the complex problem of maintaining data consistency in a microservice architecture, an application must use a different mechanism that builds on the concepts of loosely coupled, asynchronous services.
    • Distributed Tracing: Another way of understanding the behavior of a microservices-based application.
  • Architectural Characteristics (ACs): Effectiveness, maintainability, user friendliness, etc.
  • Frameworks:
  • High-Level Concepts:
    • Eventual Consistency: Wikipedia
    • C10k problem: Wikipedia
    • CAP Theorem: A requirement to maintain an eventually consistent replica of some data in order to implement a query.
  • MVP, POC, and Prototyping:
    • Building a Minimum Viable Product (MVP) is a great first step to ensure that a team understands the constraints and requirements of the microservices style.
    • Minimum Viable Product, Revisited

Practices and Heuristics

  • Visualize Your Architecture: A whole-team whiteboard session is often a useful exercise for reviewing the overall architecture as it evolves. Focus on key quality attributes that drive out your architectural vision (scalability, performance, usability concerns, etc.).
  • Heuristic Questions: Use leading questions like “who?”, “what?”, “when?”, “why?” to organize information and see the situation from a different angle.
  • Trial and Error: Perceive each mistake as an experience that will help in making correct decisions in the future.
  • Lifecycle Analysis: It’s sometimes beneficial to introduce time in the analysis of an element/subsystem.
  • Create a practical toolbox and use it during the processes of design, refactoring, and other activities.
  • Use flash cards with questions and principles and use them repeatedly in checklists and design stages.

Resources