Start here. This is the direct spoken answer to practice first.
Overview
Portability is valuable when it reduces real risk, but a lowest-common-denominator layer can remove the features that make a system reliable.
I abstract stable application operations and outcomes, not every provider parameter. Common concerns such as authentication, timeouts, usage, tracing, and error categories can be normalized, while features such as constrained output, prompt caching, or background execution remain explicit capabilities. The application knows which capability it requires and has a tested fallback or rejects an incompatible route.