skip to content

Software Architecture

Architecture is the set of decisions that are expensive to reverse, and this area is about making, recording, evaluating and evolving them. Interviews at senior level lean here because they want to hear how you justify a structure against quality attributes rather than fashion.

part ofSoftware design & architectureoverview, primer and where to startread it →
on this pageshow

explore

questions

128 · 4 sections

What is Conway's Law, and what does it predict about the relationship between an organization's communication structure and the systems it builds?

level: juniorimportance: must knowfreq 72%
basics
~20 s

Conway's Law says a system's structure ends up mirroring how the teams that built it communicate. Four teams building a compiler tend to produce a four-pass compiler, because each team's boundary becomes an interface in the software.

open as a page

What is a quality attribute (non-functional requirement) in software architecture, and how does it differ from a functional requirement?

level: juniorimportance: must knowfreq 78%
basics
~20 s

A functional requirement says WHAT the system does ("users can reset a password"). A quality attribute says HOW WELL it does it — fast, available, secure, maintainable. Quality attributes shape the architecture; functions can usually be implemented in many architectures.

open as a page

What makes a design decision architecturally significant rather than a routine implementation choice?

level: juniorimportance: must knowfreq 75%
basics
~20 s

A decision is architecturally significant when it is expensive to change later, affects many parts of the system or many teams, and drives qualities such as performance, security or availability. Routine choices are local and cheap to reverse.

open as a page

In software architecture, what is an architectural style (such as layered, event-driven, or microservices), and how does it differ from a design pattern?

level: juniorimportance: must knowfreq 62%
basics
~20 s

An architectural style is a named, whole-system shape — how the big pieces are split and how they talk (layered, event-driven, microservices). A design pattern is a small, local solution inside one piece (e.g. Strategy, Observer). Style = macro, pattern = micro.

open as a page

What is a "north-star" (target) architecture vision, and how does it differ from the current-state architecture?

level: juniorimportance: must knowfreq 62%
basics
~20 s

The north-star is the agreed target architecture: a picture of the desired future state and why it is better. Current-state is what actually runs today. The gap between them drives a roadmap of incremental steps.

open as a page

What is an Architecture Decision Record (ADR), and what are the four core sections of Michael Nygard's classic ADR template?

level: juniorimportance: must knowfreq 68%
basics
~20 s

An ADR is a short document recording one significant architecture decision and why it was made. Nygard's template has four sections: Context (the forces at play), Decision (what we chose), Status (proposed/accepted/superseded), and Consequences (what results, good and bad).

open as a page

In Simon Brown's C4 model for describing software architecture, what are the four levels of diagram, and what does each level show?

level: juniorimportance: must knowfreq 72%
basics
~20 s

C4 is four zoom levels. Context: your system, its users, and neighbouring systems. Container: the separately runnable/deployable pieces (web app, API, database). Component: the major building blocks inside one container. Code: classes inside one component — usually skipped.

open as a page

What is an Architecture Decision Record (ADR), and what does a typical ADR contain?

level: juniorimportance: must knowfreq 72%
basics
~20 s

An ADR is a short document capturing one significant architecture decision: the context that forced the choice, the option chosen, and the consequences. ADRs are numbered, dated, kept in version control, and never rewritten — superseded ones stay for history.

open as a page

In the ISO/IEC 42010 conceptual model for architecture description, what is the difference between a stakeholder, a concern, an architecture viewpoint, and an architecture view?

level: juniorimportance: must knowfreq 55%
basics
~20 s

Stakeholders are people who care about the system; concerns are what they care about (cost, security, uptime). A viewpoint is a reusable template for describing one such area; a view is the actual description produced by applying that template to your system.

open as a page

In Kruchten's "4+1" view model of software architecture, what are the five views and what does each one describe?

level: juniorimportance: must knowfreq 48%
basics
~20 s

Logical view: functionality and domain structure. Process view: runtime processes, threads, concurrency. Development view: code modules, packages, build units. Physical (deployment) view: mapping software onto machines and networks. Plus Scenarios: key use cases that tie the four together.

