Clean code

Writing code that is easy to read, understand, and maintain. One principle says that the code should be organized into small, single-purpose functions and classes, which is opposite from the idea Deep modules from A Philosophy of Software Design.

Programming paradigms

See Clean Architecture An effective software uses a hybrid of different programming paradigms at different times.

Object-oriented programming

Being one of the programming paradigms, OOP is the clear tool for the architecture. Use Model-driven design and domain-driven design to understand: How object-modelers are able to encapsulate an entire business in a zero-dependency domain model.

Design principles

With OOP under the belt, design principles help to decide when to use inheritance, when to use abstract class etc. Design principles are well-established best practices, such as SOLID.

Design patterns

Almost all software problems have been solved and categorized, those are called patterns. 3 categories of design patterns: creationalstructural, and behaviour. Design patterns (Gang of four)

Architectural principle

From here, higher level thinking beyond the class level.

Architectural styles

Complex business models Layered architecture Real-time events Publish-subscribe architecture 3 categories of architectural styles are similar to the 3 categories of design patterns, because architectural styles are design patterns at the high-level. Structural Messaging

Distributed

A distributed architecture simply means that the components of the system are deployed separately and operate by communicating over a network protocol. The most known might be the client-server architecture.

Architectural patterns

Architectural patterns explain in details how to implement those architectural styles.