While I was researching the Erlang "error kernel pattern" yesterday, I ran across this great link of Software Engineering Principles. It's a great "all in one page" collection titled "Programming Rules and Conventions".
As a quick example of what you'll find on that page, here is a list of the software engineering principles from the third chapter of that document:
3 SW Engineering Principles 3.1 Export as few functions as possible from a module 3.2 Try to reduce intermodule dependencies 3.3 Put commonly used code into libraries 3.4 Isolate "tricky" or "dirty" code into separate modules 3.5 Don't make assumptions about what the caller will do with the results of a function 3.6 Abstract out common patterns of code or behavior 3.7 Top-down 3.8 Don't optimize code 3.9 Use the principle of "least astonishment" 3.10 Try to eliminate side effects 3.11 Don't allow private data structure to "leak" out of a module 3.12 Make code as deterministic as possible 3.13 Do not program "defensively" 3.14 Isolate hardware interfaces with a device driver 3.15 Do and undo things in the same function
There are nine other short chapters just like this, and I thought it was a great find. I hope you like it as well.