How do you maintain backward compatibility between microservices?

Answer

Backward compatibility means that when a service is updated, existing consumers continue to work without changes. Key practices: Postel's Law ("be conservative in what you send, liberal in what you accept") — ignore unknown fields in incoming messages and never remove or rename existing fields. Additive-only schema changes — add new optional fields rather than changing existing ones. API versioning — maintain old endpoints alongside new ones during a migration window. Consumer-driven contract tests (Pact) — each consumer specifies its expectations in a contract, and the provider's CI pipeline verifies it satisfies all contracts before deployment. Semantic versioning — clearly communicate breaking changes via MAJOR version bumps. Teams at Netflix maintain multiple API versions concurrently to support different client generations.