Kotlin API design Core principle Place behavior, types, and platform seams where their meaning is clearest to callers; use the smallest public abstraction that preserves domain language and platform independence. Procedure 1. Name the domain concept, its owning type or module, and the callers that need to depend on it. 2. Choose function ownership before adding an extension, factory, helper, or service layer. When rejecting one, name the owner callers should use instead. 3. When reviewing a public mapping over a sealed result, name every caller-visible outcome. Flag a catch-all that hides a s…