What is Low-Level Design?
Desirable Outcomes / Design Goals of LLD
1️⃣ Maintainability
Your code should be easy to understand, modify, and extend
- Use meaningful names, small focused classes/methods.
- Follow SOLID principles and clean code practices.
- Makes it easy for new developers to contribute.
2️⃣ Extensibility
The system should allow adding new features with minimal code changes.
- Achieved through abstraction and interfaces.
- Example: Add a new payment method without touching core logic.
3️⃣ Readability
Anyone reading the code should easily understand its purpose.
- Helps with debugging, code reviews, and onboarding.
- Proper formatting, naming conventions, and comments are key.
4️⃣ Testability
Your design should allow for writing unit tests and integration tests easily.
- Favor dependency injection.
- Decouple components so you can test them in isolation.
5️⃣ Reusability
Common functionality should be reusable across modules.
- Use design patterns like Strategy, Factory, etc.
- Avoid duplication; extract reusable logic into utility/helper classes.
6️⃣ Modularity
Design should be broken into small, independent, and focused components.
- Follows the Single Responsibility Principle.
- Easy to isolate bugs, update modules, or replace them.
7️⃣ Low Coupling and High Cohesion
- Low Coupling: Modules are independent.
- High Cohesion: Each class has a clear, focused responsibility.