A. Curriculum overview
This curriculum takes a learner from "I know OOP syntax" to being able to design an unfamiliar system by reasoning from requirements. It is built around one idea: patterns are introduced as solutions to problems the learner has already experienced.
| Item | Plan |
|---|---|
| Duration | 7 weeks |
| Phase 1 | Weeks 1 to 4: learning plus small implementations |
| Phase 2 | Weeks 5 to 7: interview practice plus larger implementations |
| Weekly time | About 10 hours |
| Total | About 70 hours |
| Lesson length | 10 to 25 minutes of theory, plus an exercise |
| Size | About 100 to 110 substantial lessons; the first 85 form the structured path, the rest are integration, refactoring and repeated application |
The progression
Programming / OOP
↓
Object Thinking
↓
Object Modeling
↓
Cohesion / Coupling
↓
SOLID + Design Principles
↓
Dependencies + Interfaces
↓
UML + Object Interactions
↓
Design Patterns
↓
Pattern Combinations
↓
Small Design Exercises
↓
Complete LLD Problems
↓
Refactoring
↓
Advanced Design Thinking
↓
Interview-ready Design
What makes this different from a typical LLD course
Patterns are introduced as solutions to problems the learner has already experienced, not as a catalog to memorize.
B. Phase 1: Foundations and design intuition (weeks 1 to 4)
Week 1: Object-oriented thinking
Goal: Move from "I know OOP syntax" to "I know how to think in objects."
Time: about 10 hours, 9 lessons.
Module 1: Classes, objects and responsibilities
| # | Lesson | Main outcome |
|---|---|---|
| 1 | What is LLD? | Understand object-level design vs HLD |
| 2 | Classes vs objects | Think in objects rather than data structures |
| 3 | State and behavior | Understand what belongs inside an object |
| 4 | Encapsulation | Hide implementation and protect invariants |
| 5 | Abstraction | Identify what clients actually need |
| 6 | Responsibility | Decide who should do what |
| 7 | Object collaboration | Understand objects working together |
| 8 | Cohesion and coupling | Recognize good vs bad object boundaries |
| 9 | Composition over inheritance | Learn the fundamental design preference |
Small exercises
BankAccount
ShoppingCart
User / Address
Order / OrderItem
Employee / Department
For each exercise, identify:
→ objects
→ state
→ behavior
→ responsibilities
→ collaborators
Critical exercise
Give the learner: "Design a shopping cart." Do not ask for code first. Ask:
What objects exist?
Who owns the items?
Who calculates total?
Who applies discount?
Who handles payment?
This starts developing the design questions the learner should eventually ask unprompted.
Week 2: Relationships and object modeling
Goal: Learn to convert requirements into an object model.
Time: about 10 hours, 9 lessons, plus the UML lessons (see section D).
Module 2: Modeling objects
| # | Lesson |
|---|---|
| 10 | Identifying entities |
| 11 | Identifying responsibilities |
| 12 | Identifying behaviors |
| 13 | Association |
| 14 | Aggregation vs composition |
| 15 | Inheritance |
| 16 | Dependency |
| 17 | Cardinality and multiplicity |
| 18 | Object lifecycle and state |
Worked example
Requirement:
A library has books. Members can borrow books. A book can be borrowed by one member at a time.
The learner should arrive at something like:
Library
|
├── Book
|
└── Member
Book
└── Borrowing
Member
└── Borrowing
Then ask:
Who owns Borrowing?
Who creates it?
Who ends it?
Where is the rule "one active borrower" enforced?
This moves the learner from class identification to responsibility assignment.
Exercises
- Library
- Deck of Cards
- Coffee Machine
- Vending Machine
These are deliberately introduced before the larger interview problems rather than dumped into an interview-question list.
Week 3: Design principles
Goal: Learn why designs become difficult to maintain.
Time: about 10 hours, 12 lessons.
Module 3: Principles
SOLID
| # | Lesson |
|---|---|
| 19 | Why design principles exist |
| 20 | Single Responsibility Principle |
| 21 | Open/Closed Principle |
| 22 | Liskov Substitution Principle |
| 23 | Interface Segregation Principle |
| 24 | Dependency Inversion Principle |
| 25 | SOLID refactoring workshop |
Supporting principles
| # | Lesson |
|---|---|
| 26 | DRY vs duplication |
| 27 | KISS, YAGNI and overengineering |
| 28 | Law of Demeter |
| 29 | High cohesion, low coupling |
| 30 | Program to interfaces |
Teaching format
Every principle follows the same path:
Problem
↓
Naive design
↓
Why it hurts
↓
Refactoring
↓
Principle
↓
Improved design
↓
When NOT to apply it
This is better than stating "SRP means one class should have one responsibility." The learner should experience the design pressure first.
Worked example
Bad design:
class OrderService {
createOrder()
calculateTax()
sendEmail()
generateInvoice()
saveToDatabase()
}
Then progressively ask: what changes independently?
Tax rules
Email provider
Invoice format
Database
Order logic
Now SRP becomes intuitive.
Week 4: Dependencies, interfaces and modeling
Goal: Understand how objects depend on one another and how to control those dependencies.
Time: about 10 hours, 9 lessons.
Module 4: Dependency management
| # | Lesson |
|---|---|
| 31 | What is a dependency? |
| 32 | Dependency direction |
| 33 | Interfaces as contracts |
| 34 | Dependency injection |
| 35 | Constructor injection |
| 36 | Inversion of control |
| 37 | Stable vs unstable dependencies |
| 38 | Dependency graphs |
| 39 | Breaking cyclic dependencies |
Java and Spring connection
Only now introduce:
@Service
@Component
@Repository
@Autowired
constructor injection
The learner should understand why Spring's dependency injection exists, rather than merely learning Spring annotations.
Practical exercise
Start with a class tied to a concrete implementation:
class OrderService {
private MySQLOrderRepository repository;
}
Introduce an interface:
interface OrderRepository {
save(Order order);
}
class MySQLOrderRepository implements OrderRepository {
}
Then inject it through the constructor:
class OrderService {
private final OrderRepository repository;
OrderService(OrderRepository repository) {
this.repository = repository;
}
}
Then discuss:
testability
dependency direction
substitution
coupling
interface ownership
Phase 1 integration project: Design a Notification System
At the end of week 4, do not jump straight into GoF patterns. Give one open-ended design exercise.
Requirements:
Send notification through:
→ Email
→ SMS
→ Push
Users can have notification preferences.
Different notification types may exist:
→ marketing
→ transaction
→ security
The learner must produce:
- Requirements
- Objects
- Responsibilities
- Relationships
- Interfaces
- Class diagram
- Sequence diagram
- Code
- Refactoring discussion
This combines the first four weeks.
Phase 1 outcome: a strong hold on fundamentals. The learner can take a small requirement and produce a reasonable object model.
C. Phase 2: Patterns and real LLD (weeks 5 to 7)
Patterns begin here. The sequencing is deliberate: patterns should not precede understanding of the underlying design problem.
Week 5: Design patterns
Goal: Understand patterns as reusable design solutions.
Time: about 10 hours.
Do not teach all 23 patterns equally.
Pattern tiers
| Tier | Depth | Patterns |
|---|---|---|
| 1 | Must know deeply | Strategy, Factory Method, Abstract Factory, Builder, Adapter, Decorator, Facade, Observer, State, Command, Chain of Responsibility, Template Method, Composite, Proxy |
| 2 | Should know | Singleton, Bridge, Iterator, Mediator, Memento, Flyweight |
| 3 | Awareness | Prototype, Visitor, Interpreter |
This prevents the common mistake of spending equal time on every GoF pattern.
Learning order
Start with behavioral patterns, not creational ones, because they solve the problems developers feel most directly.
Behavioral
| # | Pattern | Problem that motivates it |
|---|---|---|
| 40 | Strategy | A growing if paymentType == ... else if ... chain |
| 41 | State | Branching on order.status (CREATED, PAID, SHIPPED); teach Strategy vs State |
| 42 | Observer | Order completed must notify Email, SMS, Analytics and Inventory |
| 43 | Chain of Responsibility | Request passes through Auth, Validation, Rate Limit, then Business Logic |
| 44 | Command | Actions that need Undo, Queue, Retry and Audit |
| 45 | Template Method | Same algorithm, different steps |
Example for lesson 40, where the learner discovers Strategy:
PaymentStrategy
↑
┌──┴─────┐
Card UPI
Creational
| # | Pattern | Note |
|---|---|---|
| 46 | Factory Method | |
| 47 | Abstract Factory | |
| 48 | Builder | |
| 49 | Singleton | Teach primarily as a trade-off discussion, not a pattern to blindly implement |
Structural
| # | Pattern |
|---|---|
| 50 | Adapter |
| 51 | Decorator |
| 52 | Facade |
| 53 | Proxy |
| 54 | Composite |
| 55 | Bridge and Flyweight |
Pattern lesson structure
Every pattern article contains exactly this structure:
1. Problem
2. Naive solution
3. Why the naive solution breaks
4. Forces / trade-offs
5. Pattern
6. Object relationships
7. Implementation
8. Real-world example
9. When to use
10. When NOT to use
11. Recognition clues
12. Similar patterns
13. Small exercise
14. Recall questions
Week 6: Pattern combinations and complete LLD
Goal: Stop thinking in isolated patterns. Real systems frequently combine them.
Time: about 10 hours.
Module 5: Pattern combinations
| # | Combination | Example |
|---|---|---|
| 56 | Strategy + Factory | PaymentFactory creates a PaymentStrategy (UPI, Card, Wallet) |
| 57 | Observer + Mediator | |
| 58 | State + Strategy | |
| 59 | Decorator + Factory | |
| 60 | Adapter + Facade | |
| 61 | Command + Memento | |
| 62 | Chain of Responsibility + Strategy | |
| 63 | Composite + Visitor |
Every combination lesson follows:
Why one pattern isn't enough
↓
Responsibilities
↓
Object graph
↓
Interaction
↓
Trade-offs
Complete LLD problem progression
Do not make every problem a two-hour interview exercise. Each problem follows:
Understand
↓
Model
↓
Implement
↓
Refactor
↓
Extend
↓
Explain
Level 1: Beginner
| # | Problem | Focus |
|---|---|---|
| 64 | Tic-Tac-Toe | Objects, responsibilities, state, composition |
| 65 | Library Management | Relationships, ownership, object lifecycle |
| 66 | Vending Machine | State, encapsulation, State pattern |
| 67 | Parking Lot | Abstraction, Strategy, Factory, responsibility assignment |
Level 2: Intermediate
| # | Problem | Focus |
|---|---|---|
| 68 | ATM | State, Chain of Responsibility, interfaces |
| 69 | Elevator | State, Strategy, object collaboration |
| 70 | Coffee Machine | State, Factory, Strategy |
| 71 | Snake and Ladder | Domain modeling, composition, state |
| 72 | Deck of Cards | Composition, collections, responsibility |
Level 3: Advanced LLD
| # | Problem | Focus |
|---|---|---|
| 73 | Splitwise | Strategy, Factory, domain modeling, responsibility |
| 74 | Ride-Sharing Pricing | Strategy, Factory, Open/Closed |
| 75 | Movie Ticket Booking | Entities, state, concurrency discussion |
| 76 | Notification System | Strategy, Factory, Observer, preferences |
| 77 | Food Ordering System | State, Strategy, Factory, domain modeling |
| 78 | Payment System | Strategy, Factory, Adapter, dependency inversion |
Level 4: Design engineer
These are less about standard interview templates and more about genuine design ability.
| # | Problem | Focus |
|---|---|---|
| 79 | Rule Engine | Strategy, Composite, Chain of Responsibility, extensibility |
| 80 | Workflow Engine | State, Command, Strategy, object lifecycle |
| 81 | In-Memory Cache | Interfaces, eviction strategies, Strategy, thread safety |
| 82 | Rate Limiter | Strategy, state, dependency boundaries, thread safety |
| 83 | Job Scheduler | Command, Strategy, state, dependency management |
| 84 | Logging Framework | Chain of Responsibility, Factory, Strategy, Decorator |
| 85 | Plugin Architecture | Interfaces, dependency inversion, Factory, extensibility, dynamic behavior |
Week 7: Refactoring and advanced design thinking
Goal: Learn to evaluate and improve designs rather than simply create them.
Time: about 10 hours, plus mock interviews.
Refactoring is an essential part of the curriculum, not an optional appendix.
Module 6: Code smells
| # | Smell |
|---|---|
| 86 | God class / God object |
| 87 | Long method |
| 88 | Long parameter list |
| 89 | Primitive obsession |
| 90 | Feature envy |
| 91 | Shotgun surgery |
| 92 | Divergent change |
| 93 | Tight coupling |
| 94 | Inheritance abuse |
| 95 | Circular dependencies |
| 96 | Anemic domain model |
Each lesson follows:
Bad design
↓
Identify smell
↓
Why it happens
↓
Principle violated
↓
Refactoring
↓
Improved design
Module 7: Advanced design thinking
These lessons stay at the object and component level rather than turning into an HLD course.
| # | Lesson |
|---|---|
| 97 | Immutability |
| 98 | Thread safety in object design |
| 99 | State management |
| 100 | Extensibility without overengineering |
| 101 | Plugin architecture |
| 102 | Dependency boundaries |
| 103 | Value objects |
| 104 | Entities |
| 105 | Aggregates |
| 106 | Domain modeling basics |
| 107 | Ports and adapters |
| 108 | Testability and mockability |
| 109 | API and interface stability |
Phase 2 outcome: a strong hold on cross-implementation. The learner can meet an unfamiliar requirement and construct, explain, critique and evolve a design.
D. UML curriculum
UML is taught alongside design, not as a separate week of notation memorization. It is limited to the practical subset needed for LLD.
| Lesson | Topic | What the learner covers |
|---|---|---|
| UML-1 | Class diagrams | Class, attribute, method, visibility, inheritance, interface |
| UML-2 | Relationships | Association, aggregation, composition, dependency, multiplicity |
| UML-3 | Sequence diagrams | Actor, object, message, return, activation |
| UML-4 | Choosing the diagram | Which diagram answers which question |
How to choose:
- "What are the objects?" leads to a class diagram.
- "How do objects collaborate over time?" leads to a sequence diagram.
E. The requirement-to-design algorithm
This is the central mental model of ProgVale LLD. Every serious design exercise forces the learner through it, and it should appear repeatedly throughout the course.
1. Requirements
↓
2. Use cases
↓
3. Entities
↓
4. Responsibilities
↓
5. Relationships
↓
6. State
↓
7. Interfaces
↓
8. Changing behavior
↓
9. Abstractions
↓
10. Principles
↓
11. Patterns
↓
12. Object interactions
↓
13. Extensibility
↓
14. Trade-offs
↓
15. Code
↓
16. Refactor
The learner eventually should not ask, "Which pattern does this question require?" They should ask:
- What is changing?
- Who owns this behavior?
- What depends on what?
- Where is the coupling?
- What should be replaceable?
- Do I actually need an abstraction?
That is the real LLD skill.
F. Small design exercise bank
These exercises sit between theory and complete LLD problems. Each reinforces one specific concept rather than being an arbitrary interview question.
| Exercise | Primary concept |
|---|---|
| Logger | Dependency management, Singleton discussion |
| Notification System | Interfaces, polymorphism, Factory |
| Discount Engine | Strategy, OCP |
| Payment Method | Interface, polymorphism |
| Parking Fee Calculator | Strategy |
| File Parser | Factory, Strategy |
| Cache abstraction | Interface, Strategy |
| Retry mechanism | Strategy, Decorator |
| Notification Preferences | Modeling, encapsulation |
| Rule Engine | Composition, Strategy |
| Report Generator | Template Method |
| Authentication Provider | Adapter |
| Text Formatter | Decorator |
| Middleware pipeline | Chain of Responsibility |
G. The ProgVale lesson format
Every article follows one consistent template that fits the 10 to 25 minute format and the Learn, Practice, Recall, Apply, Integrate model.
Title: {Lesson Title}
Learning Objective
By the end of this lesson you should be able to...
Prerequisites
You should already understand...
The Problem
Start with a real design problem.
Concept
Explain the theory.
Example
Show a small Java or Python example.
Bad Design
Show the naive implementation.
Why It Is Bad
Explain the design consequences.
Better Design
Refactor.
Design Thinking
Explain how we arrived at the design.
Small Exercise
Implement...
Can You Explain?
1. ...
2. ...
3. ...
Can You Design?
Given...
Completion Criteria
You are done when you can...
Recall
Review this concept later.
H. Spaced learning architecture
This is where ProgVale can be better than a static LLD course. Concepts must not be learned once and then never seen again.
Avoid:
SRP → OCP → LSP → ISP → DIP → never seen again
Instead, resurface each principle across later work:
Learn SRP
↓
Small SRP exercise
↓
Parking Lot
↓
Notification System
↓
Splitwise
↓
Payment System
↓
Refactoring exercise
The same applies to patterns:
Strategy
↓
Discount Engine
↓
Parking Lot
↓
Payment System
↓
Ride Pricing
↓
Rule Engine
I. Dependency maps
Concept dependency graph
Programming Basics
│
▼
Classes & Objects
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Encapsulation Abstraction State
│ │ │
└──────┬──────┴──────┬──────┘
▼ ▼
Responsibilities Behavior
│ │
└──────┬──────┘
▼
Object Modeling
│
┌─────────────┼──────────────┐
▼ ▼ ▼
Relationships Cohesion Coupling
│ │ │
└─────────────┼──────────────┘
▼
Design Principles
│
┌──────┴──────┐
▼ ▼
SOLID DRY/KISS/YAGNI
│
▼
Interfaces / DI
│
▼
Dependency Direction
│
▼
Object Interaction
│
┌──────┴───────┐
▼ ▼
UML Design Process
│ │
└──────┬───────┘
▼
Design Problems
│
▼
Design Patterns
│
┌─────────┼─────────┐
▼ ▼ ▼
Creational Structural Behavioral
│ │ │
└─────────┼─────────┘
▼
Pattern Combinations
│
▼
Complete LLD
│
▼
Refactoring
│
▼
Advanced Design Thinking
│
▼
Interview Ready
│
▼
Strong LLD Engineer
Pattern dependency graph
Patterns have their own prerequisites. This is more educational than the usual Creational, Structural, Behavioral classification.
Interfaces → Polymorphism → Strategy → Factory → Strategy + Factory
Composition → Decorator → Decorator + Factory
Object collaboration → Observer → Mediator → Observer + Mediator
State modeling → State → State + Strategy
Request pipeline → Chain of Responsibility → Chain + Strategy
Actions as objects → Command → Command + Memento
Tree structures → Composite → Composite + Visitor
J. Priorities: what to know
Must know deeply
| Area | Topics |
|---|---|
| OOP | Encapsulation, abstraction, polymorphism, composition, interfaces, responsibilities, cohesion, coupling, object collaboration |
| Principles | SOLID, composition over inheritance, program to interfaces, dependency inversion, high cohesion and low coupling, KISS, YAGNI |
| Patterns | Strategy, Factory Method, Builder, Adapter, Decorator, Facade, Observer, State, Command, Chain of Responsibility, Composite, Template Method, Proxy |
| Design skills | Requirement decomposition, responsibility assignment, object modeling, dependency management, refactoring, trade-off analysis, extensibility, testability |
Should know
Abstract Factory, Singleton, Bridge, Mediator, Iterator, Memento, Flyweight, plugin architecture, value objects, entities, aggregates, hexagonal architecture.
Awareness
Prototype, Visitor, Interpreter. The learner should recognize these and understand their purpose, but should not spend disproportionate time memorizing implementations.
K. Time allocation and phase summary
70-hour allocation
| Area | Hours |
|---|---|
| OOP and object thinking | 7 |
| Object modeling | 7 |
| Design principles | 9 |
| Dependency management | 6 |
| UML | 3 |
| Design patterns | 13 |
| Pattern combinations | 4 |
| Small exercises | 6 |
| Complete LLD problems | 8 |
| Refactoring | 4 |
| Advanced design thinking | 3 |
| Total | 70 |
The allocation is intentionally weighted toward design thinking and application, rather than spending 25 hours memorizing GoF patterns.
Phase 1 vs Phase 2
| Phase | Weeks | Hours | Content | Outcome |
|---|---|---|---|---|
| 1 | 1 to 4 | 40 | Week 1: OOP and object thinking. Week 2: object modeling, relationships, UML. Week 3: SOLID and design principles. Week 4: dependencies, DI, integration project | Strong hold on fundamentals |
| 2 | 5 to 7 | 30 | Week 5: design patterns. Week 6: pattern combinations and complete LLD. Week 7: refactoring, advanced design, mock interviews | Strong hold on cross-implementation |
L. Interview progression
The learner moves through four stages. ProgVale should optimize for Stage 4.
| Stage | Level | Learner's statement |
|---|---|---|
| 1 | Beginner | "I know OOP and design patterns." |
| 2 | Interview ready | "I can solve Parking Lot, Splitwise, Elevator, etc." |
| 3 | Strong LLD | "I can design an unfamiliar system by reasoning from requirements." |
| 4 | Design engineer | "I can explain why this design is appropriate, what will change, what will break, and how I would evolve it." |
M. What typical LLD courses get wrong
1. They teach patterns too early
Typical course order:
OOP → Factory → Singleton → Builder → Adapter → ...
The learner knows the diagram but not when the problem actually requires the pattern. ProgVale uses this order instead:
problem → naive solution → pain → design principle → pattern
2. They confuse UML knowledge with design knowledge
Knowing the symbols (◇ ◆ △ →) does not make someone good at LLD. UML should communicate a design, not become the objective.
3. They teach SOLID as definitions
"Open/Closed Principle means software should be open for extension but closed for modification" teaches nothing on its own. Instead:
Add payment method
↓
Modify giant if/else
↓
Repeated regression
↓
Why is this happening?
↓
What should vary?
↓
Strategy
↓
OCP
4. They do not teach responsibility assignment
This is one of the biggest missing skills. A learner needs to repeatedly answer: who should own this behavior?
Who calculates parking fee?
ParkingLot?
Ticket?
Vehicle?
PricingStrategy?
ParkingSpot?
There is not always one universal answer. The learner must learn to reason about the trade-offs.
5. They do not teach when NOT to abstract
Bad LLD education teaches:
Interface → Abstract class → Factory → FactoryFactory
Good LLD teaches: do not create an abstraction until you have a reason. This connects directly to YAGNI, KISS and avoiding overengineering.
6. They do not teach refactoring
Most courses show the beautiful final design. Real engineers encounter:
legacy code → bad coupling → God class → unclear ownership → incremental refactoring
Refactoring therefore gets its own module, not a few interview tips.
7. They do not teach design evolution
The most important question is not "does this design work?" but "what happens when requirements change?" Every major ProgVale problem therefore has:
Version 1
↓
New requirement
↓
What breaks?
↓
Refactor
↓
Version 2
This is probably the single strongest differentiator to build into ProgVale.
N. The golden rule and the final target
The golden rule for every article
Every lesson should answer at least one of these questions:
- What problem does this solve?
- Why does the naive design fail?
- Who should own this behavior?
- What should change independently?
- What is coupled to what?
- Where should the abstraction live?
- Do we actually need a pattern?
- What happens when the requirement changes?
That turns the curriculum from a "23 design patterns plus 20 interview questions" course into an actual software design training system.
Final curriculum size
Target about 100 to 110 substantial lessons, not 150 or more tiny ones. The first 85 form the structured learning path; the remainder cover integration, refactoring, advanced design and repeated application. A learner doing 10 hours a week can complete the core path in 7 weeks, and ProgVale can keep resurfacing earlier concepts through spaced practice afterward.
The ultimate competency
New requirement
↓
What objects exist?
↓
Who owns each responsibility?
↓
How do they collaborate?
↓
What changes independently?
↓
Where is the coupling?
↓
Do I need an abstraction?
↓
Would a pattern actually help?
↓
What are the trade-offs?
↓
How will the design evolve?
That is the LLD skill ProgVale should teach: not the ability to reproduce a Parking Lot solution from memory.
Notes & links
Saved automatically.