Skip to content

System Design

Anil Kumar edited this page Jan 10, 2023 · 16 revisions

1. Domain - Business, Differentiation, focusing on important things!

Stop focusing on not important things!

It seems unlikely that using COTS (commercial off-the-shelf software packages) for your core domain (your competitive advantage) makes any sense. That's something you need to be build. Don't be scared to write software. You can do it! Just build it! -- https://twitter.com/crichardson/status/1422967303885389824

Domain-Driven Design: https://www.domainlanguage.com/wp-content/uploads/2016/05/DDD_Reference_2015-03.pdf

image

2. Bridging - Model & Code

Anticorruption Layer

--

For any decision with a blast radius of >1 group.

"My usual beef with reference architectures is that they launder the creators' assumptions into "best practices" without helping you put your own needs in context. Turns out there's a cheat code to get past this problem, and the team that built "Emblem Giving" found it:"

https://twitter.com/forrestbrazeal/status/1593354888821592066

"So how do we architect mechanistic systems that fit elegantly into the organic substrate of our imperfect world?"

https://medium.com/@kris-nova/organic-and-mechanistic-systems-e576ac470845

Architecture ‘will be in a perpetual “in progress” state’

Modern #softwarearchitecture is explicitly as much about time as it is about the state of the system:

  • “this lib will become a separate service when the load exceeds that threshold”
  • “this CRUD module will be refactored into an Hexagonal Architecture when it grows more complex”
  • “we’ll replace this SaaS service by an in-house one when our needs get more sophisticated”
  • “we’ll split this Bounded Context into two when the corresponding team has grown beyond 9 members” Modern #softwarearchitecture is explicitly about time, it’s dynamic. It’s about evolution, options or irreversible decisions.

It’s no more about detailed target architecture diagrams!