open as a page

In Robert C. Martin's component/package metrics, what do afferent coupling (Ca), efferent coupling (Ce), and instability I = Ce / (Ca + Ce) measure, and what do I = 0 and I = 1 say about a component?

level: juniorimportance: must knowfreq 55%
basics
~20 s

Ca counts things outside the component that depend on it (incoming arrows). Ce counts things it depends on (outgoing arrows). I = Ce/(Ca+Ce) runs 0 to 1: 0 = maximally stable (everyone depends on it, it depends on nobody), 1 = maximally unstable.

open as a page

In architecture evaluation, what is a "quality attribute scenario", and why is a goal like "the system must be scalable" not usable as an evaluation criterion?

level: juniorimportance: must knowfreq 40%
basics
~20 s

A quality attribute scenario is a concrete, testable sentence: some source sends a stimulus to the system in a given environment, and the system responds with a measurable result. "Scalable" has no measure, so nobody can agree whether a design meets it.

open as a page

In evolutionary architecture, what is an architectural fitness function, and how does it differ from an ordinary unit test of business logic?

level: juniorimportance: must knowfreq 55%
basics
~20 s

A fitness function is an automated, objective check that the system still meets a required architectural quality — response time, allowed dependencies, security rules. A unit test checks business behaviour; a fitness function guards a structural or quality property.

open as a page

What is technical debt, and what do the terms "principal" and "interest" mean when applied to it?

level: juniorimportance: must knowfreq 82%
basics
~20 s

Technical debt is a shortcut in design or code that makes today faster but future changes slower. The principal is the work needed to fix the shortcut; the interest is the extra effort every change costs while it stays unfixed.

open as a page

Architects often say "there are no right answers in architecture, only trade-offs". What does that mean in practice, and can you name two quality attributes that pull against each other?

level: juniorimportance: must knowfreq 72%
basics
~10 s

It means improving one desirable property usually costs another. Example: caching copies of data makes reads fast but copies can be stale; adding redundant servers raises availability but raises cost and operational complexity.

open as a page

What is an architectural boundary in a software system, and what is the difference between a module's interface and its implementation?

level: juniorimportance: must knowfreq 72%
basics
~20 s

A boundary is a line separating parts of a system that change for different reasons. The interface is the small set of operations other parts may call; the implementation is the hidden internals (data structures, algorithms, storage) they must not touch.

open as a page

What are the three component cohesion principles (REP, CCP, CRP) described by Robert C. Martin, and what does each one say about which code belongs together in a releasable component?

level: juniorimportance: must knowfreq 72%
basics
~20 s

REP: things released together should be usable together. CCP: put classes that change for the same reason in the same component. CRP: don't force users to depend on code they never use. Together they decide component contents.

open as a page

What is the Dependency Inversion Principle (DIP), and how does introducing an interface change which way a dependency points between a high-level policy and a low-level detail?

level: juniorimportance: must knowfreq 82%
basics
~20 s

DIP says high-level policy should not depend on low-level details; both should depend on an abstraction. You define an interface next to the policy, the policy calls it, and the detail implements it — so the arrow now points from the detail to the policy.

open as a page

In software design, what do the terms "coupling" and "cohesion" mean, and why is the standard goal low coupling with high cohesion?

level: juniorimportance: must knowfreq 82%
basics
~20 s

Coupling is how much one module depends on another; cohesion is how well the things inside one module belong together. Low coupling means changing one module rarely forces changes elsewhere; high cohesion means each module does one clear job.

open as a page

In a layered software architecture with presentation, domain (business logic), and infrastructure/persistence layers, what is each layer responsible for and in which direction may dependencies point?

level: juniorimportance: must knowfreq 85%
basics
~20 s

Presentation handles input and output (UI, HTTP endpoints). Domain holds business rules and decisions. Infrastructure talks to databases, files, and other systems. Dependencies point one way — upper layers know about lower ones, never the reverse.

open as a page