Building a functional API requires planning and patience, as it's a creative process with no hard-and-fast rules that can work in all cases. A good API should be discoverable, composable, and safe to use. Discoverability is crucial, as users will learn just enough to bootstrap themselves and then figure the rest out on their own. This can be achieved through documentation, conceptual models, and concise language. Conceptual models help users understand how an API works, while symmetrical language provides clear expectations. Composability allows users to select components of the API and use them in various patterns, making it easier to build workflows with the API. Safety is equally important, as APIs should behave in a predictable manner and provide feedback on errors. This can be achieved by practicing the principle of least astonishment, following contracts, designing deterministic and strict APIs, and versioning and deprecating old versions to avoid technical debt. Proper planning and design are critical to making an API a first-class feature that sets a good impression for users.