Rules

… on Infrastructure

  • There is one system, not a collection of systems.

  • The desired state of the system should be a known quantity.

  • The “known quantity” must be machine parseable.

  • The actual state of the system must self-correct to the desired state.

  • The only authoritative source for the actual state of the system is the system.

  • The entire system must be deployable using source media and text files.

… on Buying Software

  • Keep the components in the infrastructure simple so it will be better understood.

  • All products must authenticate and authorize from external, configurable sources.

  • Use small tools that interoperate well, not one “do everything poorly” product.

  • Do not implement any product that no one in your organization has administered.

  • “Administered” does not mean saw it in a rigged demo, online or otherwise.

  • If you must deploy the product, hire someone who has implemented it before to do so.

… on Automation

  • Do not author any code you would not buy.

  • Do not implement any product that does not provide an API.

  • The provided API must have all functionality that the application provides.

  • The provided API must be tailored to more than one language and platform.

  • Source code counts as an API, and may be restricted to one language or platform.

  • The API must include functional examples and not require someone to be an expert on the product to use.

  • Do not use any product with configurations that are not machine parseable and machine writeable.

  • All data stored in the product must be machine readable and writeable by applications other than the product itself.

  • Writing hacks around the deficiencies in a product should be less work than writing the product’s functionality.

… in general

  • Keep the disparity in your architecture to an absolute minimum.

  • Use Set Theory to accomplish this.

  • Do not improve manual processes if you can automate them instead.

  • Do not buy software that requires bare-metal.

  • Manual data transfers and datastores maintained manually are to be avoided.

_Source: [Rules …](https://gist.githubusercontent.com/serverhorror/253304/raw/da2c1f329fc85fdfc8906b7569824aeb2e8588a6/rules_on_infrastructure.mdown)_