Designing Go types — defining interfaces at the point of use, keeping them small, struct composition via embedding, useful zero values, and field layout. Use when declaring an interface or struct, deciding embedding vs a named field, or where an interface should live. If you see a big interface defined next to its only implementation, an interface accepted then never abstracted, or a type needing a constructor just to be usable → apply this skill. For function signatures → See `go-function-design`. Do NOT use for naming (→ See `go-naming`).