This document discusses the concept of orthogonality in software design. It defines orthogonality as making features that minimally depend on each other, such as code, methods, classes, libraries, and more. The benefits of orthogonality include easier maintenance, reading, and reuse as changes to one part do not affect others. Techniques for achieving orthogonality include designing components as reusable "Lego bricks", minimizing state, favoring immutability, and separating concerns through clear APIs. The document provides examples of applying these principles in case studies of image processing, analytics and OCR libraries.