Engineering should make products easier to operate, inspect, replace, and extend.
Defaults
- Start with the smallest coherent component and a clear responsibility.
- Define stable inputs, outputs, error behavior, health, and versioning before adding interface layers.
- Make administrative workflows scriptable and machine-readable; add GUI and TUI layers over the same contracts.
- Prefer Rust for Katteke-authored systems and services when it fits the problem.
- Use another language or tool when evidence shows it is simpler, safer, more maintainable, or more efficient.
- Keep dependencies few, reviewed, and replaceable. Do not reimplement security or cryptography merely to avoid a dependency.
- Measure latency and resource use on representative workloads before claiming speed or efficiency.
- Preserve standalone behavior when integrations are optional.
Interfaces
Human-facing commands use memorable nouns and verbs with safe defaults. Machine workflows receive structured formats and stable exit behavior. Configuration is explicit, exportable, and documented. Breaking changes require a version boundary, migration path, or a documented pre-release decision.
Quality boundary
Simplicity never excuses missing authentication, authorization, recovery, backup, migrations, observability, accessibility, or tests when the product needs them. The simplest acceptable design includes the controls required by its risk.