Skip to content
In this article
View as Markdown

Architecture Trade-Offs and Second-Order Effects

Common decisions, their hidden costs, and how the domains couple

Last reviewed 13 October 2026 · 5 min read

Eliminate first, then compare

Most architecture decisions aren't really comparisons. A residency requirement, a latency budget or a licensing term rules some options out before anyone has to weigh the rest. Apply the hard constraints first. Only then is it worth comparing what's left, and the table below is for that second step.

The common decisions

DecisionChoose the first whenChoose the others whenWhat it implies
Monolith, modular monolith or microservicesA small team, one domainModular: clear domains, one deployment. Micro: independent scaling, many teamsMicroservices multiply identities, network paths, telemetry and partial failures. Going from modular to micro is the cheapest path
VM, container or serverlessLegacy software, host-bound licensingContainers: portable and dense. Serverless: spiky load, small operations teamServerless is cheapest at variable load and has the highest exit cost
SQL or NoSQLIntegrity, ad hoc queriesKnown access patterns at massive scaleMoving from NoSQL to SQL later means remodelling
Synchronous or asynchronousAn immediate answer is neededThe work can waitAsynchronous needs idempotency, dead-letter queues and message-level authorization
Batch or streamingHourly freshness is fineReactions within secondsStreaming is an always-on cost; a batch job reruns easily
Managed or self-hostedA commodity capabilityControl, residency, high utilisationManaged adds a dependency on the provider's control plane
Cloud or on-premisesElasticity, managed servicesData gravity, sovereignty, steady useCapital against operating cost; hardware lead times against provider incidents
Single cloud or multi-cloudIntegration depthRegulatory diversity, a need for E4 features, intolerance of one provider as Tier-0Doubles the IAM models. Resilience only if failover is tested
Central or federated identityOne workforce identity providerPartners, acquisitions, customersFederation adds signing-certificate failure points; changing identity provider is Type-1
Vector or hybrid searchProse full of paraphraseIDs, codes, names, legal textHybrid adds index cost; changing the embedding model forces a re-embed
Frontier API or open-weight modelTop quality, variable loadResidency, steady high volume, customisationSelf-hosting wins only at high GPU utilisation
One model or routingConsistencyCost tiers, resilienceEvery route needs approval and its own evaluation
Workflow or agentThe steps can be listedOpen-ended choice of toolsAgents bring the ASI risks, more tokens and new kinds of failure
Kubernetes or VMsMany services, GPU sharing through DRAA few stable applicationsKubernetes adds a cluster blast radius and version churn

Second-order effects

The first-order benefit of a decision is why you make it. The second- and third-order effects are why it surprises you a year later. Each row reads left to right: the decision, what it buys, what it costs, what that cost then causes, the risk that follows, and where it ends up.

DecisionBenefitCostSecond-order effectSecond-order riskThird-order consequence
MicroservicesIndependent deploymentNetwork callsPartial failures, version skewRetry storms, tail latencyObservability and platform maturity become prerequisites
Multi-cloudSupplier diversitySeveral IAM modelsDuplicated policyInconsistent authorizationA larger attack surface; resilience only if failover is tested
Self-hosted AIControl, residencyYour own infrastructureGPU capacity managementUtilisation pressure against queueing latencyScheduling, with DRA and quota queues, becomes a platform of its own
A central API or model gatewayOne policy pointA shared dependencyA larger blast radiusThe gateway is Tier-1 or Tier-0It needs multi-region, configuration discipline and bulkheads
Zero trustPer-request authorizationMore checksMore identity dependenciesPolicy latency; a PDP outage is an access outageCaching decisions creates a revocation budget
Vector searchSemantic recallDerived dataDeletions and ACL changes must propagateStale permissions; residual vectorsFreshness SLOs, lineage, re-embedding migrations
KubernetesPortable orchestrationA cluster control planePlatform engineeringUpgrade skew; CRD and operator sprawlThe cluster lifecycle becomes a major operational system
Private endpoints everywhereNo public pathDNS complexityPrivate DNS zones owned centrallyMisresolution; on-premises forwarders as single points of failureDNS becomes a security boundary, and Tier-0
Workload identity federationNo static keysA dependency on the STS and identity providerJWKS and issuer availabilityA federation outage is a machine outageIssuer URLs and audiences become Type-1 constants
Event-driven integrationDecoupling in timeEventual consistencyDuplicates and reorderingNon-idempotent consumers corrupt stateOutbox, idempotency keys and replay tooling become mandatory
Multi-region active-activeSurviving a regionWrite conflictsConflict-resolution semanticsLost updates, split brainThe data model is redesigned around CRDTs, ownership or partitioning
Long token lifetimes with CAEAvailabilityRevocation delayA dependency on the event channelNon-participating resources ignore revocationAn inventory of which resources honour revocation
Aggressive cachingLatency, costStalenessInvalidation pathsStampedes on expiryJittered TTLs, request coalescing, fail-static
Stateless MCP (2026-07-28)Horizontal scaleState moves into the applicationHandles, and re-issue on a broken streamDuplicate side effectsIdempotency keys on every side-effecting tool
Copilot DLP locationA second decisionA separate policy estate, with other locations disabledDuplicated policyDrift between Copilot and workload DLPPolicy as code across both estates
Security agents (EDR)DetectionKernel privilege; auto-updateA shared dependency across the fleetA fleet-wide crash, as with Channel File 291Content rings; customer control of rollout
A fast global configuration pathQuick mitigation, such as bot rulesA fast blast radiusConfiguration generated from queriesAn upstream permission change is a configuration changeValidate size and cardinality; fail static to the last known good

How the domains couple

Every domain on this site touches the others. These are the joins where a failure in one shows up as a failure in another.

PairThrough whatThe failure that characterises it
Identity and networkAn identity-aware proxy replaces network trustAn identity-provider outage is an access outage
Identity and dataRow-level security and ACLs read from claimsGroup-sync lag exposes rows
Identity and AIOn-behalf-of against agent identityToken pass-through creates a confused deputy; a blueprint is compromised
Network and securityEgress control and inspectionTLS inspection breaks pinned clients
Data and AIIndexes are derived dataDeleted data persists in the vectors
Compute and costUtilisation multiplied by priceIdle reserved GPUs
AI and securityLanguage as an instruction channelIndirect prompt injection
AI and data governanceLabels and DLPUnlabelled sensitive content
Microsoft 365, Entra and AzureA shared tenant; consentIllicit consent; compromise of the whole tenant
Cloud and on-premisesHybrid AD, DNS, dedicated linksAn on-premises AD compromise reaching the cloud
Kubernetes, cloud and observabilityWorkload identity; short-lived podsIAM misbinding; a cardinality explosion
Security and operationsAuto-updating agentsA fleet-wide crash
Time and identityToken expiry; clock skewValid tokens rejected
Time and dataWatermarks; last-writer-winsWrites silently reordered
DNS and securityPrivate endpointsThe zone owner controls the path
Configuration and everythingP8A bad push reaches every region in seconds
Organisation and ownershipConway's lawA boundary with no owner becomes an unmonitored dependency

Should you have any questions regarding this page, please contact us at solutions@alesanalytics.com.

Next steps

Diagrams use the official Microsoft Azure, Microsoft Entra, AWS and Google Cloud architecture icons, as each vendor permits for documentation, and the Kubernetes icon set by the Kubernetes Authors under CC-BY-4.0. Product names are trademarks of their owners.