All learning

Alpha

Design and test your technical architecture

Create the initial software architecture and address the biggest risks to technical feasibility.

Pre-requisites

  • Requirements and non-functional requirements
  • The current technology inventory
  • Access to relevant technical stakeholders

What you'll get

  • Architecture decision records for consequential choices
  • A reusable technical test record
  • Overall feasibility findings and remaining unknowns

Mentors

Developer agent
Code for Canada Coach
Start activity

Why architecture comes before building

Early technical choices shape every feature that follows. Changing them later can mean rewriting code, migrating data, or renegotiating access.

Architecture work makes hidden constraints visible before the product depends on them. It connects the chosen direction to existing systems, operational capacity, privacy, security, and procurement realities.

Addressing technical risks using a spike

Some feasibility questions cannot be settled through discussion or diagrams. An integration can look straightforward until real data, permissions, or volumes expose a hidden constraint.

A spike is a small, temporary build aimed at one technical risk. It creates evidence before the delivery plan depends on an assumption.

A failed spike is still valuable. It reveals a limit while changing direction remains cheap.

What you leave with

Architecture decision records capture the consequential choices, their context, and their reasons. They preserve the trade-offs that future teams cannot see in the code.

The technical test record captures repeatable tests, evidence, results, and next actions. Overall findings connect those results to architecture decisions.

Further Reading

  • - Map constraints, prototype integrations, and preserve the ability to change technology choices.
  • - Record significant decisions, context, consequences, stakeholders, and supporting evidence.
  • - Design government APIs and plan for failures in third-party dependencies.
  • - Use open specifications to support integration, change, reuse, and lower switching costs.
  • - Test risky integrations, constraints, and technical assumptions before beta delivery.
  • - Use time-boxed spikes to investigate uncertainty before committing delivery work.
  • - Evaluate architecture within existing systems, shared components, standards, and long-term operating capacity.
  • - Design modular, interoperable, secure, adaptable systems that support service continuity.
  • - Build interoperable APIs and validate their design through a real internal consumer.
  • - Assess whether architecture supports independent testing, deployment, and change.
  • - Reduces accidental complexity while balancing system stability, delivery agility, modularity, and release safety.
NextBuild out your Minimum Viable Product