How do you design an API that is intuitive for developers while remaining flexible enough to support multiple underlying backends?