Architecture
API client abstraction
You have three network clients for the auth server, product server, and payment server that are similar but slightly different (different headers, encoding, error formats). How would you abstract them with protocols to remove the duplication?