# Object Design Checklist

## This is an index to already published articles on software design.

Some rules must be followed and embraced to create great software designs. 

This article summarizes them, serving as an index to full stories.

> TL;DR: Important concepts about Object-Oriented Programming

# Axioms

Build a _MAPPER_

%[https://maximilianocontieri.com/what-is-wrong-with-software]

Keep a **bijection** to real entities:

%[https://maximilianocontieri.com/the-one-and-only-software-design-principle]

# Definitions

%[https://maximilianocontieri.com/explain-in-5-levels-of-difficulty-object-oriented-programming]

# Corollaries

Do not use **null**

%[https://maximilianocontieri.com/null-the-billion-dollar-mistake]

Avoid **Accidental IFs**

%[https://maximilianocontieri.com/how-to-get-rid-of-annoying-ifs-forever]

Favor **immutability**:

%[https://maximilianocontieri.com/the-evil-powers-of-mutants]

Avoid **Setters** and **Getters**:

%[https://maximilianocontieri.com/nude-models-part-i-setters]

%[https://maximilianocontieri.com/nude-models-part-ii-getters]

## Best practices

Avoid **Coupling**:

%[https://maximilianocontieri.com/coupling-the-one-and-only-software-design-problem]

Fail **Fast**:

%[https://maximilianocontieri.com/fail-fast]

Avoid **Meta-Programming**:

%[https://maximilianocontieri.com/laziness-i-meta-programming]

Avoid **Dynamic Code Generation**:

%[https://maximilianocontieri.com/lazyness-ii-code-wizards]

Choose **meaningful names**

%[https://maximilianocontieri.com/what-exactly-is-a-name-part-i-the-quest]

%[https://maximilianocontieri.com/what-exactly-is-a-name-part-ii-rehab]

Build a **Theory**

%[https://maximilianocontieri.com/programming-as-theory-building]

Avoid **Accidental** Complexity

%[https://maximilianocontieri.com/no-silver-bullet]

Get **Inspired** by Quotes

%[https://maximilianocontieri.com/software-engineering-great-quotes]

## Anti Patterns

Do not use **Singleton**:

%[https://maximilianocontieri.com/singleton-the-root-of-all-evil]

Avoid Code Smells

%[https://maximilianocontieri.com/how-to-find-the-stinky-parts-of-your-code]

## Refactorings

Understand Refactorings

%[https://maximilianocontieri.com/how-to-improve-your-code-with-easy-refactorings]

## Philosophy

%[https://maximilianocontieri.com/warning-the-universes-event-simulator-is-a-fierce-adversary-for-coders]

## Exercises

%[https://maximilianocontieri.com/how-to-decouple-a-legacy-system]

%[https://maximilianocontieri.com/how-to-squeeze-test-driven-development-on-legacy-systems]

%[https://maximilianocontieri.com/how-i-survived-the-zombie-apocalypse]

## Index on GitHub

%[https://github.com/mcsee/Software-Design-Articles]

* * *

This series aims to spark debate and discussion on software design. 

Your comments and suggestions are highly appreciated.

This article is also available in Spanish [here](https://maximilianocontieri.com/object-design-checklist).
