CPD timing for this level

Intermediate time breakdown

This is the first pass of a defensible timing model for this level, based on what is actually on the page: reading, labs, checkpoints, and reflection.

Reading
16m
2,336 words · base 12m × 1.3
Labs
60m
4 activities × 15m
Checkpoints
20m
4 blocks × 5m
Reflection
32m
4 modules × 8m
Estimated guided time
2h 8m
Based on page content and disclosed assumptions.
Claimed level hours
12h
Claim includes reattempts, deeper practice, and capstone work.
The claimed hours are higher than the current on-page estimate by about 10h. That gap is where I will add more guided practice and assessment-grade work so the hours are earned, not declared.

What changes at this level

Level expectations

I want each level to feel independent, but also clearly deeper than the last. This panel makes the jump explicit so the value is obvious.

Anchor standards (course wide)
TOGAF StandardISO/IEC/IEEE 42010 (architecture description)
Assessment intent
Applied

Trade-offs, quality attributes, and pattern choice.

Assessment style
Format: scenario
Pass standard
Coming next

Not endorsed by a certification body. This is my marking standard for consistency and CPD evidence.

Evidence you can save (CPD friendly)
  • A design comparison note: monolith vs modular monolith vs microservices, with your constraints and why your choice fits.
  • An integration decision: events vs API calls, including failure modes, idempotency, and monitoring signals.
  • A performance or reliability experiment note: what you measured, what changed, and what you learned.

Software Development and Architecture Intermediate

Level progress0%

CPD tracking

Fixed hours for this level: 12. Timed assessment time is included once on pass.

View in My CPD
Progress minutes
0.0 hours
CPD and certification alignment (guidance, not endorsed):

Intermediate architecture is where you learn to justify trade-offs using constraints and evidence. It maps well to:

  • iSAQB CPSA-F style architecture communication and reasoning
  • TOGAF (orientation) for capability and target state language
  • Cloud architecture certifications (AWS, Azure, Google Cloud) for system trade-offs and operating reality
How to use Intermediate
If you can explain why you made a trade-off, and what you sacrificed, you are learning architecture.
Good practice
Pick one real system and evaluate choices against non-functional requirements: latency, availability, security, cost, and operability.
Bad practice
Best practice

Intermediate architecture is about trade offs. We move past basic structure and focus on the choices that change how a system behaves in the real world.


Architecture styles in the real world

Concept block
Architecture styles
Styles are patterns for organising responsibility and failure. Choose based on constraints and operations.
Styles are patterns for organising responsibility and failure. Choose based on constraints and operations.
Assumptions
Constraints are real
Operations is considered
Failure modes
Style as ideology
Copying case studies
The big styles are patterns, not rules. A can be right for speed. A gives structure without operational sprawl.
is great for team autonomy when you can manage the complexity. can be fast for spikes and small tasks.

The best style is the one your team can operate safely, not the one that looks impressive on a slide.

Style comparison

Each style trades simplicity for flexibility.

Monolith

Single deploy, shared codebase.

Modular monolith

Clear modules, still one deploy.

Microservices

Independent services and teams.

Serverless

Event driven functions.

Quick check: architecture styles

Why choose a modular monolith

What makes microservices difficult

When is serverless useful

Scenario: A team wants microservices because 'we might scale'. What evidence would justify splitting now

Why can a monolith be a good start

What should guide style choice

What is a common microservices failure

🧪

Worked example. Microservices that made delivery slower

A team splits a product into microservices early because “we will scale later”. They now have five deploy pipelines, five sets of logs, and five failure modes, but no clear contracts and no observability maturity. The result is slower delivery and harder debugging, not speed.

My opinion: start with the architecture you can operate. Evolve when you have evidence that the current shape is the bottleneck, not when you are bored.

⚠️

Common mistakes in style selection

  • Choosing a style for prestige instead of constraints.
  • Splitting by technical layers rather than domain responsibilities.
  • Ignoring operational cost (deployments, monitoring, on-call burden).

🔎

Verification. Questions that force honesty

  • What is the most likely failure mode, and can we detect it quickly.
  • If Service B is down, what happens to Service A. Timeouts, retries, queueing, or user impact.
  • How many deploys per day can the team safely support.

📝

Reflection prompt

If you were forced to simplify one system today, what would you merge and why.


Integration and APIs

Concept block
Integration and APIs
Integration is where systems fail. Make contracts and signals explicit.
Integration is where systems fail. Make contracts and signals explicit.
Assumptions
Contracts are versioned
Failures are observable
Failure modes
Distributed monolith
Breaking changes
Systems talk in two main ways. A feels simple but creates tight coupling. An decouples systems but adds coordination work.
Contracts matter. A must be versioned so older clients keep working.

Integration paths

Calls and events solve different problems.

HTTP call

Service A calls Service B and waits.

Message bus

Services publish and subscribe to events.

Quick check: integration and APIs

Why are synchronous calls risky

Why use asynchronous messaging

