| design-process | Four design axes, work backwards, minimize surface area | | surface-area | Internal packages, no global state, unknown outputs, mutation guards | | dependencies | Accept don't instantiate, accept interfaces, return structs | | evolution | Breaking changes, param objects vs functional options, result objects |
| testability | TimeNow function type, rand.Rand injection, WithX options, deterministic outputs, DST readiness |
Do NOT apply to application-level code that won't be imported by other modules.
Progettazione di librerie e pacchetti Go per l'evoluzione a lungo termine. Copre la gestione della superficie API, la direzione delle dipendenze, la compatibilità con le versioni precedenti, i compromessi tra oggetti parametro e opzioni funzionali e la testabilità tramite simulazione deterministica. Fonte: stuckinforloop/harness.