Complete SOLID principles howto (blog post)