Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the 'God Object' anti-pattern?
The 'God Object' anti-pattern occurs when a single class or module tries to handle too many responsibilities, making it large, complex, and hard to maintain.
Click to reveal answer
beginner
Why should 'Spaghetti Code' be avoided in system design?
'Spaghetti Code' refers to code with tangled and unstructured flow, making it difficult to understand, debug, and extend, leading to poor maintainability.
Click to reveal answer
intermediate
Explain the 'Golden Hammer' anti-pattern.
The 'Golden Hammer' anti-pattern happens when a familiar tool or solution is overused for all problems, even when it's not the best fit, limiting flexibility and effectiveness.
Click to reveal answer
intermediate
What problems arise from the 'Not Invented Here' syndrome?
'Not Invented Here' syndrome is when teams avoid using existing solutions and prefer building their own, causing wasted effort, delays, and potentially lower quality.
Click to reveal answer
beginner
Describe the 'Premature Optimization' anti-pattern.
'Premature Optimization' is when developers focus on improving performance too early, before understanding real bottlenecks, which can waste time and complicate design unnecessarily.
Click to reveal answer
Which anti-pattern involves a single class handling too many tasks?
AGolden Hammer
BSpaghetti Code
CGod Object
DNot Invented Here
✗ Incorrect
The God Object anti-pattern is when one class or module takes on too many responsibilities.
What is a key risk of the 'Golden Hammer' anti-pattern?
AAvoiding existing solutions
BWriting tangled and unstructured code
COptimizing too early
DUsing the wrong tool for every problem
✗ Incorrect
Golden Hammer means overusing a familiar tool even when it's not suitable.
Which anti-pattern describes tangled, hard-to-follow code?
ASpaghetti Code
BGod Object
CPremature Optimization
DNot Invented Here
✗ Incorrect
Spaghetti Code is tangled and unstructured, making it hard to maintain.
What does the 'Not Invented Here' syndrome cause?
AUsing too many tools
BAvoiding existing solutions and building new ones unnecessarily
CWriting large classes
DOptimizing before measuring
✗ Incorrect
Not Invented Here means rejecting existing solutions and reinventing the wheel.
Why is 'Premature Optimization' harmful?
AIt wastes effort on performance before knowing real issues
BIt causes code to be tangled
CIt leads to large classes
DIt avoids using existing tools
✗ Incorrect
Premature Optimization wastes time optimizing before identifying real bottlenecks.
List and explain three common anti-patterns to avoid in system design.
Think about problems caused by too much responsibility, tangled code, and early optimization.
You got /3 concepts.
Describe how the 'Not Invented Here' syndrome can impact a software project.
Consider team behavior and reuse of tools.
You got /3 concepts.
Practice
(1/5)
1. Which of the following best describes the God Object anti-pattern in system design?
easy
A. Separating data storage and business logic into different layers.
B. A system design where components are loosely connected and communicate via events.
C. A single component that handles too many responsibilities, making the system hard to maintain.
D. Using multiple small services to handle different tasks independently.
Solution
Step 1: Understand the God Object concept and compare options
The God Object anti-pattern occurs when one component or class takes on too many responsibilities, leading to complex, hard-to-maintain code. A single component that handles too many responsibilities, making the system hard to maintain. matches this description exactly, while others describe good design practices.
Final Answer:
A single component that handles too many responsibilities, making the system hard to maintain. -> Option C
Quick Check:
God Object = Single overloaded component [OK]
Hint: God Object means one part does too much [OK]
Common Mistakes:
Confusing God Object with microservices
Thinking God Object is a good modular design
Mixing God Object with event-driven architecture
2. Which of the following is an example of a hardcoding anti-pattern in system design?
easy
A. Storing configuration values directly inside the source code.
B. Using environment variables for configuration.
C. Separating configuration into external files.
D. Using feature flags to toggle functionality.
Solution
Step 1: Identify what hardcoding means and match options
Hardcoding means embedding fixed values directly in the code, making changes difficult and error-prone. Storing configuration values directly inside the source code. shows storing config inside code, which is hardcoding. Others are best practices.
Final Answer:
Storing configuration values directly inside the source code. -> Option A
Quick Check:
Hardcoding = fixed values in code [OK]
Hint: Hardcoding means fixed values inside code [OK]
Common Mistakes:
Confusing hardcoding with using environment variables
Thinking external config files are hardcoding
Mixing feature flags with hardcoding
3. Consider a system where all modules directly access a single shared database without any abstraction layer. What is the main anti-pattern here?
medium
A. Tight Coupling
B. God Object
C. Spaghetti Architecture
D. Event-Driven Design
Solution
Step 1: Analyze direct database access and identify the anti-pattern
When modules directly access the database without abstraction, they become tightly coupled to the database schema. Tight Coupling means components depend heavily on each other, reducing flexibility and increasing maintenance difficulty.
Final Answer:
Tight Coupling -> Option A
Quick Check:
Direct DB access = Tight Coupling [OK]
Hint: Direct DB access causes tight coupling [OK]
Common Mistakes:
Confusing tight coupling with God Object
Thinking event-driven design fits here
Mixing spaghetti architecture with tight coupling
4. You find a system where many components are tightly interconnected with complex dependencies, making it hard to change one without breaking others. What anti-pattern is this, and how can you fix it?
medium
A. God Object; merge all components into one big class.
B. Spaghetti Architecture; refactor to modular design with clear interfaces.
C. Hardcoding; move all values into source code.
D. Tight Coupling; remove all interfaces and use direct calls.
Solution
Step 1: Identify the anti-pattern from description and determine the fix
Complex interdependencies causing fragility is typical of Spaghetti Architecture. Refactoring to modular design with clear interfaces reduces dependencies and improves maintainability.
Final Answer:
Spaghetti Architecture; refactor to modular design with clear interfaces. -> Option B
5. A startup built a monolithic system with many hardcoded values and a God Object managing most logic. They want to scale and maintain it easily. What is the best approach to fix these anti-patterns?
hard
A. Ignore scalability and focus only on adding new features.
B. Keep the monolith but add more hardcoded values for speed.
C. Merge all logic into one bigger God Object for simplicity.
D. Refactor into microservices, externalize configuration, and split responsibilities into smaller components.
Solution
Step 1: Identify problems in current system and choose best solution to fix anti-patterns
Monolith with hardcoded values and God Object causes poor scalability and maintainability. Refactoring into microservices splits responsibilities, externalizing config removes hardcoding, improving scalability and maintainability.
Final Answer:
Refactor into microservices, externalize configuration, and split responsibilities into smaller components. -> Option D