
Guide junior developers to master core concepts and design principles in software design and architecture, focusing on thinking about systems rather than coding.
Explore what software architecture is and why concepts and principles matter for durable, maintainable systems, including building blocks, responsibilities, dependencies, loose coupling, and clean interfaces.
Explore the course structure across software design, software architecture, and enterprise architecture. Learn terminology such as cohesion, coupling, inversion of control, and monoliths, moduliths, and microservices.
Explore how architectural decisions shape software design, guided by objective principles for good architectures, and share your thoughts with other participants and me to gain a nuanced view.
Explore cohesion in software design by separating responsibilities into specialized classes with a single responsibility (inventory, printing, and user management), illustrating how high cohesion improves maintainability, testability, and reusability.
Learn how coupling defines the dependency strength between modules and how to achieve loose coupling with clearly defined interfaces. Visualize dependencies, design contracts, and use tests to ensure predictable behavior.
Explore dependency injection as the practical form of inversion of control, using constructor injection to keep dependencies immutable and tests deterministic, with notes on frameworks and beans.
Apply the solid principles to tame growing codebases, reduce dependencies, and design extendable, stable software. Learn practical, non-academic tools that improve everyday code quality.
Apply the single responsibility principle to keep a class focused on one task, so changes affect only a single concern, using examples like report creation, saving, and sending.
Apply the open-closed principle to extend functionality without modifying existing code, using abstract shapes and draw methods to add new shapes or plug-ins.
Explore the Liskov substitution principle, showing why subtypes must preserve superclass behavior, not just structure, using rectangle and square examples and the role of interfaces or composition.
The interface segregation principle advocates breaking large interfaces into small, specialized ones so clients aren’t forced to implement unused methods, improving flexibility, maintainability, and reducing dependencies.
Apply the dependency inversion principle to decouple business logic from database details by relying on abstractions, enabling modular, easily replaceable components and enabling patterns like onion architecture.
Adopt clean code as a mindset focused on readability, simplicity, and maintainability, with meaningful names, short functions, avoiding redundancy, and ongoing refactoring to last.
The codebase, a collection of source code, acts as the memory and source of truth for the project, with version control systems like Git tracking changes, branches, and commits.
Explore the monolith as an architectural style where frontend, backend, and data access run in an app. Maintain it with clear boundaries and tests to scale thoughtfully before adopting microservices.
Examine microservices as a response to monolith limits, enabling independent deployment of small services while weighing network latency, API versioning, monitoring, and hybrid forms.
Examine three-layered architecture, separating presentation, business logic, and data access to control dependencies and clarity, while noting potential rigidity and the shift toward onion architecture for domain-centered design.
Adopt onion architecture to keep the core business logic isolated from infrastructure by arranging inward-facing layers, with dependencies pointing inward, using interfaces, ports, and adapters.
Explore software quality by distinguishing functional from non-functional requirements and linking them to tests, performance, security, and maintainability. See how quality criteria shape architecture, testing, and reliability under real conditions.
Identify and define quality requirements through stakeholder interviews and domain knowledge, set measurable goals, and validate them with unit tests, integration tests, end-to-end tests, SLOs, SLIs, chaos tests, and monitoring.
Iso 25010 as a standardized quality model to identify and test software quality across functionality, reliability, usability, and efficiency, including testing methods like load testing and circuit breakers.
Explore scalability from hundreds of users to a million, comparing vertical and horizontal scaling and how modularized monolith, microservices, event-driven patterns, container orchestration, and load tests enable reliable performance.
Quality scenarios translate goals into concrete test cases for emergency apps under unstable networks. They specify situations, expected behaviors, and how offline data, location tracking, and reliable notifications are tested.
Document architecture decisions with architecture decision records to capture the chosen option, alternatives, rationale, and consequences. Enable transparent reasoning, onboarding of new team members, and easier maintenance when environments evolve.
Define enterprise architecture as the framework for an organization's entire system landscape, aligning processes, data, and standards with business strategy across the company and cloud or digitization goals.
Examine communication paradigms for integrating multiple software systems to support enterprise processes, and learn various integration styles from enterprise application integration, illustrated through an insurance workflow.
Understand synchronous remote procedure calls, where applications call a fixed interface over a network with serialized data. Evaluate tight coupling, deployment challenges, and use cases like gRPC versus SOAP.
Explore synchronous communication with REST and HTTP, comparing resource-based interactions and representations to RPC, and examine when REST's universal standards and HATEOAS links fit performance and integration needs.
Fundamentals of software architecture and software design explained in an understandable way
This course guides you step by step through key terms and concepts such as layers, components, coupling, cohesion, architectural styles, and patterns, covering software design, software architecture and enterprise architecture. Understandable explanations without prior knowledge, with clear goals: to create a solid foundation for implementing a sustainable software architecture.
Sustainable knowledge transfer without a focus on technology
The knowledge taught in this course focuses on concepts and principles rather than specific technologies. This creates a long-lasting, technology-agnostic foundation that strengthens your career in the long term and gives you flexibility in changing technology landscapes.
Focus on long-lasting, resilient systems
You will learn about quality attributes such as scalability, reliability, maintainability, and security, and find out how to make architectural decisions that will continue to work in the future based on those quality requirements. Small, practical examples show you how you can apply this knowledge in your practice.
Practical, motivating learning journey for beginners
The course combines clear and concise explanations with small examples that even beginners can successfully master. By the end, you will have a solid grasp of the terminology and concrete tools to make your first architectural decisions and further expand your understanding.
Sounds great? I'm looking forward to welcoming you!