Closing the loop
I am interested in making reliable systems. Most of the time I rely on third party services. I've found that having failover is necessary, but that my systems need to be designed to handle catastrophic failures of third parties, in order to truly be stable. Let's close this loop.
Availability and Interface Solutions
A. Service catalog
When the service does not respond, we need to know two things:
- Is the service down?
- Is there another service or URL/URI I can use?
Our application can take action on this information, either telling the user, or failing over to another service or endpoint.
B. Semantic versioning
When the API changes, we need to know a few things:
- Will the prior implementation remain available?
- How long will the prior version be available?
- Will my code work with the new version?
- Where can I find the new version?
- How does the new version work?
Our application can progressively upgrade itself to the latest version when it's code will work with the new version. If it can't work with the new version, our application can inform the user of the date of deprecation. If the new version is working differently, our application can use in-band information to find the resources and versioning it needs to function.