Nothing is sacred.
Intent survives.

Retirement does not mean these ideas were wrong. It means their useful intent is now better expressed by broader, transport-neutral principles. Historical credit remains with the original authors.

Port Binding

In 2011, “export services via port binding” was a sharp correction to application code that depended on a separately injected web server. It made a service self-contained and gave platforms a simple routing contract. That remains a good implementation pattern for network services.

It is no longer universal enough to be a top-level application factor. Event consumers, scheduled jobs, serverless functions, mobile apps, stream processors, WebAssembly components, and command-line tools may expose useful capability without listening on any port. Even for a web service, the meaningful contract is its behavior—not the socket on which one runtime happens to receive traffic.

Its durable intent now lives in Factor XI: Contract-First Interfaces. A process can still bind to $PORT; it simply is not asked to mistake that mechanism for the whole interface.

Read the original Factor VII ↗

Logs as Event Streams

The original advice—write an event stream and let the execution environment route and retain it—helped end the era of application-owned log files, custom rotation, and server-by-server archaeology. Structured standard output remains an excellent platform contract.

But logs alone cannot answer modern reliability questions. Distributed systems need correlated traces, metrics, profiles, deployment markers, audit events, and synthetic checks. More importantly, signals need to be connected to user-visible service-level objectives and an operational response. Shipping a terabyte of JSON per day is not observability.

Its durable intent now lives in Factor XIII: Observability & SLOs. Logs remain one essential signal, with explicit privacy, cardinality, retention, and correlation requirements.

Read the original Factor XI ↗