Practical Object-Oriented Design in Ruby
Sandi Metz
Object-oriented programming languages exist to help you create beautiful, straightforward applications that are easy to change and simple to extend.
ruby software-architecture backend intermediate practical design-patterns refactoring
architecture hands-on hands on