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)