if the semantics of your problem change
then everything else needs to change
prevent implementation coupling, that makes your architecture brittle
contracts: strict vs loose method calls “schema” serialized objects RPC remote procedure call graphql (aggregation framework, not a invocation framework) value-driven contracts json KVP key value pairs
example: brittleness not brittle: changing the type of country, does not break the contract for wishlist
support all versions forever? => deprecation strategy
https://martinfowler.com/articles/consumerDrivenContracts.html
pact
- sync: rest
- async: events (kafka / rabbitmq)
looser?
- deployability (delay in updating versions in app store, old versions on customer phones)
- integration points (app stores)