
Target developers and architects who have a background in software architecture to benefit from this course. Expect no coding, rely on terminology, and favor backend-oriented architectures discussed in the lectures.
Outline the course agenda and the architecture process to ensure designs meet requirements and constraints. Explore four case studies with system, requirements, and three architecture diagrams as boilerplate templates.
Follow a well defined architectural process—from understanding requirements to mapping components and selecting the technology stack—to deliver fast, secure, reliable, and maintainable architecture that maximizes client value.
Understand the system's requirements and goals to anchor the architectural process. Meet with the system analyst to discuss requirements like telemetry data, workflows, and user interface elements.
Understand non-functional requirements and how they shape architecture, guiding clients and analysts to formulate these requirements, including concurrent users, heavy loads, data volumes, and performance.
Map the components of the system to display its capabilities and moving parts, including functional and non-functional tasks, and use this non-technical map to understand and communicate with the client.
Decide with the development team which platforms will base the system, selecting back-end, front-end, and data-store options. Consider trade-offs, including multiple back-end or data stores in microservices, to prevent failure.
Software architecture is a living, evolving practice; stay with the team to help navigate dilemmas, debates, and changes as the architecture evolves through production.
Explore the architectural process used with clients, the system analyst, and developers to define non-functional requirements, build consensus, and design a practical architecture.
Understand the architectural process used in each case study, assess system and non-functional requirements, map components, and select technology stacks to design architecture.
We examine real world case studies from client projects, mapping architecture components, defining functional and non-functional requirements, and selecting technology stacks for each component.
Explore a case study on designing a human resources application for Daniel's paper-supply business, focusing on requirements gathering to build a system that manages salaries, vacations, and payments.
Define functional and non-functional requirements for a web-based system that handles crud on employees, salary changes, vacation days, and a file-based external payment interface.
Map the six components—employees, salary, vacation, view, data store, and logging—to fulfill requirements, share data via one store, and define interfaces with rest over http, queue, and file.
Design a custom logging service that reads logs from a queue, validates, and stores them in SQL Server using .NET Core, with a three-layer architecture and active-active redundancy.
View service handles browser requests and serves static HTML, CSS, and JavaScript, acting as a thin web app that relies on other services for data, with load balancer-based redundancy.
The employees service is a web api offering create, read, update, and delete operations for employees and their documents, with SQL Server storage for blob documents within the same transaction.
The salary service exposes add, remove, view, and approve or reject salary requests via a REST web API built on dotnet core, highlighting noun-based endpoints and load balancing for redundancy.
Manage vacation days via a traditional dotnet core web api. Employees view and reduce days; HR sets availability; uses put, get, and post endpoints with load-balanced redundancy.
Query the salary data monthly via a timer and send payments to the external system, implemented as a Dotnet core service with a three-layer architecture and an is-alive redundancy mechanism.
Choose Rabbitmq as the queue for the logging service, highlighting its general purpose broker role and ease of use over Kafka, since no data stream is involved.
Explore architecture diagrams of the dandeli air application, detailing the logic diagram of services (logging, view, employees, salary, vacation, payment interface), plus dotnet core, rabbitmq, sql server, and redundancy.
Explore how Mascot Auto adds software and hardware to standard cars to create autonomous systems and reliably receive telemetry data for display and analysis.
Explore functional and non-functional requirements for a web-based telemetry system, including schema-less seven thousand messages per second, persistent storage, dashboards, and data retention policies for operational and BI data.
Map the telemetry architecture from cars to gateway, pipeline, processor, viewer, data warehouse, BI app, and archive, detailing data flow, validation, and separate operational versus aggregated data.
Learn how the telemetry gateway receives car telemetry over TCP and quickly pushes it to the pipeline using a high-performance Node.js service on Linux with three load-balanced instances.
Discover the telemetry pipeline as a high-volume data queue, compare in-house, custom, and third-party options, and decide to use Apache Kafka for scalable, highly available streaming.
Process messages through a three-layer telemetry processor that validates and stores them in operational MongoDB and an Azure archive, using Kafka, NodeJS, and a load-balanced, redundant service.
Explore the telemetry viewer web app, built with NodeJS and React, offering live telemetry and latest errors via a three-layer API with MongoDB storage and a load balancer for redundancy.
Define a high-level BI solution by selecting the technology stack and involving a BI expert, while using the BI tool to analyze telemetry data, produce reports, and answer performance questions.
Examine architecture diagrams for a telemetry system, from data ingestion to archival and analysis. Discover the tech stack—NodeJS, Kafka, MongoDB, and Azure Storage—plus load balancing and high availability.
Introduce Grow Skull grocery collection service, where customers create online shopping lists and employees collect and deliver orders using tablets. Define the collection-side requirements and design the employee workflow.
Map the offline-capable shopping list system with the queue, list receiver, list service, tablet interface, list database, and export to the payment engine, emphasizing service autonomy and rest api messaging.
The list receiver pulls shopping lists from queue and stores them in MySQL data store, using partitioning and a Java-based console or service setup with a consumer group for redundancy.
Expose a Web API for employees to query lists by location, mark items collected or unavailable, and export payments, using Java with three-layer architecture and MySQL behind a load balancer.
Design front end to display shopping list, mark items as unavailable or collected, and send list to the payment system via a web-based React Native user interface with offline support.
The list data component functions as a queue that stores payment data for the external payment system, reusing the existing queue to implement the data queue and complete the architecture.
Explore architecture diagrams detailing four logic components—list receiver, list service, front end, and data queue—and their Java, MySQL, and React Native stack, with redundancy via consumer group and load balancing.
Explore the payroll payment processing system's fully automatic workflow, from receiving source files to validating, processing, and issuing bank instructions for payments, with no human interaction for reliability and speed.
Define functional requirements to receive, validate, and process formats. Create unified bank file and place it in a monitored folder; enforce one-minute processing, zero data loss, seven years of logs.
Map the components of a payroll system by detailing file intake, validation, and processing across folders, queues, and formatters to produce bank-ready payment files while preserving seven years of logs.
Queues pass payloads between logic units, balance load, and persist messages for durability in an asynchronous, ui-less system; compare rabbitmq and kafka, and choose rabbitmq for easy setup.
Implement a continuous file handler that monitors folders, pulls files, and enqueues them as a console or service; choose a cross-platform, high-performance dotnet core solution with strong threading.
Validate and convert files from various formats into a unified format using per-format formatters, then queue them for processing in a Dotnet core architecture.
Receive files from queue, perform calculations, and push results to next queue. It mirrors the file formatter and supports modular dotnet core architecture with a consumer group for redundancy.
Implement the file exporter to receive files from a queue, store them in the banks folder, and hand them to the bank system for payment, enabling a queue-based flow.
Define logs component using elastic stack to store, visualize, and analyze seven years of two terabytes of banking logs, shipping from dotnet core with Serilog and rabbitmq via logstash.
Analyze a queue-based architecture case study built with dotnet core, featuring a file handler, file format converter, calculation component, exporter, and logs powered by rabbitmq and elastic stack.
Explore how diverse architectures—from a payment-enabled web app with the is alive redundancy algorithm to a high-volume IoT telemetry system using Kafka—handle offline apps, queues, and robust logging.
Congratulations! You're going to be a Great Software Architect!
Software Architects have one of the most challenging and rewarding jobs in the industry.
Great salary, working with management, dealing with the up-to-date technologies and patterns, working with variety of projects and teams - all these make the Software Architect one of the most desired positions in the software industry.
Becoming a Software Architect is not easy. but becoming a Great Software Architect is even harder.
One of the best methods to become a great Software Architect is to always learn, and see what other architects did in their own work.
And this is exactly what this course is doing.
In this course we're going to discuss 4 case studies, based on a real-world, production based systems, that I've worked on in recent years.
Each case study presents a unique challenge, with a lot of twists in the way, and together - we're going to design the architecture of each and every one of them.
The case studies are varied, and we'll discuss classic web app (but with a very interesting twist...), file automation system, and more.
For each case study, we're going to go through the whole architecture process, and do the following:
- Map the components
- Understand the requirements
- Define the application type
- Select the technology stack
- Design the architecture
- Add redundancy
Our technology stack is also extremely diverse, and we're going to talk about:
- .NET Core
- SQL Server
- Java
- MongoDB
- MySQL
And more...
Important Note: This course builds on the foundations laid in The Complete Guide to Becoming a Software Architect course, and uses some concepts taught in it (mainly the architecture process). It is highly recommended, though not mandatory, to to take this course before this one.
But wait, that's not all!
One of the most important product of the architect's work are the architecture diagrams. These diagrams are the epitome of the architecture process, and summarize and represent the various aspects of the architecture.
In this course, we're going to have 3 architecture diagrams for each case study:
1. Logic Diagram
2. Technical Diagram
3. Physical Diagram
These diagrams shows the various aspects of the architecture, and are an essential part of the architect's work.
And the good part?
You can download these diagrams for your own use. These diagrams are a great starter for architecture diagrams, and there's a good chance your own system is quite similar to at least one of the case studies in this course. And even if not - you can still use it as a base for your own. Simply put - it's yours to use.
This course is the only course that gives you access to real-world, production based architectures, based on systems designed by real architects, developed by real developers, and have millions of $ invested in them. Don't miss this opportunity!
------------------------------------------------------------
What do my students have to say about my courses?
------------------------------------------------------------
"well done - The course was very practical" - Sam
"[The course] given me the confidence to go out to the market and advertise myself as such [an Architect]" - Mathew
"Life Changing" - Arivazhagan
And lots more...
------------------------------------------------------------
Who is this course for?
------------------------------------------------------------
Actually, any person who is involved in software development, even system analyst, can profit from this course.
However, the best candidate for this course is a Software Architect that wants to expand her knowledge, or a developer with some experience, preferably 2 years. This experience will help mainly in understanding the terminology used in this course.
If you're not sure if this course is for you - drop me a note!
------------------------------------------------------------
About Me
------------------------------------------------------------
I've been a Software Architect for more than 18 years, working with a variety of clients - Fortune 100 enterprises, start-ups, govt. entities, defense, telco, banking, and lots more.
I'm an avid speaker and trainer, having trained thousands of students in various courses in the past.
I love what I do, and my greatest passion (well, besides my family...) is designing modern, practical, and reliable systems for my clients.