Study smarter with Fiveable
Get study guides, practice questions, and cheatsheets for all your subjects. Join 500,000+ students with a 96% pass rate.
Software architecture isn't just about organizing code—it's about making strategic design decisions that determine how your application will scale, evolve, and survive in production. When you're tested on architecture styles, you're being evaluated on your ability to match business requirements, scalability needs, and team capabilities to the right structural approach. The architecture you choose on day one will ripple through every sprint, deployment, and maintenance cycle that follows.
Each style in this guide represents a different answer to fundamental questions: How should components communicate? Where does complexity live? What trade-offs are we willing to accept? Don't just memorize definitions—know what problem each architecture solves, what trade-offs it introduces, and when you'd choose one over another. That's the thinking that separates strategic designers from coders who just follow patterns.
These architectures keep your application together as a cohesive whole. The core principle: simplicity through integration, with trade-offs in flexibility and scaling.
Compare: Monolithic vs. Layered—both deploy as a single unit, but Layered enforces internal boundaries that Monolithic doesn't require. If an exam question asks about "improving maintainability without changing deployment strategy," Layered is your answer.
These architectures break applications into separate, communicating services. The core principle: independence and flexibility through distribution, with trade-offs in operational complexity.
Compare: SOA vs. Microservices—both distribute functionality across services, but SOA emphasizes enterprise-wide reuse and orchestration while Microservices prioritize team independence and bounded contexts. Microservices typically result in smaller, more numerous services with decentralized governance.
These styles define how data and control flow between components. The core principle: the communication pattern itself becomes the organizing structure.
Compare: Event-Driven vs. Pipe and Filter—both handle data flow, but Event-Driven responds to discrete occurrences asynchronously while Pipe and Filter processes continuous data streams sequentially. Choose Event-Driven for reactive systems, Pipe and Filter for batch transformations.
These architectures focus on how individual pieces of your application are structured and interact. The core principle: modularity through clear boundaries and defined interfaces.
Compare: MVC vs. Component-Based—MVC prescribes a specific three-part separation for UI applications, while Component-Based is a broader principle applicable at any level of abstraction. MVC components follow fixed roles; Component-Based components can encapsulate anything.
These styles eliminate central control points entirely. The core principle: resilience and resource sharing through distributed ownership.
Compare: Client-Server vs. P2P—Client-Server centralizes control and simplifies security but creates bottlenecks and single points of failure. P2P distributes load and improves resilience but sacrifices centralized control. Choose based on whether you need governance or resilience more.
| Concept | Best Examples |
|---|---|
| Simplicity & Fast Initial Development | Monolithic, Layered |
| Independent Scaling & Deployment | Microservices, Client-Server |
| Enterprise Integration & Reuse | SOA, Component-Based |
| Real-Time & Asynchronous Processing | Event-Driven, Pipe and Filter |
| UI/Logic Separation | MVC, Layered |
| Data Transformation Pipelines | Pipe and Filter |
| Decentralized Resilience | P2P |
| Team Autonomy & Continuous Delivery | Microservices |
Which two architectures both organize code into separate concerns but differ in whether those concerns deploy together or independently? What's the key trade-off between them?
A startup needs to launch quickly with a small team, but expects to scale rapidly if successful. Compare the risks of starting with Monolithic vs. Microservices architecture.
You're designing a system that must process millions of log entries daily, transforming and aggregating data before storage. Which architecture style is most appropriate and why?
Both SOA and Microservices distribute functionality across services. If an FRQ asks you to recommend one for a large enterprise integrating legacy systems vs. a greenfield project with autonomous teams, which would you choose for each and why?
Identify which architecture style best addresses each requirement: (a) eliminating single points of failure, (b) enabling real-time notifications, (c) allowing frontend and backend teams to work independently on a web application.