The author of SolidBook writes in his blog that software design and architecture is very hard, and despite knowing how to write code, methods, functions, etc. the more difficult challenge “is to figure out how to write code that makes it easy to change.” That is to say, the harder part about software development isn’t the writing of code in itself, but writing code that can be read, understood, and maintained.

Quote

For a lot of us, our projects die after one or two iterations because the code turns into an unmaintainable mess. - Khalil Stemmler

I have seen this in my own code - I write an application that seems reasonable at first, but as the size grows all the classes become intertwined, there is no true separation of concerns, and god-forbid I look away from the codebase for more than 10 seconds because if I can’t hold it all in my head I won’t be able to continue with development.

The solution, of course, is software design & architecture.

Clean Code Principles

OOP

OOP Features

Design principles and patterns

Architectural patterns

Primarily from Cosmic Python