Skip to content
all episodes
Code of Architecture · episode 33

A Philosophy of Software Design — Episode 4

1:12:31

Episode participants

  • Alexey Tarasov

    guest

Conversation

What we discussed on the recording

The finale starts with consistency. The same concepts need the same names, similar interfaces should behave predictably, and deep modules should hide differences. Linters and checkers enforce conventions. Changing a rule requires explicit cost, risk, and migration planning.

Code is obvious to its reader. Naming, comments, formatting, and local idioms provide context. Inheritance must separate interface from implementation: the first defines a contract, while the second leaks hidden details. Composition usually preserves boundaries better.

The software-trends review avoids religious answers. Design patterns provide vocabulary but hurt when a solution is forced into a familiar shape. Unit tests make implementation changes safer; TDD can let tests dictate design. Convention over configuration helps until hidden rules become too numerous.

Design for Performance starts with measurements. Effort belongs on the critical path and common case, leaving corner cases outside hot code. Decide What Matters continues the idea: not everything can be important, so business context and experience identify the highest-leverage area. The finale collects the book's red flags and techniques.