Skip to content

Instantly share code, notes, and snippets.

Created August 4, 2009 14:09
Show Gist options
  • Star 45 You must be signed in to star a gist
  • Fork 24 You must be signed in to fork a gist
  • Save anonymous/161265 to your computer and use it in GitHub Desktop.
Save anonymous/161265 to your computer and use it in GitHub Desktop.
== 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 requre 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 [http://en.wikipedia.org/wiki/Set_theory 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.
@eriksalinenike
Copy link

Required is spelled incorrectly, in the following sentence:

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

@hortoncd
Copy link

hortoncd commented Sep 10, 2019

Required is spelled incorrectly, in the following sentence:

*requires

@azizshamim
Copy link

*requires

*require

@hortoncd
Copy link

hortoncd commented Aug 25, 2022

@azizshamim lol, I just changed it, because I'm an idiot and looked at the wrong thing 😂. but this is way funnier now

Screen Shot 2022-08-25 at 10 27 32 AM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment