You have reached the end. You started this course with a seemingly simple question — what is a design pattern? — and you finish it having built, piece by piece, a complete food delivery platform: PideYa. What began as a global configuration object and an email notifier is now, in your head, a system with a composable menu, an orchestrated checkout, orders with a lifecycle, coordinated delivery, and even a distributed version with its sagas and circuit breakers. This final lesson introduces nothing new: it looks back to lock in the essentials, gives you a yardstick for self-assessment, and proposes the first 90 days of the road ahead.
Contents
- The full journey: PideYa as a mirror
- The 7 core ideas of the course
- Final self-assessment: you know X if you can Y
- Next steps: a 90-day path
- Farewell
The full journey: PideYa as a mirror
Every module of the course left its layer on PideYa. Walking through them in order is walking through the maturity curve of any software designer:
| Module | The essence | Its mark on PideYa |
|---|---|---|
| 1. Introduction | A pattern is a named solution to a recurring problem in a context; SOLID as the floor; UML as the shared whiteboard | The vocabulary and principles we used to judge everything else |
| 2. Creational | Separating how things are created from how they are used | PideYaConfig (and its critique), the notifiers via Factory Method, the Spain/Mexico markets, Order.Builder, "repeat my last order" |
| 3. Structural | Composing objects into flexible structures without over-inheriting | PayPalAdapter, the menu as a Composite, the extras as Decorators, CheckoutFacade, the Flyweight map icons, the image and permission proxies |
| 4. Behavioral | Distributing responsibilities and communication among objects | The validation chain, the admin panel with undo, the promotion rules, DispatchCenter, the cart with Memento, the order states with Observer and State, the delivery strategies |
| 5. Application | You choose the pattern for the problem, not from the catalog; refactor toward patterns; anti-patterns lie in wait | The selection method, the patterns recognized in the JDK/Spring/Hibernate, the Fowler and Kerievsky discipline |
| 6. Advanced | The same intents, stretched across architectures, networks, and concurrency | Hexagonal PideYa with Repository and DI; then split into services with API Gateway, Saga, Outbox, and idempotency; immutability and virtual threads under load |
| 7. Resources | Learning continues: books, deliberate practice, and community | Your library, your practice plan, and your real PideYa as a personal project |
Read it top to bottom and you will see the complete narrative: from the definition of a pattern to a well-designed monolith, and from the well-designed monolith to the distributed platform. That order was no accident: nobody designs a distributed system well without first having designed an object well.
The 7 core ideas of the course
If five years from now you remember only seven sentences from this course, let them be these:
- Patterns are intents, not templates. Copying Strategy's UML diagram is not applying Strategy; applying it is recognizing "there is a family of interchangeable algorithms here". That is why the same pattern fits in three lines with lambdas or in five classes.
- Composition over inheritance. The silent lesson behind Decorator, Strategy, Bridge, and half a dozen more: wrapping and delegating buys flexibility at runtime; inheriting locks in decisions at compile time. The extras on a PideYa dish proved it better than any theory.
- Wait until it hurts. A pattern gets introduced when the code asks for it — the third
ifon the delivery type, the second notification channel — not on day one "just in case". Over-engineering is the dark side of this catalog, and refactoring toward patterns is its antidote. - The name matters. Saying "this is an Adapter" in a code review conveys, in two words, a problem, a solution, and its consequences. The shared vocabulary is, day to day, the highest-return benefit of everything you have studied.
- Program to an interface, not an implementation. The 1994 principle that underpins everything from Factory Method to Spring's dependency injection to the ports of hexagonal architecture. One idea, thirty years of relevance.
- All design is a trade-off. Every pattern buys flexibility by paying in indirection; every microservice buys autonomy by paying in distributed complexity. There is no good solution in the abstract: there is the right one for a context, and the context changes.
- Catalogs grow, but intents endure. Circuit Breaker is a Proxy that protects; API Gateway, a Facade over the network; the Outbox, a consistency problem in new clothes. Whoever masters the intents learns each new pattern in minutes — which is why this course also serves you for the patterns that have not been invented yet.
Final self-assessment: you know X if you can Y
Design knowledge is not measured by reciting definitions but by doing. Go through this list honestly; every "no" is simply your next practice goal:
| You know... | ...if you can |
|---|---|
| What a pattern is | Explain to a junior colleague the difference between a pattern and a library, with one example of each |
| The creational patterns | Justify why Order.Builder and not a telescoping constructor or setters, and when a record would suffice |
| The structural patterns | Tell an Adapter from a Decorator from a Proxy in someone else's code, even when the classes don't carry the pattern in their name |
| The behavioral patterns | Model an order's lifecycle and defend State against an enum with a switch — and the opposite case too |
| Choosing with judgment | Reject a pattern in a design discussion by arguing the trade-off, not taste |
| Refactoring toward patterns | Take the Gilded Rose (or your legacy code) and make a pattern emerge with the tests green at every step |
| Recognizing patterns in frameworks | Open a Spring or JDK class and name two patterns it contains and why they are there |
| The modern patterns | Explain which classic intent lies behind Circuit Breaker, API Gateway, and Repository |
| Communicating design | Write a one-page ADR that a colleague understands without asking you anything |
| Continuing to learn | Name your next book, your next kata, and your next community — with dates |
If you checked most of them, you don't just "know the patterns": you think in patterns, which was the real goal from the very first lesson.
Next steps: a 90-day path
The biggest risk at the end of a course is the void of the day after. A concrete proposal, adjustable to your pace (assumes 4-6 hours a week):
| Days | Goal | Concrete actions |
|---|---|---|
| 1–30 | Consolidate with your hands | Implement stages 1 and 2 of your real PideYa (domain + checkout) with tests from the start. Begin the first book of the path you chose in 07-01. Do the Gilded Rose if you haven't yet |
| 31–60 | Deepen and cross-check | Stages 3 and 4 of PideYa (lifecycle + hexagonal architecture). A pattern safari through the Spring or Guava codebase. Join your local JUG or meetup and attend one session |
| 61–90 | Step into the conversation | Write two ADRs for your PideYa and ask someone to review them. First small open source contribution or first Stack Overflow answer. Repeat the kata with variation. Redo this self-assessment and compare against day 1 |
Three rules so the plan survives contact with reality: every week ends with an artifact (a commit, a note, an ADR — not just reading); if a week falls through, you pick it back up without guilt and without "starting over"; and on day 90, you decide the next cycle yourself — you now have the judgment and the resource map to do it.
Common Mistakes and Tips
- Mistake: closing the course and not writing code for a month. What you learned degrades fast without immediate practice. The 90-day plan exists precisely for this: start this week, even if it's just one hour.
- Mistake: becoming the team's "patterns evangelist". With a freshly learned hammer, everything looks like a nail. Remember module 5: the best designer is the one who knows when not to apply the pattern, and the vocabulary is for conversing, not for pronouncing verdicts.
- Mistake: measuring progress by content consumed. Books read and videos watched are not the metric; the metric is the self-assessment table: what can you do today that you couldn't three months ago.
- Tip: come back to this course as a reference. The comparison lessons in modules 2, 3, and 4 and the selection method in module 5 are designed to be reread with a real problem in hand — that is how a catalog is meant to be used.
- Tip: teach what you have learned. A short talk to your team about three patterns you found in your own codebase is worth more than rereading three chapters: explaining is the final proof of understanding.
Exercises
Exercise 1: Your self-assessment with evidence
Go through the "you know X if you can Y" table and, for each row, write down a real piece of evidence ("I proved it when...") or a "not yet". From the "not yets", rank your top three priorities and assign each one to a stretch of your 90-day plan.
Exercise 2: The letter to your past self
Write half a page addressed to the person you were before lesson 01-01: which three things would you tell them about design patterns to spare them the most expensive misunderstandings? Don't repeat the core ideas verbatim; phrase them in your own words with your own examples.
Exercise 3: The 90-day commitment
Adapt the 90-day path to your reality: your available hours, your level according to exercise 1, and your professional goals. Write it into your calendar with concrete dates, and decide now the answer to the uncomfortable question: what will you do the week you fall short?
Solutions
Exercise 1 (indicative): valid evidence is concrete and verifiable: "I can tell an Adapter from a Decorator: I proved it in the module 3 comparison, and yesterday I spotted a Decorator in BufferedReader". A typical "not yet" is the ADR — few people have ever written one — which is why the path places it in days 61-90, once you have PideYa design decisions of your own to document.
Exercise 2 (indicative): the most lucid letters tend to revolve around three warnings: "patterns are not recipes to apply but problems to recognize", "don't reach for the pattern on day one: wait for the second or third real case", and "learn the names even if they feel like pedantry — the day you say 'this calls for a Facade' in a meeting and everyone nods, you'll understand what all of this was for". If your letter contains warnings like these with your own examples, you have internalized the course.
Exercise 3 (indicative): a good personal plan is smaller than the proposed one, not bigger: if you only have 3 hours a week, maybe PideYa reaches stage 3 rather than 4, and the open source contribution moves to the next cycle. The mature answer to the uncomfortable question is not "I won't fail" but something like: "I pick it back up the following Monday where I left off, and if I miss three weeks in a row, I cut the plan in half instead of abandoning it".
Conclusion
This is the end of the Software Design Patterns course. It began with a definition — a named solution to a recurring problem in a context — and that definition kept growing until it covered a restaurant's menu, an admin panel's undo, an order's lifecycle, a hexagonal architecture, and a distributed saga. PideYa was the mirror: every pattern stopped being a diagram the moment it had an order, a courier, or a payment behind it.
You take three things with you. A catalog: the twenty-three GoF patterns and their modern heirs, with their intents and their costs. Judgment: choose for the problem, wait until it hurts, always weigh the trade-off. And a vocabulary: the ability to say "Adapter", "Strategy", or "Circuit Breaker" and be understood by any team in the world. The catalog is consulted, the judgment is trained, and the vocabulary is conversed — which is why all three improve with the years instead of expiring.
The rest is practice: your real PideYa waiting for its first commit, the first book on your path, your local community, your 90 days. The patterns that don't exist yet you will learn in minutes, because you already know the intents.
Thank you for making it to the end. It has been a pleasure designing with you. Now go write code worth reading.
Software Design Patterns Course
Module 1: Introduction to Design Patterns
- What Are Design Patterns?
- History and Origin of Design Patterns
- Design Principles: SOLID and Other Foundations
- Essential UML for Understanding Patterns
- Classification of Design Patterns
- Advantages and Disadvantages of Using Design Patterns
Module 2: Creational Patterns
- Introduction to Creational Patterns
- Singleton
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Comparing and Choosing Creational Patterns
Module 3: Structural Patterns
- Introduction to Structural Patterns
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Comparing and Choosing Structural Patterns
Module 4: Behavioral Patterns
- Introduction to Behavioral Patterns
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
- Comparing and Choosing Behavioral Patterns
Module 5: Applying Design Patterns
- How to Select the Right Pattern
- Practical Examples of Pattern Usage
- Design Patterns in Real Projects
- Refactoring with Design Patterns
- Anti-Patterns: When Patterns Become a Problem
Module 6: Advanced Design Patterns
- Design Patterns in Modern Architectures
- Design Patterns in Microservices
- Design Patterns in Distributed Systems
- Concurrency Patterns
- Design Patterns in Agile Development
