Five SOLID principles through real examples from ICanUp: Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle. One practical article for each principle, without abstract animal or shape examples.
Using ContentBlockSearchTextObserver and ContentBlockSearchTextExtractor, I show why Single Responsibility Principle is not about tiny classes, but about one clear reason to change.
Using the real ICanUp search architecture, I show Open/Closed Principle in practice: new search types are added through providers while the shared SearchPage continues to work through one contract without type-specific branches.
Using three real ICanUp cases, I explain Liskov Substitution Principle: when implementations are truly interchangeable through one contract, why a Decorator can remain substitutable, and why sharing an interface does not automatically guarantee compatible behavior.
Using real ContentBlock and Analytics examples from ICanUp, I explain Interface Segregation Principle: a class should not depend on methods or capabilities it does not need.
Using real Analytics, IndexNow, and Media cases from ICanUp, I explain Dependency Inversion Principle: application code depends on contracts while MySQL, HTTP, and FFprobe remain infrastructure details.