Transitional Architecture
Temporary integrations can enable earlier delivery. Their purpose, consumers, operating cost, recovery obligations, and removal conditions need management.
Temporary integrations can enable earlier delivery. Their purpose, consumers, operating cost, recovery obligations, and removal conditions need management.
Moving capabilities is only part of replacement. Plan intermediate contracts, data authority, recovery, and the dependencies that must end before retirement.
A usable architecture principle explains its direction, scope, and authority, with clear criteria for compliance or tradeoffs.
The target describes the intended arrangement. Gap analysis identifies changes; the transition plan orders them into feasible intermediate states.
If a process dies halfway through a five-step task, what remembers that steps one to three are done? Durable execution records it, and resumes from there.
Technical debt needs a concrete limitation and evidence of extra work. Normal operating cost and the number of technologies alone do not measure it.
A runnable example can test a reference design, but does not guarantee its suitability. Maintain assumptions, validation, support, and consumer updates.
A prepared transaction keeps its locks until it is told the answer. A recovered coordinator replays its decision; until then the rows stay held.
Cancel the reservation, do not put the number back. Between the booking and the cancellation, other people booked too.
A saga exposes intermediate results. Compensation and forward recovery need explicit policies, and affected observers may need separate corrections.
A gateway checks that the token is valid and the quota is not spent. Which invoices belong to whom is a question its backend should answer.
Reuse a durable operation key within the provider’s retention window. A recovered response may still leave the business outcome unresolved.
A client matching on your error message has built a dependency on your copywriting. The type URI exists so it does not have to.
A change can break the supported contract or expose an unsupported assumption. Check both, including changes that silently alter results.
A modular monolith makes interfaces and data ownership explicit within one deployment. These boundaries reduce the work of service extraction.
The definition names loose coupling and five operational qualities. Containers and microservices appear in it as examples, and explicitly as a partial list.
Cache in the instance, keep truth outside it. The difference decides whether a restart is routine or an incident.
Ask which capability is actually being offered — cataloguing, virtualization, lineage, policy enforcement — rather than whether to adopt the concept.
A completed checkpoint records progress; a destination commit exposes output. The sink must recover safely when failure separates those two actions.
When no safe leader candidate remains, unclean election can restore availability from a lagging replica while losing acknowledged records. Check ISR and eligible leader replicas.
Some operations keep each partition’s work local; others need rows from everywhere. That difference is where stage boundaries and expensive recovery come from.
A system that scales beautifully may still be slower than one thread. COST names the hardware a platform needs before it beats a good single-threaded program.
Letting several systems use the same tables removes copies to sync and seems to need no interface — until one team changes a column others depended on.
“Customer” means one thing to billing and another to support. A bounded context is where a term has one meaning; at its edges, meaning must be translated.
Some design decisions quietly control a quality like latency; others affect several qualities at once, sometimes in opposite directions. ATAM names both so they get measured.
ATAM evaluates an architecture by turning quality goals into concrete scenarios and finding the decisions they hinge on: risks, sensitivity and tradeoff points.
Multi-tenancy lets several teams or customers share one system. The design question is what they share, what stays separate, and what that separation costs.
Optimistic concurrency control lets writers prepare changes without holding locks throughout the work, then validates and commits atomically. Conflicts can require a retry.
Raft gets several servers to agree on a shared state and keeps working while a majority survives — designed above all to be understandable.
A hierarchy of hashes lets two replicas locate exactly which ranges differ — without sending or comparing every row they hold.
Spanner waits until TrueTime establishes that the commit timestamp is in the past. Clock uncertainty and concurrent commit work determine the extra delay.
TrueTime returns an interval, not an instant — turning clock uncertainty into a bounded number a system can reason about rather than assume away.
A counter passed along with messages orders events by what could have influenced what — no physical clock, and no synchronization required.
A quorum sets how many replicas must respond. Overlap gives read and write sets a shared replica, while retention and version-selection rules determine what a read returns.
CAP forbids perfect consistency with perfect availability during a partition — a narrower claim than the “pick two of three” framing suggests.
PACELC adds what CAP omits: when there is no partition, you are still trading latency against consistency — and that is the trade you live with daily.
Linearizability preserves real-time order between non-overlapping operations. Concurrent reads and writes can be ordered within their execution intervals.
Operations that could have influenced one another are seen in order; genuinely concurrent ones may be seen differently by different readers.
Last writer wins can make replicas converge under an agreed ordering rule. Preserving the discarded write and conflict history requires a separate mechanism.
Replicas converge on a record once updates to it stop — with no bound on how long, and no statement about what a reader sees meanwhile. Both gaps matter.
Some parts fail while others keep working, and a caller often cannot tell a lost request from a lost reply. That ambiguity is what makes it hard.
A quality attribute says how well a system performs, not what it performs. It becomes useful once the target, the boundary, and the criterion for judging it are stated.
The C4 model describes software at four zoom levels and keeps deployment separate, so structure and where it runs stay two distinct questions.
Kruchten’s 4+1 model describes a system through four views plus scenarios, keeping structure, concurrency, modules, and deployment as separate concerns.
Solution architecture focuses on delivering a particular business capability. It may concern one system or changes across several, with explicit constraints and ownership.
Enterprise architecture links organizational strategy to architectural decisions at several scopes, setting principles and standards that lower-level designs can trace to outcomes.
Amdahl’s law shows how serial work limits parallel speedup. Added coordination costs can make more workers slower rather than merely less useful.
Lease expiry lets another worker recover ownership after a failure. Fencing tokens make the protected resource reject writes from a stale holder.
A token bucket admits requests while it has tokens and refills at a constant rate, so capacity sets the largest burst and the refill rate sets the long-run average.
Deadline propagation gives downstream calls the time remaining from the original request budget, replacing unrelated per-layer timeouts.