--- apply: always --- What to adhere to: - Classes should only have on responsibility, split large ones up into separate components - Try to declare as much as immutable as possible - Avoid explanatory comments; the code itself should be explanatory enough, by structure and names - Avoid coupling, use interfaces to keep the structure exchangeable - Keep the code modular - Refactor often to keep the code as clean as possible - Develop test-driven - define a public "api," usually interfaces and write tests for that api, then develop the code providing the functionality