Interfaces between systems
The interfaces a system exposes, and the contracts it holds itself to once something depends on them.
An interface is a promise, and the moment something outside the system depends on it, changing it stops being a technical decision and becomes a negotiation. Most of the discipline here is about being deliberate at the point where a promise is made.
Interfaces are designed around what the other side needs to accomplish, not around the shape of the storage behind them. An interface that mirrors the storage underneath turns every future internal change into a breaking one.
Responses are explicit about failure. A meaningful status code and a body that names what went wrong is the difference between a consumer that can handle a problem and one that retries indefinitely against a request that will never succeed.
Anything that mutates state is designed to tolerate being called twice. Networks retry, systems redeliver, and operators re-run things after an incident, so an interface assuming each instruction arrives exactly once will eventually double something that matters.
Rate limits, the behavior of reading large volumes, and the specific ways a vendor's test system differs from its live one are discovered during the build and written down, because the next person to touch the integration will otherwise discover them again at the same cost.
Third-party responses are validated, not trusted. A field documented as always present will one day be absent, and a system that assumes the documentation is a system that fails at that moment with an error naming the wrong cause.
Credentials live in configuration, never in the code itself, and each integration uses the narrowest permission that lets it do its job. A key with full account access used to read one thing is a breach waiting for a reason.
Outbound calls carry timeouts and a bounded retry policy with backoff. A request without a timeout will eventually hang for as long as the operating system permits, holding a connection and a worker, and a system that retries immediately and forever converts a brief outage at a vendor into a sustained one of its own making.
Where an interface must change in a way consumers cannot absorb, the old version continues to work for a stated period instead of being switched off on the day the new one ships.
What this does not cover.
- Public interfaces without a stated versioning and retirement policy.
- Credentials committed to version control or shared through chat.
- Integrations against undocumented behavior a vendor may change without notice.
Software Engineering
Specification before code
The document that names every entity, every state, and every failure path — and why a project that cannot produce it should not start.
Types as guarantees
Making the likeliest mistake in a system impossible to express, rather than merely against the rules.
Internal tools
Authenticated back-office systems for the work currently living in a spreadsheet.
Commerce and payments
Checkout, registration, and subscription flows built against the client's own payment account.
Moving data between systems
Reversible where possible, rehearsed against a copy, and always producing a record of what changed.
Testing
Coverage aimed at what would actually be expensive to get wrong, instead of at a percentage.