What is backward compatibility

Scenario: Service B is slow and Service A retries aggressively. What failure pattern can you trigger

Why version an API contract

What is a message queue for

What should an API contract always define

🧪

Worked example. A retry storm you accidentally built

Service A calls Service B synchronously. B gets slow. A times out and retries. Now A generates more traffic precisely when B is weakest. The system collapses under “helpful” retries.

⚠️

Common mistakes in integration

  • Unbounded retries, no jitter, and no circuit breaker behaviour.
  • No idempotency, so retries create duplicates and corrupt state.
  • No contract versioning, so small changes break consumers.

🔎

Verification. Integration checklist you can run in review

  • Timeouts are explicit, retries are bounded, and backoff uses jitter.
  • Idempotency is defined for operations that can be retried.
  • Error semantics are documented (what is safe to retry and what is not).
  • Events have schemas, versioning, and a replay strategy.

📝

Reflection prompt

Where would you rather pay complexity: in synchronous coupling today, or in asynchronous coordination over time.


Quality attributes and trade offs

Concept block
Quality attributes and trade-offs
Quality attributes are trade-offs. Choose deliberately and measure what you care about.
Quality attributes are trade-offs. Choose deliberately and measure what you care about.
Assumptions
Qualities are measurable
Trade-offs are recorded
Failure modes
Optimising one axis
Vague requirements
and are easy to measure. is about reliability. We cannot maximise everything at once.

Architects balance these qualities rather than chase perfection. A fast system that fails often is not success.

Trade off map

Quality is a balance, not a single score.

Performance

Speed and throughput.

Reliability

Availability and recovery time.

Maintainability

Ease of change and clarity.

Quick check: quality attributes

Why are trade offs unavoidable

What does availability measure

Scenario: Security proposes extra checks everywhere, product demands zero friction. What is the real job here

Why does latency matter

What is a common quality conflict

Why measure maintainability

What should guide trade off choices

🧪

Worked example. “Secure” vs “usable” is a fake argument

Someone proposes removing rate limits because it “hurts the user experience”. Another person proposes adding ten security checks to every request because “security is non-negotiable”. Both positions are lazy.

The real job is to design controls that are proportionate to risk and measured against outcomes. Example: rate limit the risky endpoints, add friction where harm is highest, and monitor for abuse.

⚠️

Common mistakes in trade-off discussions

  • Treating quality attributes as opinions rather than measurable constraints.
  • Optimising one attribute locally and harming end-to-end outcomes.
  • Ignoring the operational cost of “clever” solutions.

🔎

Verification. Make the trade-off explicit

  • What are we optimising for, and what are we accepting to get it.
  • What is the failure cost, and how will we detect it.
  • What is the rollback plan if the trade-off was wrong.

📝

Reflection prompt

Which quality attribute do you personally undervalue when you are under delivery pressure. What would force you to take it seriously.


Data, state and consistency

Concept block
Data, state, and consistency
Consistency is a decision. Choose where you need strong guarantees and where you can relax them.
Consistency is a decision. Choose where you need strong guarantees and where you can relax them.
Assumptions
Consistency needs are known
Failure is expected
Failure modes
Inconsistent reads
State split across systems
State hides everywhere. It lives in databases, caches, and message queues. comes in two main flavours. is common in distributed systems.

Distributed systems are hard because the network is slow and things fail. You decide where you accept delay and where you need certainty.

State flow

Data moves through more than one store.

Database

Durable record of truth.

Cache

Fast reads, can be stale.

Message queue

State travels as events.

Quick check: data and state

Where can state live

What is eventual consistency

Scenario: The database updated but users still see old values. What is a likely cause

Why are distributed systems hard

Why use caches

What is the cost of strong consistency

Why send events

🧪

Worked example. The “stale price” incident

A product shows prices from a cache. The database updated, but the cache did not invalidate. Customers see stale prices, the business loses money, and everyone blames “eventual consistency” like it is a curse.

Eventual consistency is not a bug, it is a design choice. The question is whether you designed user experience, monitoring, and recovery around that choice.

⚠️

Common mistakes with state

  • No cache invalidation strategy (or no monitoring for staleness).
  • Treating “the database is truth” as enough when users read from projections.
  • Not distinguishing read paths from write paths in incident response.

🔎

Verification. Can you reason about consistency under failure

  • Where is truth stored. Where do users read from.
  • What happens when the message bus lags or replays.
  • How do you detect staleness, not just errors.

🧾

CPD evidence (keep it real)

  • What I studied: architecture styles, integration patterns, quality trade-offs, and state/consistency behaviour.
  • What I practised: one style choice justification, one integration flow with failure handling, and one consistency scenario write-up.
  • What changed in my practice: one habit. Example: “I ask about retries and idempotency before I approve an integration.”
  • Evidence artefact: a one-page design note with trade-offs and verification steps.

Quick feedback

Optional. This helps improve accuracy and usefulness. No accounts required.