OOP & design: DI / IoC · SOLID · singleton · observer · factory · repository · facade
0 / 10 completed
1 / 10
In software architecture, what is the key characteristic of a monolith?
A monolith (monolithic architecture) is a single deployable unit — all features (auth, payments, notifications, business logic) live in one codebase and are deployed together. Pros: simpler to develop initially, no network latency between components, easier to debug. Cons: as it grows — harder to scale individual parts, long build/deploy cycles, tight coupling. Compare with microservices: each business capability is a separate, independently deployable service. A common career path is "monolith first, then extract services when pain points emerge." Key vocabulary: modular monolith (well-structured monolith with clear module boundaries — a good middle ground), big ball of mud (unstructured, tangled monolith — the anti-pattern to avoid).
2 / 10
What does CQRS stand for, and what problem does it solve?
CQRS (Command Query Responsibility Segregation) is an architectural pattern that separates the way you write data (commands) from the way you read it (queries). Why useful: your read model can be highly optimized for display (denormalized, pre-joined, fast) while your write model validates business rules and ensures consistency. Example: an e-commerce order write model applies complex inventory and payment logic; the read model is a precomputed "order summary" view for fast page loads. Often paired with Event Sourcing (storing every state change as an immutable event, then replaying events to rebuild state). Key vocabulary: command (mutates state — "PlaceOrder"), query (reads state — "GetOrderById"), projection (a read-optimized view rebuilt from events), event store.
3 / 10
What is a circuit breaker in distributed systems?
The circuit breaker pattern (from Michael Nygard's Release It!) protects a system from calling a service that is likely to fail. States: Closed (normal — calls pass through), Open (too many failures detected — calls are blocked and a fallback is returned immediately), Half-Open (after a timeout, one test call is allowed to check if the service has recovered). Why critical in microservices: one slow service can exhaust all threads in caller services, causing cascading failures. Circuit breaker fails fast and returns a fallback (cached data, default value, or error message). Tools: Resilience4j (Java), Polly (.NET), Hystrix (Netflix, now mostly retired). Related: retry with backoff, bulkhead, timeout.
4 / 10
Complete with the correct architecture term: "We need to decouple the email service from the order service so that a slow email provider doesn't block order processing. Let's use an event _____ — the order service publishes an OrderPlaced event, and the email service subscribes to it asynchronously."
An event bus (or message bus) is a communication mechanism that lets services publish events and other services subscribe to them without the publisher knowing who is listening. This is the foundation of event-driven architecture. The order service publishes → the bus holds the event → email service, analytics service, inventory service each consume it independently. Key vocabulary: publisher (produces events), subscriber/consumer (reacts to events), topic (category of event), queue (storage for unprocessed messages), broker (infrastructure — Kafka, RabbitMQ, AWS SNS/SQS). Benefits: loose coupling, independent scaling, resilience. Trade-offs: harder to trace a request end-to-end, eventual consistency instead of immediate.
5 / 10
What is Dependency Injection (DI)?
Dependency Injection (DI) means that a class receives its dependencies (the objects it needs to work) from an external source — typically a DI container or a calling context — rather than instantiating them with new. Why it matters: it makes code more testable (you can inject a mock instead of a real database), more flexible (swap implementations without changing the consumer), and easier to reason about (dependencies are explicit). DI is a specific form of Inversion of Control (IoC) — the class no longer controls how its dependencies are created (control is inverted to the container/caller). Example: a UserService receives an IEmailService interface via its constructor — in production you inject a real SMTP client; in tests you inject a mock. Frameworks: Spring (Java), ASP.NET Core DI, Angular DI, NestJS.
6 / 10
Reviewer: 'This service exposes a direct database connection. That's not ideal for scalability. Consider using an ORM to abstract the data access layer.' What architectural pattern is the reviewer suggesting?
The reviewer is advocating for a Microservices architecture by recommending abstraction of data access. This aligns with the core principle of isolating services and reducing dependencies, which are hallmarks of this pattern. An ORM provides that abstraction, separating the service's logic from specific database implementations.
7 / 10
DevOps Engineer (Sarah): 'Hey team, we're seeing intermittent latency spikes when pulling data from the analytics microservice. It might be a resource contention issue – let's investigate.' Which architectural concept is Sarah primarily addressing?
Sarah's message points to potential resource contention, a common symptom of poorly designed distributed systems. The Circuit Breaker pattern is specifically designed to handle these situations by temporarily stopping requests to failing services and preventing cascading failures – this is the core problem she's highlighting.
8 / 10
Developer (Ben): 'Implemented a new feature that allows users to upload profile pictures. Added a file validation step using AWS S3. Using the File Upload event to trigger user notification services. This improves system resilience and reduces load on the main application.' Which architectural style does Ben's description best represent?
Ben's description clearly outlines a system built with distinct layers – the presentation layer (profile picture upload), data access layer (AWS S3), and business logic layer (event triggering). This layered approach is characteristic of a Layered Architecture, where each layer has a specific responsibility. The use of events also supports this style.
9 / 10
Team Lead (Maria): 'David, you've been working on integrating the new payment gateway. It's proving to be quite complex with several external APIs and data transformations. We need a strategy to manage these dependencies effectively.' What architectural principle is Maria implicitly asking David to consider?
Maria's comment highlights the complexity of integrating with multiple external APIs. Loose Coupling is the key architectural principle to address this – it means minimizing dependencies between services, making each service more independent and easier to manage, which would alleviate David's difficulties.
10 / 10
API Response: `{"status": "200", "data": {"user_id": 123, "email": "john.doe@example.com", "subscription_tier": "premium"}}`. In the context of microservices, what architectural pattern is this response most likely associated with?
This API response represents a standard Request/Response interaction between two services. The service sending the request (e.g., user management) is providing data to another service (e.g., billing). This pattern is fundamental to microservices communication.
What does the "Software Architecture Vocabulary" vocabulary exercise cover?
This exercise tests real IT vocabulary related to software architecture vocabulary through 10 multiple-choice questions, each built from realistic workplace sentences rather than abstract definitions.
Is this vocabulary exercise free to use?
Yes. Every exercise on CoderSlingo, including this one, is completely free — no account, sign-up, or payment required.
How many questions does this exercise have?
This exercise has 10 questions. Each one shows a real-world sentence or scenario with multiple-choice options and an explanation once you answer.
What happens after I answer a question?
You'll see immediate feedback showing whether your answer was correct, along with a short explanation of why — then a button to move to the next question, and a full results screen at the end.
Can I retry the exercise if I get questions wrong?
Yes. Once you reach the results screen, click "Try again" to reset your answers and go through the exercise from the start as many times as you like.
Do I need to create an account to take this exercise?
No account is needed. Your answers are scored in your browser during the session — nothing is saved to a server, so you can jump straight in.
Is my progress saved if I leave the page?
No — progress within an exercise resets if you navigate away or reload. Each exercise is short enough to complete in a few minutes in one sitting.
Are these vocabulary exercises connected to other topics?
Yes — this module shares real-world context with 1 other vocabulary module. See "Related vocabulary" below to keep building a connected skill set.
How is this different from reading a glossary or blog article?
Exercises like this one are active recall drills — you have to choose the correct term or phrasing yourself, which builds retention faster than passively reading a definition.
Where can I find more vocabulary exercises?
Browse the full Vocabulary exercises hub for hundreds of modules covering Agile, DevOps, security, databases, architecture, and more — organised by IT role and skill.