Skip to content

Instantly share code, notes, and snippets.

@slashdotdash
Created March 26, 2019 16:29
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save slashdotdash/a6a8e47dc9a8c7b8319d52b8aeedae95 to your computer and use it in GitHub Desktop.
Save slashdotdash/a6a8e47dc9a8c7b8319d52b8aeedae95 to your computer and use it in GitHub Desktop.
Architecture principles from "Design It!" by Michael Keeling

Architecture principles

From Design It! From Programmer to Software Architect by Michael Keeling.

  • Partition system and assign responsibilities.
  • Decide trade-offs among quality attributes:
    • Performance (response time)
    • Scalability (annual growth)
    • Availability
    • Security
    • Testability
    • Maintainability (team knowledge)
    • Supportability
    • Simplicity
    • Time-to-market
  • Manage technical debt.
  • Grow the team's architecture skills.
  • Define essential structures:
    • Modules
    • Components & connectors
    • Allocations
  • Find architecturally significant requirements (ASRs):
    • Constraints
    • Quality attributes
    • Influential functional requirements
    • Other influencers

How?

  1. Turn a big problem into smaller, more manageable problems.
  2. Show people how to work together.
  3. Provide a vocabulary for talking about complex ideas.
  4. Look beyond features and functionality.
  5. Help avoid costly mistakes.
  6. Enables agility.

Four principles of design

  1. Human rule. All design is social in nature.
  2. Ambiguity rule. Preserve ambiguity.
  3. Redesign rule. All design is redesign.
  4. Tangibility rule. Make ideas tangible to facilitate communication.

Design mindset

  1. Understand the problem.
  2. Explore ideas.
  3. Evaluate fit.
  4. Make it real.

Design iteration

  1. Think. Create a plan to learn.
  2. Do. Execute the plan.
  3. Check. Critically examine what we accomplished.

Find a design that satisfices

A satisficing design is both satisfactory and sufficient — good enough — for our needs.

  • Treat solutions as experiments.
  • Focus on reducing risks.
  • Work to simplify problems.
  • Iterate quickly to learn quickly.
  • Think about the problem and solution at the same time.

The bigger the software system, the greater the benefits from up-front architecture design.

Artefacts

  • Stakeholder map
  • Business goals
  • Architecture decision records
  • Architecturally significant requirements
  • Visual model:
    • Element-responsiblity view
    • Refinement view
    • Event storming
    • Context diagram
  • Prototype
  • Inception deck

Patterns

  • Big ball of mud
  • Shared-data
  • Multi-tier (e.g. 3-tier)
  • Publish-subscribe
  • Service-oriented architecture (microservices)
  • Layers
  • Ports and adapters
  • Pipe-and-filter
  • Centre of competence
  • Open source contribution
@charitha-warawita
Copy link

Nice !!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment