React Ecosystem Overview
React Ecosystem Overview explains how React fits with routing, state, server data, forms, styling, testing, frameworks, backend APIs, cloud infrastructure, and production tooling.
React Ecosystem Overview
Learning Objectives
By the end of this lesson, you will be able to:
- Understand what the React ecosystem means.
- Understand the difference between React and the broader React ecosystem.
- Identify the major categories of React ecosystem tools.
- Understand React's role as the UI layer.
- Understand build tools such as Vite.
- Understand routing solutions.
- Understand state-management options.
- Understand server-state/data-fetching solutions.
- Understand form-management libraries.
- Understand styling approaches.
- Understand testing tools.
- Understand development and debugging tools.
- Understand frameworks built around React.
- Understand React Server Components at a high level.
- Understand how React fits into modern full-stack architecture.
- Select technologies based on requirements rather than popularity.
- Explain the React ecosystem confidently in interviews.
What Is the React Ecosystem?
React itself is primarily a library for building user interfaces.
But production applications need much more than UI components.
A real application may require:
UIRoutingState ManagementData FetchingFormsValidationAuthenticationStylingTestingBuild ToolsCode SplittingMonitoringDeploymentServer Rendering
React doesn't provide all of these as one built-in framework.
Instead, developers combine React with other technologies.
That collection is commonly called the:
React ecosystem
React vs React Ecosystem
Think of React as the center:
React│┌──────────────┼──────────────┐▼ ▼ ▼Routing State Forms│ │ │▼ ▼ ▼Data/API Styling Testing│ │ │└──────────────┼──────────────┘▼Applications
React provides the UI programming model.
The ecosystem provides the surrounding capabilities needed to build complete applications.
React Is Not the Entire Application
Suppose you're building:
TechLearningPro
A production learning platform might need:
React+Routing+Authentication+API communication+Server state+Forms+Validation+Styling+Testing+Build tooling+Deployment
React alone doesn't automatically solve all these problems.
This is why understanding the ecosystem is important.
Major React Ecosystem Categories
A useful mental model is:
REACT ECOSYSTEM│┌──────────────────────┼──────────────────────┐▼ ▼ ▼UI Routing Data│ │ │React Router FetchingComponents Navigation Caching│┌──────────────────────┼──────────────────────┐▼ ▼ ▼State Forms Styling│ │ │Local Validation CSSGlobal Submission CSS ModulesServer State TailwindUI Libraries┌──────────────────────┼──────────────────────┐▼ ▼ ▼Testing Tooling Frameworks│ │ │Unit Vite Next.jsIntegration TypeScript Remix/React RouterE2E ESLintBuild tools
We'll explore each category.
React Core
At the center is React itself.
The core concepts include:
ComponentsJSXPropsStateEventsHooksRenderingReconciliationContextEffects
For example:
function CourseCard({title}: {title: string;}) {return (<article><h2>{title}</h2></article>);}
React provides the programming model for this component.
React DOM
For browser applications, React works with the browser DOM through the React DOM package.
Typical application startup:
import {createRoot} from "react-dom/client";createRoot(document.getElementById("root")!).render(<App />);
Conceptually:
React Components↓React DOM↓Browser DOM
React Native
The React ecosystem extends beyond web development.
Meta Platforms maintains React and React Native.
React Native allows developers to use React concepts to build native mobile applications.
Conceptually:
React│┌────────┴────────┐▼ ▼React DOM React Native│ │▼ ▼Browser Mobile
The programming model is similar, but the rendering targets are different.
Build Tools
React applications need tooling to:
Transform codeBundle modulesOptimize assetsRun development serversSupport hot updatesBuild production bundles
One of the most popular modern choices is:
Vite
You have already studied Vite earlier in this course.
Vite
A typical React + Vite application looks like:
Developer↓npm run dev↓Vite Development Server↓React Application↓Browser
For production:
Source Code↓Vite Build↓Optimized Assets↓Deployment
Vite is primarily a build/development tool.
It isn't React itself.
TypeScript
Many professional React applications use:
TypeScript
instead of plain JavaScript.
Example:
interface Course {id: number;title: string;price: number;}function CourseCard({course}: {course: Course;}) {return (<h2>{course.title}</h2>);}
TypeScript provides:
Static type checkingBetter IDE supportSafer refactoringBetter API contractsImproved developer experience
React + TypeScript
A common enterprise stack is:
React+TypeScript+Vite
Conceptually:
React│├── UI│TypeScript│└── Type Safety│Vite│└── Build + Development
This combination is very common for client-side React applications.
Routing
React itself doesn't require a particular routing library.
A single-page application often needs:
/courses/courses/react/login/dashboard/profile/settings
Routing provides:
URL↓Route↓Component
React Router
One major routing solution is:
React Router
For example:
<Routepath="/courses"element={<Courses />}/>
Then:
/courses↓Courses component
Routing can also support:
Nested routesDynamic routesNavigationURL parametersLoadersActionsRoute-level error handling
Routing Architecture
A larger application might have:
Application│├── /login│├── /courses│ ├── /courses/react│ ├── /courses/java│ └── /courses/angular│├── /dashboard│└── /admin├── /admin/users└── /admin/reports
A router maps these URLs to UI.
Authentication and Route Protection
Enterprise applications often need:
AuthenticationAuthorizationProtected routesRole-based access
For example:
User↓Login↓Authenticated↓Dashboard
And:
Normal User↓/admin↓Access denied
Routing and backend authorization work together.
Remember:
Frontend route protection improves UX; backend authorization provides actual security.
State Management
React already provides local state:
const [count, setCount] =useState(0);
But larger applications may need shared state.
Examples:
Shopping cartUser preferencesComplex workflowsApplication configurationMulti-step processes
This creates the broader category:
State management
Different Types of State
Before selecting a state library, classify your state.
A useful model is:
APPLICATION STATE│┌───────────────────┼───────────────────┐▼ ▼ ▼UI/Local Shared Client Server State│ │ │Modal Cart API dataInput Theme CacheTab Preferences Queries
This classification prevents unnecessary state-management complexity.
Local State
Use React state for local concerns:
const [isOpen,setIsOpen] = useState(false);
Examples:
ModalDropdownInputTabLocal filter
Don't make these global automatically.
Context
React provides Context for sharing values through a component tree.
Examples:
ThemeLocaleAuthentication contextApplication configuration
Conceptually:
Provider↓Component↓Component↓Component↓Consumer
Context is useful but isn't automatically a replacement for every state-management solution.
Redux
One major state-management ecosystem is:
Redux
Redux provides a predictable centralized state-management model.
Conceptually:
Component↓Dispatch Action↓Redux Store↓Reducer↓New State↓UI
Redux Toolkit is the recommended modern approach for writing Redux applications.
Zustand
Another popular state-management option is:
Zustand
Its model is comparatively lightweight.
Conceptually:
Component↓Store↓State↓Component
It can be useful when you want shared client state without the structure of a larger Redux architecture.
Other State Solutions
The React ecosystem includes many approaches.
Examples include:
Redux ToolkitZustandJotaiMobXXStateContext + useReducer
The correct choice depends on:
State complexityTeam familiarityDebugging needsArchitectureApplication size
Don't Choose State Libraries by Popularity
A common mistake is:
This library is popular, so we should use it.
Instead ask:
What state do we have?Who needs it?How often does it change?Does it need persistence?Is it server state?Do we need complex transitions?
Architecture should drive the tool choice.
Server State
This is an especially important distinction.
Consider:
Courses from APIStudent profileOrdersNotificationsReports
These aren't necessarily "client state."
They are:
Server state
Server state has different requirements:
FetchingCachingRefetchingSynchronizationInvalidationRetriesLoadingErrorsPaginationRace conditions
This is why specialized data-fetching libraries are useful.
TanStack Query
One major solution is:
TanStack Query
It helps manage server state.
Conceptually:
Component↓useQuery()↓Query Cache↓API
The cache can help avoid unnecessary network requests and coordinate server data.
Server-State Architecture
Instead of:
Component↓useEffect↓fetch()↓setState()↓loading/error/data
repeated across many components, a server-state library can centralize common concerns.
Conceptually:
Component↓Query↓Cache├── Loading├── Error├── Data└── Refetch
This can significantly simplify complex applications.
Forms
Forms are another major ecosystem category.
A simple React form can use:
const [email,setEmail] = useState("");
But complex enterprise forms can involve:
50+ fieldsValidationNested fieldsDynamic fieldsConditional fieldsErrorsSubmissionResetDirty stateTouched state
At that point, form libraries can help.
React Hook Form
A popular option is:
React Hook Form
It provides tools for managing complex forms while reducing unnecessary rendering work.
Conceptually:
Form├── Registration├── Validation├── Errors├── Submission└── Reset
Validation
Forms often need schema validation.
A common ecosystem pattern is:
React Hook Form+Zod
For example:
const schema = z.object({email: z.string().email(),age: z.number().min(18)});
This creates a reusable validation model.
Styling Ecosystem
React doesn't force one styling solution.
Common approaches include:
Plain CSSCSS ModulesSassTailwind CSSCSS-in-JSComponent librariesDesign systems
Each has trade-offs.
CSS Modules
Example:
import styles from "./CourseCard.module.css";function CourseCard() {return (<article className={styles.card}>Course</article>);}
CSS Modules provide scoped class names.
Conceptually:
CourseCard.module.css↓Scoped Styles↓CourseCard
Tailwind CSS
Tailwind uses utility classes.
Example:
<buttonclassName="px-4py-2rounded">Save</button>
It can speed up UI development and provide consistent design tokens when configured properly.
Component Libraries
Instead of building every UI component from scratch, applications can use component libraries.
Examples include:
Material UIAnt DesignChakra UIRadix UIshadcn/ui
These can provide:
ButtonsDialogsTablesMenusFormsTabsTooltips
The choice should align with your design system and accessibility requirements.
Design Systems
Large organizations often create a design system.
Conceptually:
Design Tokens↓Components↓Patterns↓Applications
For example:
ButtonInputModalTableCardTypographyColorsSpacing
A design system improves consistency across multiple applications.
Testing Ecosystem
A production React application needs testing.
Common categories:
Unit TestingIntegration TestingEnd-to-End Testing
A typical ecosystem might include:
VitestTesting LibraryPlaywright
depending on the application.
Testing Library
React Testing Library encourages testing the application from the user's perspective.
Instead of asking:
"Was this internal function called?"
you ask:
"Can the user see the error message?""Can the user submit the form?""Does clicking Save update the UI?"
This generally produces more resilient tests.
Vitest
Vitest is a modern test runner commonly used with Vite-based applications.
Conceptually:
React Code↓Vitest↓Unit / Integration Tests
It integrates well with modern Vite projects.
Playwright
For end-to-end testing:
Playwright
can test actual browser interactions.
For example:
Open application↓Login↓Search React course↓Open course↓Enroll↓Verify confirmation
This tests the application from the user's perspective.
Developer Tools
React development benefits from:
React Developer ToolsBrowser DevToolsNetwork panelPerformance panelReact Profiler
These tools help investigate:
RenderingStatePropsNetworkPerformanceDOM
Linting
Linting helps identify code problems and enforce conventions.
A common tool is:
ESLint
It can identify issues such as:
Unused variablesInvalid patternsHook dependency problemsCode-quality issues
React applications commonly use React-specific lint rules as well.
Formatting
Teams often use:
Prettier
for consistent formatting.
Without formatting standards:
Developer ADeveloper BDeveloper C
may produce three different code styles.
With automated formatting:
Code↓Prettier↓Consistent formatting
This reduces unnecessary code-review discussions.
Git Hooks and CI
Professional applications may also use:
GitPre-commit hooksCI/CDAutomated testsLintingType checkingBuild verification
A typical pipeline:
Developer Push↓CI↓Install↓Lint↓Type Check↓Tests↓Build↓Deploy
Frameworks Around React
At some point you may ask:
If React is a UI library, who handles the rest?
This is where React frameworks come in.
A framework can provide:
RoutingServer RenderingData FetchingCode SplittingServer ComponentsBuild SystemDeployment Integration
Next.js
One of the most important React frameworks is:
Next.js
It provides a broader application framework around React.
Conceptually:
Next.js│┌────────────┼────────────┐▼ ▼ ▼React Routing Server│ │▼ ▼UI Rendering
Next.js can support:
Client ComponentsServer ComponentsServer RenderingStatic GenerationRoutingAPI/server capabilitiesCode splitting
React Router Framework Capabilities
Modern React Router also provides more than basic URL-to-component mapping.
Depending on the architecture, it can support:
RoutingData loadingActionsPending UIError boundariesServer rendering
This illustrates an important ecosystem trend:
React applications can range from simple client-side SPAs to full-stack React frameworks.
SPA vs Framework Architecture
Traditional client-side React application
Browser↓React↓API
Full-stack React framework
Browser↓React Framework├── Server├── Data├── Rendering└── Client UI
Neither is universally better.
The application requirements determine the right architecture.
Rendering Options in the React Ecosystem
Modern React applications can use different rendering strategies.
Client-side rendering
Browser↓JavaScript↓React↓UI
Server-side rendering
Request↓Server↓React↓HTML↓Browser
Static generation
Build↓Generate HTML↓Serve
Server Components
Server↓Server Component↓React Server Component payload↓Client
These approaches can be combined depending on the framework.
React Server Components
React Server Components introduce a different way of thinking about component execution.
Some components can execute on the server rather than being shipped as client-side JavaScript.
Conceptually:
Server├── Server Component│└── Data Access↓Output↓Client↓Client Components
This can reduce client-side JavaScript and allow server-side data access patterns.
Frameworks such as Next.js provide practical implementations around this model.
Authentication Ecosystem
React itself doesn't provide a complete authentication system.
Applications commonly integrate with:
OAuthOpenID ConnectJWT-based APIsIdentity providersSession-based authentication
Examples of identity providers and services include:
Auth0ClerkFirebase AuthenticationAWS CognitoMicrosoft Entra ID
The right solution depends heavily on the organization's infrastructure.
API Communication
React applications commonly communicate with backend APIs using:
fetch()AxiosGraphQL clientsTanStack QueryFramework data APIs
Simple application:
const response =await fetch("/api/courses");
Complex application:
Component↓Query layer↓Cache↓API client↓Backend
REST and React
A common enterprise architecture is:
React↓REST API↓Spring Boot↓Database
For example:
React↓GET /api/courses↓Spring Boot↓PostgreSQL
This is a very common frontend/backend separation.
GraphQL and React
Another architecture is:
React↓GraphQL Client↓GraphQL API↓Backend Services
GraphQL can allow clients to request structured data according to their needs.
Libraries such as Apollo Client are part of the broader ecosystem.
React + Microservices
In enterprise environments:
React↓API Gateway↓Microservices├── User Service├── Course Service├── Payment Service└── Notification Service
React doesn't need to know how those microservices are implemented.
It interacts with the API layer.
React + Spring Boot
For Java enterprise developers, a very common architecture is:
Browser│▼React│HTTPS│▼Spring Boot│┌────────────┼────────────┐▼ ▼ ▼Service Security Cache│▼Database
This is especially useful if you're transitioning from Java backend engineering into full-stack React.
React + Cloud
A modern architecture may look like:
User↓CDN↓React Application↓API Gateway↓Backend↓Cloud Services
Cloud platforms may provide:
CDNObject StorageServerless FunctionsDatabasesIdentityMonitoring
React is one layer within this larger architecture.
Observability
Production React applications should also consider:
Error trackingPerformance monitoringLoggingAnalyticsReal-user monitoring
Common tools/ecosystem options include:
SentryDatadogNew RelicOpenTelemetry-based systems
The exact solution depends on your organization's observability platform.
Internationalization
Applications serving multiple languages may need:
i18nLocalizationTranslationDate formattingCurrency formattingRTL support
Libraries such as:
react-i18nextFormatJS
are part of this ecosystem.
Animation
React applications can also use animation libraries.
Examples include:
CSS animationsWeb Animations APIMotionGSAP
For example:
Button↓Interaction↓Animation↓State transition
Use animation where it improves user experience rather than adding unnecessary visual complexity.
Mobile Ecosystem
React can also extend to mobile through React Native.
A broader architecture could be:
Shared Backend│┌─────────┼─────────┐▼ ▼ ▼Web Mobile Admin│ │ │React React ReactNative
This allows teams familiar with React to work across platforms.
The Ecosystem Is Not a Single Stack
This is important.
There is no universal:
"React Stack"
Instead, you might have:
Stack A
ReactViteReact RouterTanStack QueryZustandVitestPlaywright
Stack B
Next.jsReactTypeScriptServer ComponentsServer Actions
Stack C
ReactViteRedux ToolkitRESTReact Hook FormZodPlaywright
All can be valid depending on the requirements.
How to Choose the Right Tools
Use this decision model:
Requirement│▼What problem?│┌────────────────┼────────────────┐▼ ▼ ▼UI Routing Data│ │ │React React Router Query layer│▼Need server rendering?│┌──┴──┐Yes No│ │Framework Vite/SPA
Don't start with:
Which library is trending?
Start with:
What problem are we solving?
Example Technology Selection
Suppose you're building:
Internal employee dashboard
Requirements:
AuthenticationCRUDTablesFormsREST APIsNo SEO requirement
A reasonable architecture might be:
React+TypeScript+Vite+React Router+TanStack Query+React Hook Form+Zod
You may not need a full-stack React framework.
Example: Public E-Commerce Site
Requirements:
SEOProduct pagesServer renderingDynamic routesPaymentsLarge catalog
A framework-oriented React architecture may be more appropriate:
Next.js+React+TypeScript+Server/Client Components+Query/data layer+Payment integration
The requirements drive the architecture.
Example: Enterprise Admin Portal
Requirements:
Large formsComplex workflowsRole-based accessTablesReportsInternal users
Possible architecture:
ReactTypeScriptViteReact RouterTanStack QueryReact Hook FormZodComponent LibraryTesting LibraryPlaywright
Again, this is an example, not a mandatory stack.
Ecosystem Layers
A very useful senior-level model is:
┌──────────────────────────────────────┐│ Product │├──────────────────────────────── ──────┤│ UI / Components / Design System │├──────────────────────────────────────┤│ React │├──────────────────────────────────────┤│ Routing / State / Data / Forms │├──────────────────────────────────────┤│ Build / TypeScript / Testing │├──────────────────────────────────────┤│ Browser / Web Platform │├──────────────────────────────────────┤│ Backend / APIs / Database / Cloud │└──────────────────────────────────────┘
React is an important layer, but not the entire architecture.
Browser APIs Are Also Part of the Ecosystem
Don't forget the platform itself.
React applications use:
Fetch APIWeb StorageWebSocketsService WorkersNotificationsWeb WorkersIntersection ObserverHistory APIURL API
You don't need a library for everything.
Sometimes the browser already provides the required capability.
Web Platform First
Before installing a library, ask:
Can the browser platform already solve this problem well?
For example:
fetch()URLSearchParamslocalStorageAbortControllerIntersectionObserverWebSocket
Using platform APIs can reduce dependency complexity.
Avoid Ecosystem Overload
A project can become difficult when it has:
ReactReduxZustandMobXJotaiReact QueryApolloAxiosSWRFormikReact Hook FormThree UI libraries
all at once without clear boundaries.
Every dependency adds:
Learning costUpgrade costBundle considerationsMaintenanceSecurity considerations
A mature architecture chooses deliberately.
Dependency Decision Framework
Before adding a dependency:
1. What problem does it solve?2. Can React solve it?3. Can the browser solve it?4. Can existing project dependencies solve it?5. How mature is the library?6. How active is maintenance?7. What is the bundle/runtime cost?8. Does it fit the team's architecture?9. How easy is it to test?10. What happens if we remove it later?
This is a strong engineering habit.
React Ecosystem Evolution
The ecosystem has evolved from:
React↓React + Router↓React + State Libraries↓React + Build Tools↓React Frameworks↓Server Components↓Full-stack React architectures
The modern ecosystem is increasingly concerned with:
Server/client boundariesData fetchingCachingRendering strategiesPerformanceDeveloper experience
What Should a React Developer Know?
You don't need to memorize every library.
You should understand the categories:
ReactTypeScriptBuild toolingRoutingState managementServer stateFormsStylingTestingFrameworksAuthenticationAPI integrationPerformanceAccessibilitySecurityDeployment
Then you can learn the specific tool required by the project.
Interview questions & answers
Interview preparation
7 questions grouped by difficulty — expand any card for a model answer and follow-up probe.
Beginner
1What Is the React Ecosystem?
BeginnerModel answer
React itself mainly provides the UI component and rendering model.
js.
I don't treat the ecosystem as one fixed stack.
I choose tools based on the application's requirements.
2Why Use TypeScript With React?
BeginnerModel answer
TypeScript gives us compile-time type checking, better IDE support, safer refactoring, and stronger contracts between components and APIs.
In large React applications, those benefits become particularly valuable because many developers are working across a large component and data model.
Intermediate
3What Is the Difference Between React and Next.js?
IntermediateModel answer
js is a broader framework built around React that provides capabilities such as routing, server rendering, server components, code splitting, and other application-level features.
If I need a client-side SPA, React with Vite may be sufficient.
js.
4Why Use TanStack Query?
IntermediateModel answer
I use TanStack Query when the application has significant server state.
It provides capabilities around fetching, caching, synchronization, retries, invalidation, and loading/error states.
That avoids repeatedly implementing the same asynchronous data-management logic with local state and Effects.
5Redux vs Context: How Do They Differ?
IntermediateModel answer
Context and Redux solve related but different problems.
Context is primarily a mechanism for making values available through a component tree.
Redux provides a more structured state-management architecture with centralized state, actions, reducers, middleware, and developer tooling.
For simple shared values, Context may be sufficient.
For complex application state, Redux Toolkit may provide better structure.
6What Is the Difference Between Vite and Next.js?
IntermediateModel answer
js is an application framework built around React.
Vite is a strong choice when I'm building a client-side React application and want control over the application architecture.
js provides more integrated capabilities such as routing, server rendering, server components, and server-side functionality.
Advanced
7How Would You Choose Technologies for a New React Project?
AdvancedModel answer
I'd first clarify the application's requirements: whether it needs SEO, server rendering, authentication, complex client state, server-state caching, forms, real-time communication, and expected scale.
js is more appropriate.
Then I'd select routing, data-fetching, state, form, styling, and testing tools only where the requirements justify them.
This demonstrates architectural maturity because it starts with requirements instead of immediately listing libraries.
React Ecosystem Decision Matrix
| Requirement | Possible Solution |
|---|---|
| UI | React |
| Type safety | TypeScript |
| Development/build | Vite |
| Routing | React Router |
| Server rendering/full-stack | Next.js / React framework |
| Local state | React state |
| Shared state | Context / state library |
| Complex client state | Redux Toolkit / Zustand / others |
| Server state | TanStack Query / framework data APIs |
| Forms | React Hook Form |
| Validation | Zod / other schema validators |
| Styling | CSS / CSS Modules / Tailwind |
| Components | MUI / Ant / Radix / other systems |
| Unit testing | Vitest |
| UI testing | Testing Library |
| E2E | Playwright |
| Linting | ESLint |
| Formatting | Prettier |
| Error monitoring | Sentry / observability platform |
These are options, not mandatory dependencies.
Final Architecture Example
For a large production learning platform:
USER│▼Browser / CDN│▼React Application│┌─────────────────┼─────────────────┐▼ ▼ ▼Routing Components Design System│ │▼ ▼URL State Local State│Shared State│Server State│▼API Layer│▼Backend Services┌─────┼─────┐▼ ▼ ▼Auth Courses Payments│▼Database
Supporting the whole system:
TypeScriptTestingCI/CDObservabilitySecurityAccessibilityPerformance
The Most Important Ecosystem Mental Model
Remember:
REACT│┌────────────────┼─────────────── ─┐│ │ │▼ ▼ ▼UI Rendering Components│└────────────────┬────────────────┘│APPLICATION REQUIREMENTS│┌─────────┬───────┼───────┬─────────┐▼ ▼ ▼ ▼ ▼Routing State Data Forms Styling│ │ │ │ │└─────────┴───────┼───────┴─────────┘▼TOOLING│┌───────────┼───────────┐▼ ▼ ▼Vite TypeScript Testing│▼FRAMEWORK│Next.js / etc.│▼BACKEND│▼CLOUD / DB
Final Senior-Level Mental Model
When someone says:
I'm a React developer.
A strong engineer doesn't think only about:
JSXuseStateuseEffect
They think across the complete system:
PRODUCT│┌────────────┴────────────┐▼ ▼FRONTEND BACKEND│ │React APIs│ │┌──────┼────────┐ │▼ ▼ ▼ ▼UI State Data Services│ │ │ │▼ ▼ ▼ ▼Router Context Query Database│ │ │└──────┼────────┘▼TypeScript│▼Vite /React Framework│▼Testing│▼CI/CD + Cloud│▼Security + Accessibility+ Performance + Observability
The real skill is not knowing every React ecosystem library.
The real skill is knowing:
What problem each category solves, when you need it, when you don't need it, and how the pieces fit together into a maintainable production architecture.