Skip to content

Example: Employee Directory

About This Example

This is a fictional but realistic Solution Architecture Document for an internal employee directory at Meridian Financial Services. It demonstrates the ADS standard at Recommended documentation depth, appropriate for a straightforward Tier 4 internal application heading to production.

Use this as a reference when completing your own SAD. The structure, field names, and enum values follow the standard exactly.


FieldValue
Document TitleSolution Architecture Document — Employee Directory
Application / Solution NameEmployee Directory
Application IDAPP-0347
Author(s)Fred Bloggs, Solution Architect
OwnerFred Bloggs, Solution Architect
Version1.0
StatusApproved
Created Date2025-09-15
Last Updated2025-11-20
ClassificationInternal
VersionDateAuthor / EditorDescription of Change
0.12025-09-15Fred BloggsInitial draft
0.22025-10-01Fred BloggsIncorporated feedback from security review
0.32025-10-22Fred BloggsAdded data view and integration details following HR team workshop
1.02025-11-20Fred BloggsApproved by Architecture Review Board
NameRoleContribution Type
Fred BloggsSolution ArchitectAuthor
Dave BloggsIT Operations LeadReviewer
Jane DoeHR Systems ManagerReviewer
Joe BloggsInformation Security AnalystReviewer
Architecture Review BoardGovernanceApprover

This SAD describes the architecture of the Employee Directory application, a simple internal web application that allows Meridian Financial Services staff to look up colleague contact details and organisational information.

  • Scope boundary: The Employee Directory application, its API, database, and integration with the corporate HR system and Entra ID.
  • Out of scope: The HR system itself (documented separately under APP-0112), corporate network infrastructure, and the Entra ID tenant configuration.
  • Related documents: HR System SAD (APP-0112), Meridian Cloud Platform Standards (STD-0023), Information Security Policy (POL-0008).

The Employee Directory is an internal web application that enables Meridian Financial Services employees to search for and view colleague contact information, including name, department, job title, telephone number, email address, office location, and photograph. It replaces a manually maintained Excel spreadsheet that has become unreliable, difficult to search, and frequently out of date.

The application uses a React single-page application frontend served from Azure App Service, backed by a Node.js REST API and an Azure SQL database. Employee records are synchronised nightly from the corporate HR system via an automated CSV import.

DriverDescriptionPriority
Data accuracyThe current spreadsheet is frequently out of date; leavers remain listed and new starters are missing for weeksHigh
SearchabilityFinding colleagues across 450 staff using a spreadsheet is slow and frustratingHigh
Self-serviceHR spend approximately 3 hours per week answering basic “who is…” queriesMedium
ComplianceThe spreadsheet lacks access controls and audit logging; this is a minor data protection concernMedium
QuestionResponse
Which organisational strategy or initiative does this solution support?Cloud-first strategy and digital workplace programme
Has this solution been reviewed against the organisation’s capability model?Yes
Does this solution duplicate any existing capability?No — the SharePoint spreadsheet is being retired, not duplicated
CapabilityShared Service / PlatformReused?Justification (if not reused)
Identity & AccessEntra ID (corporate tenant)Yes
Messaging / NotificationsN/AN/ANo notification capability required
API ManagementN/AN/ASingle internal API; API gateway unnecessary at this scale
Monitoring & LoggingAzure Monitor + Log AnalyticsYes
Data & AnalyticsN/AN/ANo analytics requirements
CI/CDGitHub Actions (corporate organisation)Yes
  • Employee Directory web application (frontend and API)
  • Azure SQL database for employee records
  • Nightly data feed from the Meridian HR system (PeopleSync)
  • Entra ID integration for single sign-on
  • Production and development environments
  • All internal employees as end users
  • Changes to the HR system (PeopleSync) itself
  • Organisational chart or reporting-line visualisation (potential future phase)
  • Mobile-native application (the web application is responsive and works on mobile browsers)
  • External access (VPN required for remote workers; this is existing infrastructure)
  • Self-service profile editing by employees (all changes are made by HR in the source system)

The current employee directory is a shared Excel spreadsheet stored on a SharePoint Online site within the HR team’s document library. Key limitations:

  • Manual updates: HR staff manually edit the spreadsheet when employees join, leave, or change roles. Updates are often delayed by days or weeks.
  • No access control: All employees with access to the HR SharePoint site can view and edit the spreadsheet. There is no separation between read and write access.
  • Poor searchability: Users must open the file and use Excel’s find function. There is no structured search, filtering, or browsing.
  • No audit trail: Changes to the spreadsheet are not logged beyond SharePoint’s basic version history.
  • No photographs: The spreadsheet contains text data only; employees cannot look up colleagues by face.

The new application will completely replace this spreadsheet, which will be archived and removed from active use after a 4-week parallel running period.

Decision / ConstraintRationaleImpact
Azure App Service (PaaS) over on-premises IISAligns with cloud-first strategy; reduces operational overhead; eliminates need for server patchingApplication is deployed as a PaaS web app with no VM management
Azure SQL over Cosmos DBRelational data model suits structured employee records; team has strong SQL skills; Cosmos DB’s global distribution is unnecessary for a single-region internal appSimple relational schema; familiar tooling; lower cost
Nightly CSV import over real-time API integrationPeopleSync (HR system) does not expose a real-time API; CSV export is the only supported integration methodEmployee data may be up to 24 hours stale; accepted by HR as sufficient
Must use AzureOrganisational constraint: all new applications must be hosted on the Meridian Azure tenantLimits technology choices to Azure services
FieldValue
Project NameEmployee Directory Replacement
Project Code / IDPRJ-2025-089
Project ManagerRaj Doe
Estimated Solution Cost (Capex)GBP 18,000 (development)
Estimated Solution Cost (Opex)GBP 2,400/year (Azure hosting)
Target Go-Live Date2026-02-01

Selected criticality: Tier 4: Low Impact

The Employee Directory is a convenience tool. If the service is unavailable, employees can contact colleagues through Outlook (which has its own global address list for email and phone), Microsoft Teams, or by asking their manager. There is no revenue, regulatory, or safety impact from downtime.


StakeholderRole / GroupKey ConcernsRelevant Views
Jane DoeHR Systems Manager (Business Owner)Data accuracy, ease of use, reduction in manual queriesExecutive Summary, Data View
Fred BloggsSolution ArchitectDesign integrity, standards compliance, maintainabilityAll views
Joe BloggsInformation Security AnalystData protection, access control, authenticationSecurity View, Data View
Dave BloggsIT Operations LeadDeployment, monitoring, support burdenPhysical View, Operational Excellence, Lifecycle
Tom BloggsDevelopment LeadTechnology stack, build pipeline, code maintainabilityLogical View, Lifecycle
All Employees (c.450)End UsersFast search, up-to-date information, usabilityExecutive Summary, Scenarios
HR Team (8 staff)Data MaintainersAdmin interface for corrections, photo uploadsScenarios, Logical View
ConcernStakeholder(s)Addressed In
Employee data is accurate and currentHR Systems Manager, End Users3.2 Integration & Data Flow, 3.4 Data View
Application is secure and access-controlledInformation Security Analyst3.5 Security View
Application is simple to operate and supportIT Operations Lead4.1 Operational Excellence, 5. Lifecycle
Application is cost-effective for a Tier 4 systemHR Systems Manager, IT Operations Lead4.4 Cost Optimisation
Data protection requirements are metInformation Security Analyst, HR Systems Manager3.4 Data View, 3.5 Security View
Search is fast and intuitiveEnd Users3.6 Scenarios, 4.3 Performance
Regulation / StandardApplicabilityImpact on Design
UK GDPREmployee personal data (names, contact details, photographs) is processedData classification, retention policy, access controls, and privacy notice required
Data Protection Act 2018UK domestic implementation of GDPRCovered by GDPR controls above
  • No — the Employee Directory does not support any FCA-regulated activities. It is an internal staff tool only.
StandardVersionApplicability
Meridian Information Security Policy (POL-0008)3.1Authentication, access control, encryption, logging
Meridian Cloud Platform Standards (STD-0023)2.0Azure resource naming, tagging, region selection

graph LR
  SPA[React SPA] -- HTTPS/JSON --> API[Node.js API]
  API -- TDS/TLS --> DB[Azure SQL DB]
  SPA -- OIDC --> EntraID[Entra ID SSO]
  API -- Reads CSV --> Blob[Azure Blob Storage]
  HR[PeopleSync HR System] -- Nightly SFTP --> Blob
Application architecture: React SPA connects to Node.js API via HTTPS, which connects to Azure SQL DB. SPA authenticates via Entra ID. HR system sends nightly CSV to Blob Storage.
ComponentTypeDescriptionTechnologyOwner
Employee Directory FrontendApplicationSingle-page application providing search, browse, and admin UIReact 18, TypeScript, ViteDevelopment Team
Employee Directory APIServiceREST API serving employee data and handling admin operationsNode.js 20 LTS, Express, TypeScriptDevelopment Team
Employee DatabaseDatabaseRelational store for employee records and photographsAzure SQL Database (Basic tier, 5 DTU)IT Operations
CSV Staging StoreStorageBlob container receiving nightly HR export filesAzure Blob StorageIT Operations
CSV Import JobServiceScheduled function that processes staged CSV files into the databaseNode.js script triggered by Azure Functions timerDevelopment Team
Service IDService NameCapability IDCapability Name
SVC-0347-01Employee LookupCAP-HR-004Staff Directory
SVC-0347-02Employee AdminCAP-HR-005Staff Data Maintenance
Application NameApplication IDImpact TypeChange DetailsComments
PeopleSync (HR System)APP-0112UseConsumes nightly CSV exportNo changes required to PeopleSync; existing export capability
SharePoint OnlineN/ARetire (partial)HR team spreadsheet will be archivedSpreadsheet removed after parallel run period

3.1.6 Technology & Vendor Lock-in Assessment

Section titled “3.1.6 Technology & Vendor Lock-in Assessment”
Component / ServiceVendor / TechnologyLock-in LevelMitigationPortability Notes
Azure App ServiceMicrosoft AzureLowStandard Node.js app; can run on any hosting platformDockerfile available for portability
Azure SQL DatabaseMicrosoft AzureLowStandard T-SQL; compatible with SQL Server on any platformData exportable via standard tooling (bacpac, CSV)
Azure Blob StorageMicrosoft AzureLowStandard blob/object storage patternCould substitute S3 or any object store
Entra ID (OIDC)MicrosoftLowStandard OIDC protocol; could switch to any OIDC providerApplication uses standard OIDC libraries (passport.js)

Primary data flow — Employee Search:

  1. User opens the Employee Directory in their browser.
  2. Browser redirects to Entra ID for OIDC authentication; user signs in with corporate credentials.
  3. Entra ID returns an ID token and access token to the SPA.
  4. User enters a search query in the frontend.
  5. Frontend sends an authenticated GET request to the API (/api/employees?q=...).
  6. API validates the access token, queries Azure SQL, and returns matching employee records as JSON.
  7. Frontend renders the search results.

Secondary data flow — Nightly HR Import:

  1. PeopleSync (HR system) generates a CSV export of all active employees at 02:00 UTC daily.
  2. PeopleSync uploads the CSV file to the Azure Blob Storage staging container via SFTP (managed by Azure Blob Storage SFTP endpoint).
  3. At 03:00 UTC, an Azure Functions timer trigger fires the CSV Import Job.
  4. The import job reads the CSV from Blob Storage, validates the data, and performs an upsert into Azure SQL.
  5. Employees no longer present in the CSV are soft-deleted (marked as inactive, not removed).
  6. The import job logs the result (rows processed, errors) to Application Insights.
Source ComponentDestination ComponentProtocol / EncryptionAuthentication MethodPurpose
React SPANode.js APIHTTPS / TLS 1.2Bearer token (Entra ID JWT)Employee search and admin operations
Node.js APIAzure SQL DatabaseTDS / TLS 1.2Managed Identity (Entra ID)Read/write employee records
CSV Import JobAzure Blob StorageHTTPS / TLS 1.2Managed Identity (Entra ID)Read staged CSV files
CSV Import JobAzure SQL DatabaseTDS / TLS 1.2Managed Identity (Entra ID)Upsert employee records
Source ApplicationDestination ApplicationProtocol / EncryptionAuthenticationSecurity ProxyPurpose
PeopleSync (APP-0112)Azure Blob Storage (CSV staging)SFTP / SSHSSH key pairN/ANightly employee data export
User TypeAccess MethodAuthenticationProtocol
Internal employeesWeb browser via corporate network or VPNEntra ID SSO (OIDC)HTTPS
HR administratorsSame web application with elevated roleEntra ID SSO (OIDC) + RBAC group membershipHTTPS
graph TD
  subgraph Azure[Meridian Azure Tenant - UK South]
      AppSvc[App Service - React SPA + Node.js API]
      SQL[Azure SQL Database]
      Blob[Azure Blob Storage]
      Func[Azure Functions - CSV Import]
      AppIns[Application Insights]
      AppSvc --> SQL
      Func --> Blob
      Func --> SQL
      AppSvc --> AppIns
  end
Deployment architecture: Azure UK South tenant containing App Service, Azure SQL, Blob Storage, Azure Functions, and Application Insights.
AttributeSelection
Hosting Venue TypeCloud
Hosting Region(s)UK (Azure UK South)
Service ModelPaaS
Cloud ProviderAzure
Account / Subscription TypeMeridian Non-Production & Production subscription (sub-prod-001)

This solution uses PaaS services exclusively. No virtual machines, containers, or serverless GPU/HPC resources are required.

ServiceSKU / TierDetails
Azure App ServiceB1 Basic (1 core, 1.75 GB RAM)Hosts both the static React SPA and the Node.js API
Azure FunctionsConsumption planRuns the nightly CSV import job only; zero cost when idle

Not applicable — PaaS services are fully managed by Microsoft. No OS-level agents are required.

QuestionResponse
Is this an Internet-facing application?No — internal only, accessible via corporate network and VPN
Outbound Internet connectivity required?Yes — for Entra ID authentication endpoints (login.microsoftonline.com)
Cloud-to-on-premises connectivity required?Yes — PeopleSync uploads CSV via SFTP from the on-premises data centre
Wireless networking required?No
Third-party / co-location connectivity required?No
Cloud network peering required?No
AttributeSelection
User access methodWeb (HTTPS)
User locationsUK offices, Remote (VPN)
Administrator access methodSame web application (admin role)
VPN requiredYes (for remote access; existing corporate VPN)
Direct Connect / ExpressRouteYes (existing ExpressRoute for on-premises to Azure connectivity, used by PeopleSync SFTP)
ProtocolUsed?Purpose
HTTPS (TLS 1.2+)YesAll user and API traffic
SFTPYesPeopleSync CSV file upload to Blob Storage
ODBC / JDBCNo
TCP (other)No
gRPCNo
WebSocketNo
EnvironmentDescriptionCount & VenueCompute Solution
DevelopmentLocal development with shared Azure SQL dev database1x Azure (UK South)App Service B1 Basic
ProductionLive service environment1x Azure (UK South)App Service B1 Basic

No staging, pre-production, or DR environments are provisioned. This is appropriate for a Tier 4 application with no DR requirement. Deployments are validated in the development environment before promoting to production.

QuestionResponse
Hosting region chosen for low carbon intensityAzure UK South — chosen primarily for data residency. Microsoft’s UK regions are tracking towards 100% renewable energy matching by 2025.
Non-production environments auto-shutdown out of hoursThe dev environment uses B1 Basic SKU which is already low-cost; no auto-shutdown is configured because the environment is shared with developers across time zones. Estimated additional saving < £20/month, judged not worth the operational complexity.
Compute family chosen for performance-per-wattApp Service B1 Basic uses Azure’s standard managed-VM hardware. For a Tier 4 internal directory, sizing was selected for sufficiency rather than peak efficiency; an upgrade to Pv3 would over-provision.
Auto-scaling configured to release capacity when idleNot applicable at B1 Basic — no auto-scaling. Scaled vertically if usage outgrows the SKU.
DR strategy proportionateNone — the system is non-critical (Tier 4), 8-hour outage tolerable. A DR replica would double compute footprint without business benefit.
Data NameStore TechnologyAuthoritative?Retention PeriodData SizeClassificationPersonal Data?Encryption LevelKey Management
Employee recordsAzure SQL DatabaseNo (PeopleSync is authoritative)7 years from last update (soft-deleted records retained)< 500 MBInternalYesStorageMicrosoft-managed (TDE)
Employee photographsAzure SQL Database (varbinary)Yes (photos are managed directly in this application)7 years from last update< 2 GBInternalYesStorageMicrosoft-managed (TDE)
CSV staging filesAzure Blob StorageNo (transient copy)30 days (auto-deleted by lifecycle policy)< 10 MB per fileInternalYesStorageMicrosoft-managed (SSE)
Application logsApplication Insights (Log Analytics)Yes90 days< 1 GBInternalNo (no PII logged)StorageMicrosoft-managed
Classification LevelData TypesHandling Requirements
Internal / CorporateEmployee names, department, job title, office location, telephone, email, photographAccess restricted to authenticated Meridian employees; encrypted at rest and in transit

No Public, Restricted, or Highly Restricted data is stored by this application. The data set does not include sensitive categories such as salary, performance reviews, disciplinary records, or health information — these remain exclusively in PeopleSync.

StageDescriptionControls
Creation / IngestionEmployee records are created in PeopleSync by HR. Data is ingested nightly via CSV import. Photographs are uploaded directly by HR administrators through the admin UI.CSV validated on import (schema check, mandatory fields). Duplicate detection by employee ID.
ProcessingAPI reads employee data for search queries. No transformation or aggregation occurs.Access controlled by Entra ID authentication and RBAC.
StorageData stored in Azure SQL with Transparent Data Encryption (TDE). Blob Storage uses Storage Service Encryption (SSE).Encryption at rest enabled by default on both services.
Sharing / TransferData is displayed to authenticated employees via the web UI only. No data exports, APIs for other systems, or bulk downloads are provided.TLS 1.2 in transit. No data leaves the application boundary.
ArchivalSoft-deleted employee records (leavers) are retained in the database for the retention period.Retained in same database with inactive flag.
Deletion / PurgingRecords older than 7 years from soft-deletion date are permanently purged by a scheduled job. CSV staging files are auto-deleted after 30 days.Azure SQL scheduled stored procedure. Blob lifecycle management policy.
Assessment TypeIDStatusLink
Data Protection Impact Assessment (DPIA)DPIA-2025-041CompleteMeridian SharePoint / Legal / DPIAs

The DPIA concluded that the Employee Directory processes a limited set of non-sensitive personal data for a legitimate business purpose. Standard controls (access control, encryption, retention policy) are sufficient. No high risks were identified.

ApproachSelected
Production data is not used for testing[x]

The development environment uses synthetic (fabricated) employee data. No production personal data is copied to non-production environments.

  • No — standard database constraints (primary keys, not-null, foreign keys) and TLS-protected transport are sufficient. No additional integrity controls (e.g., checksums, digital signatures) are required for this data set.
  • No — the application does not allow data downloads, offline storage, or local caching of employee records beyond standard browser session caching. No data is persisted to end-user devices.

No employee data is transferred to third parties. All data remains within the Meridian Azure tenant in UK South.

  • Yes — all data is stored in the Azure UK South region (London). This satisfies Meridian’s data residency policy requiring employee personal data to remain within the UK.
QuestionResponse
Retention periods minimisedEmployee records retained for the duration of employment + 6 years (HMRC, NI, and Meridian HR policy alignment); transient session data ≤ 24 hours. No “indefinite” retention.
Older data tiered to cold/archive storageNot applicable at this scale (~£40/month of database storage); tiering complexity outweighs the saving.
Unused or duplicate replicasSingle Azure SQL S1 instance, no read replicas. No legacy unused storage.
Compression appliedgzip on HTTP responses; Azure SQL uses page-level compression on the primary tables (default for S1+).
Cross-region replicationNone — appropriate for Tier 4.
Large data transfers off-peakNot applicable — no scheduled bulk transfers.
QuestionResponse
Does the solution support regulated activities?No
Is the solution SaaS or third-party hosted?No — hosted on the Meridian Azure tenant
Has a third-party risk assessment been completed?N/A — no third-party services beyond Microsoft Azure (covered by existing enterprise agreement assessment)
Impact CategoryBusiness Impact if Compromised
ConfidentialityLow — employee names, emails, phone numbers, and departments would be exposed. This data is already broadly known internally. Limited external value.
IntegrityLow — incorrect directory data would cause inconvenience but no financial or safety impact. HR can correct data within 24 hours via the next CSV import.
AvailabilityLow — employees can use Outlook Global Address List or Teams as alternative lookup methods.
Non-RepudiationLow — no transactions or approvals occur within this application.
Access TypeRole(s)Destination(s)Authentication MethodCredential Protection
End UsersViewerWeb applicationEntra ID SSO (OIDC)Managed by Entra ID (MFA enforced by corporate policy)
HR AdministratorsAdminWeb application (admin features)Entra ID SSO (OIDC)Managed by Entra ID (MFA enforced by corporate policy)
Service AccountsCSV Import JobAzure SQL, Blob StorageManaged Identity (system-assigned)No credentials to manage; Azure-managed
Service AccountsApp Service to SQLAzure SQLManaged Identity (system-assigned)No credentials to manage; Azure-managed

No external users access this application.

ControlResponse
Does the application use SSO or group-wide authentication?Yes — Entra ID SSO via OIDC. All Meridian employees can authenticate.
What is the unique identifier for user accounts?Entra ID Object ID (GUID)
What is the authentication flow?OIDC Authorization Code Flow with PKCE (SPA to Entra ID)
How are credentials issued to users?Managed centrally by Entra ID; no application-specific credentials
What are the credential complexity rules?Governed by Entra ID corporate policy (not application-managed)
What are the credential rotation rules?Governed by Entra ID corporate policy
What are the account lockout rules?Governed by Entra ID corporate policy
How can users reset forgotten credentials?Entra ID self-service password reset (existing corporate process)
ControlResponse
How are sessions established after authentication?OIDC access token stored in browser memory (not localStorage)
How are session tokens protected against misuse?Tokens are short-lived (1 hour), signed by Entra ID, validated by API on every request
What are the session timeout and concurrency limits?Token expires after 1 hour; user re-authenticates silently via Entra ID refresh. No concurrency limits.
Access TypeRole / ScopeEntitlement StoreProvisioning Process
Business Users (Viewer)Read-only access to all employee recordsEntra ID — all authenticated employeesAutomatic; all Meridian employees have Viewer access by default
HR Administrators (Admin)Read/write access; can update records and upload photographsEntra ID security group: SG-EmployeeDir-AdminsManual; HR manager requests via IT service desk
Service AccountsDatabase read/write for import jobAzure RBAC (Managed Identity)Provisioned via Infrastructure as Code (Bicep)
Account TypeManagement Approach
Azure subscription adminManaged by Meridian Cloud Platform team; PIM (Privileged Identity Management) with JIT access
Application admin (HR Admin role)Entra ID group membership managed by IT service desk; quarterly recertification by HR manager

3.5.3 Network Security & Perimeter Protection

Section titled “3.5.3 Network Security & Perimeter Protection”
ControlImplementation
Network segmentationApp Service has built-in network isolation; Azure SQL firewall allows connections only from the App Service and Azure Functions subnets
Ingress filteringApp Service access restricted to corporate network IP ranges (no public Internet access)
Egress filteringDefault Azure egress; no sensitive data leaves the application
Encryption in transitTLS 1.2 enforced on all connections (App Service, Azure SQL, Blob Storage)
AttributeDetail
Encryption deployment levelStorage (platform-managed)
Key typeSymmetric
Algorithm / cipher / key lengthAES-256
Key generation methodMicrosoft-managed (Azure platform)
Key storageMicrosoft-managed
Key rotation scheduleAutomatic (Microsoft-managed)

Customer-managed keys are not required for Internal-classified data per Meridian policy (POL-0008 Section 4.3).

AttributeDetail
Secret storeNo application-level secrets. All authentication uses Managed Identity (passwordless).
Secret distributionN/A
Secret protection on hostN/A
Secret rotationN/A

The use of Managed Identity for all service-to-service authentication eliminates the need for stored secrets, connection strings, or API keys.

3.5.5 Security Monitoring & Threat Detection

Section titled “3.5.5 Security Monitoring & Threat Detection”
CapabilityImplementation
Security event loggingAuthentication events logged by Entra ID; API access logged by Application Insights
SIEM integrationEntra ID sign-in logs flow to corporate Sentinel workspace (existing configuration)
Infrastructure event detectionAzure Monitor alerts for Azure SQL and App Service health
Security alertingFailed authentication attempts surface in Entra ID reporting (corporate SOC monitors)

UC-01: Search for an Employee

AttributeDetail
Actor(s)Any authenticated Meridian employee (Viewer role)
TriggerUser needs to find a colleague’s contact details
Pre-conditionsUser is authenticated via Entra ID SSO
Main Flow1. User navigates to the Employee Directory URL. 2. Browser completes OIDC authentication silently (or prompts for sign-in). 3. User types a name, department, or job title into the search box. 4. Frontend sends GET /api/employees?q={query} with bearer token. 5. API validates the token, queries Azure SQL using parameterised search. 6. API returns matching employee records as JSON. 7. Frontend displays results with name, photo, department, phone, and email. 8. User clicks an employee card to view full details.
Post-conditionsUser has the contact information they need
Views InvolvedLogical, Integration & Data Flow, Physical, Security

UC-02: HR Administrator Updates an Employee Record

AttributeDetail
Actor(s)HR Administrator (Admin role)
TriggerAn employee’s photograph needs updating, or a correction is needed before the next nightly sync
Pre-conditionsUser is authenticated and is a member of the SG-EmployeeDir-Admins Entra ID group
Main Flow1. Admin navigates to the Employee Directory and authenticates. 2. Admin searches for the employee. 3. Admin clicks “Edit” on the employee record (button visible only to Admin role). 4. Admin updates the field(s) or uploads a new photograph. 5. Frontend sends PUT /api/employees/{id} with updated data and bearer token. 6. API verifies the user’s Admin role claim in the JWT. 7. API validates the input and updates Azure SQL. 8. API returns the updated record. 9. Frontend confirms the update to the admin.
Post-conditionsEmployee record is updated immediately; change is logged in Application Insights
Views InvolvedLogical, Integration & Data Flow, Physical, Data, Security

3.6.2 Architecture Decision Records (ADRs)

Section titled “3.6.2 Architecture Decision Records (ADRs)”

ADR-001: Use Azure SQL Database over Azure Cosmos DB

FieldContent
StatusAccepted
Date2025-09-22
ContextThe application needs a database for structured employee records (approximately 500 rows, well-defined relational schema). Two Azure-native database options were considered.
DecisionUse Azure SQL Database (Basic tier, 5 DTU).
Alternatives ConsideredAzure Cosmos DB: Globally distributed NoSQL database. Offers high availability and horizontal scaling, but this application has a single-region, low-volume workload with a relational data model. Cosmos DB’s minimum cost (~GBP 20/month for 400 RU/s) exceeds Azure SQL Basic (~GBP 4/month) for this use case, and the team has no Cosmos DB experience.
ConsequencesPositive: Lower cost, simpler operations, team familiarity with T-SQL. Negative: Limited to single-region deployment (acceptable for Tier 4).
Quality Attribute TradeoffsCost optimisation (positive) and team skills (positive) weighted over global distribution (not required) and horizontal scalability (not required).

ADR-002: Nightly CSV Batch Import over Real-Time Integration

FieldContent
StatusAccepted
Date2025-09-22
ContextEmployee data originates in PeopleSync (the HR system). The directory needs to stay in sync with HR data. PeopleSync supports only CSV file export; it does not offer a real-time API or event-based integration.
DecisionImplement a nightly batch import of the full employee dataset via CSV file transfer to Azure Blob Storage, processed by an Azure Functions timer trigger.
Alternatives ConsideredReal-time API integration: Not available from PeopleSync. Would require a custom middleware layer or changes to the HR system, which is out of scope and budget. Manual data entry: Rejected as it replicates the existing problem of stale data and manual effort.
ConsequencesPositive: Simple, reliable, uses existing PeopleSync capability. Negative: Data can be up to 24 hours stale. HR stakeholder has accepted this latency as sufficient for a directory.
Quality Attribute TradeoffsSimplicity and cost (positive) over data freshness (acceptable trade-off for Tier 4).

Log TypeEvents LoggedLocal StorageRetention PeriodRemote Services
Application logsAPI requests, errors, authentication events, CSV import resultsNone (streamed directly)90 daysApplication Insights (Log Analytics workspace)
Data store logsAzure SQL audit logs (query metrics, failed logins)Azure SQL built-in90 daysAzure Monitor
Infrastructure logsApp Service platform logs, deployment logsAzure platform90 daysAzure Monitor

4.1.2 Observability — Monitoring & Alerting

Section titled “4.1.2 Observability — Monitoring & Alerting”
Alert CategoryTrigger ConditionNotification MethodRecipient
Application errorsAPI error rate > 5% over 5-minute windowEmailIT Operations team DL
CSV import failureImport job returns non-zero exit codeEmailIT Operations team DL, HR Systems Manager
Azure SQL DTU utilisationDTU usage > 80% sustained for 15 minutesEmailIT Operations team DL
CapabilityToolCoverage
Application Performance MonitoringApplication InsightsAPI and frontend
Infrastructure MonitoringAzure MonitorApp Service, Azure SQL, Blob Storage, Functions
Log AggregationLog Analytics workspaceAll application and infrastructure logs

Distributed tracing is not implemented. The application is a simple monolith with no service-to-service calls that would benefit from trace correlation.

4.2.1 Geographic Footprint & Disaster Recovery

Section titled “4.2.1 Geographic Footprint & Disaster Recovery”
QuestionResponse
Is the application deployed across multiple hosting venues for continuity?No — single region (UK South). Multi-region deployment is not justified for a Tier 4 application.
What is the DR strategy?Backup & Restore. Azure SQL automated backups provide point-in-time restore. No standby environment.
Are there data sovereignty requirements affecting geographic choices?Yes — UK data residency requirement met by UK South deployment.
AttributeResponse
Scaling capabilityNo dynamic scaling (pre-sized)
Scaling detailsApp Service B1 plan is pre-sized for the expected load (c.450 users, low concurrency). If usage significantly increases, the plan can be manually upgraded to a higher tier. Auto-scaling is not configured as the workload does not justify it.
AttributeResponse
Dependencies adequately sized?Yes (confirmed)
Dependency detailsAzure SQL Basic (5 DTU) is adequate for the low query volume. PeopleSync CSV export is a nightly batch with no scaling concern.
  • No — the application is not designed with explicit fault tolerance patterns (circuit breakers, retry logic, graceful degradation). If the API or database is unavailable, the application will return an error page. This is acceptable for a Tier 4 system where alternative lookup methods exist (Outlook GAL, Teams).
Component / DependencyFailure ModeDetection MethodRecovery BehaviourUser Impact
Azure App ServicePlatform outageAzure Monitor alertAutomatic recovery by Azure platform; if prolonged, raise Azure support ticketFull outage; users fall back to Outlook GAL
Azure SQL DatabaseDatabase unavailableApplication error logging; Azure MonitorAzure platform auto-recovery; point-in-time restore if data corruptionFull outage during recovery
CSV Import JobImport fails (bad data, timeout)Import job error logging; email alertIT Operations investigates; re-run manually if needed. Directory data remains stale until next successful import.No user-facing impact (data is stale but application remains available)
Entra IDIdentity provider outageCorporate SOC monitoringDependent on Microsoft restoration; no local mitigationUsers cannot authenticate; full outage
AttributeDetail
Backup strategyAzure SQL automated backups (full, differential, transaction log)
Backup product/serviceAzure SQL built-in backup
Backup typeFull (weekly) + Differential (daily) + Transaction log (every 5-10 minutes)
Backup frequencyAutomated by Azure (see above)
Backup retention7 days (Azure SQL Basic default)
ControlDetail
ImmutabilityAzure-managed; backups cannot be modified or deleted by application administrators
EncryptionEncrypted at rest (TDE, AES-256)
Access controlRestore operations require Azure subscription Contributor role (managed by Cloud Platform team)
#ScenarioRecovery ApproachRTORPO
1Azure UK South region failureWait for Azure recovery. No multi-region failover. Employees use Outlook GAL.24 hours (Azure SLA)5-10 minutes (transaction log backup)
2Azure SQL database corruptionPoint-in-time restore from automated backup2 hours5-10 minutes
3Application code defect in productionRollback to previous deployment via GitHub Actions30 minutesN/A (no data loss)
MetricTargetMeasurement Method
Response time (P95)< 500ms for search queriesApplication Insights request duration
Concurrent usersUp to 50 simultaneous (estimated peak)Application Insights user sessions

Performance testing is not formally conducted. The application serves fewer than 450 users with a low-frequency lookup pattern. Basic load validation will be performed during development using manual browser testing and Application Insights monitoring during the parallel run period.

MetricCurrent1 Year3 Years5 Years
Users (total)450500550600
Concurrent users (peak)20253040
Data volume200 MB250 MB350 MB500 MB
QuestionResponse
Will the current design scale to accommodate projected growth?Yes — Azure SQL Basic and App Service B1 have significant headroom for this workload.
Are there known seasonal or cyclical demand patterns?No — directory usage is broadly constant throughout the year.
PostureSelectedDetail
Most cost-effective options selected[x]PaaS services at their lowest tiers were deliberately chosen to minimise cost for a Tier 4 system. Azure SQL Basic (GBP 4/month), App Service B1 (GBP 10/month), Functions Consumption (pay-per-execution, effectively free for one daily run), Blob Storage (negligible for < 10 MB).
  • Yes — cost was estimated using the Azure Pricing Calculator. The estimated monthly run cost is approximately GBP 200 (including all services, monitoring, and bandwidth). This was reviewed and approved by the project sponsor as proportionate for the business value delivered.
  • No — the design fully meets requirements. Cost has not constrained the design in any way; the requirements are inherently modest and low-cost Azure services satisfy them.
QuestionResponse
Has the hosting location been chosen to reduce environmental impact?No — UK South was selected for data residency compliance. However, Azure UK South is powered in part by renewable energy sources as part of Microsoft’s sustainability commitments.
What is the expected workload demand pattern?Constant (low, business-hours only)
QuestionResponse
Must the application be available continuously?No — the application is used during business hours only, but the cost of running PaaS services 24/7 is lower than the operational complexity of implementing a start/stop schedule.
Can the solution be shut down or scaled down during off-peak hours?Technically possible but not cost-justified. The B1 App Service plan cost is the same whether running or stopped.
Are non-production environments configured to downscale or shut down when not in use?Yes — the development App Service is set to auto-stop outside business hours (08:00-18:00 weekdays) using an Azure Automation runbook.

The application includes internally developed software.

AttributeDetail
Source control platformGitHub (Meridian corporate organisation)
CI/CD platformGitHub Actions
Build automationOn push to main: lint, test, build React SPA, build Node.js API
Deployment automationOn merge to main: deploy to production via GitHub Actions using Azure App Service deployment slots
Test automationUnit tests (Jest) and linting (ESLint) run on every pull request and merge to main
ControlImplementation
Security requirements identificationCaptured in this SAD (Section 3.5) and reviewed by Information Security
Static Application Security Testing (SAST)GitHub CodeQL (enabled on repository)
Dynamic Application Security Testing (DAST)No — not justified for a Tier 4 internal application
Software Composition Analysis (SCA)Dependabot (GitHub-native) for dependency vulnerability scanning
Container image scanningN/A — no containers
Secure coding practicesCode review required on all pull requests; OWASP Top 10 awareness training completed by development team
Patch managementDependabot alerts triaged weekly; critical vulnerabilities patched within 5 business days
ClassificationSelected?Description
ReplaceYesThe shared Excel spreadsheet is being replaced entirely with a purpose-built web application
AttributeDetail
Deployment strategyBig Bang (with 4-week parallel run)
Data migration modeOne-off (initial full CSV load) then nightly sync
Data migration methodCSV import using the same nightly import job
Data volume to migrate< 500 MB
End-user cutover approachOne-off — email announcement to all staff with link to new application
External system cutoverN/A
Maximum acceptable downtimeHours (parallel run means the spreadsheet is still available as fallback)
Rollback planRevert to the SharePoint spreadsheet. HR retain it as a backup for 4 weeks post-go-live.
Acceptance criteria1. All active employees visible in directory. 2. Search returns correct results. 3. HR can update records. 4. Nightly import completes successfully for 5 consecutive days.
Test TypeScopeApproachEnvironmentAutomated?
Integration testingAPI to database; CSV import pipelineJest integration tests against development databaseDevelopmentYes
Performance testingBasic load validationManual browser testing + Application Insights monitoring during parallel runProductionNo
Security testingPenetration testingNot planned (Tier 4; SAST and SCA are sufficient per Meridian policy)N/A
AttributeDetail
Release frequencyMonthly (or as needed for bug fixes)
Release processDeveloper raises PR; code review; merge to main triggers automated deployment to production
Release validationSmoke test (manual check of search and admin functions) after each deployment
Feature flags / togglesNot used — the application is simple enough to deploy features directly
AttributeDetail
Support modelL1: IT Service Desk (password resets, access queries). L2: IT Operations (infrastructure, alerts). L3: Development team (application bugs).
Support hoursBusiness hours (08:00-18:00 weekdays). No out-of-hours support for a Tier 4 system.
SLAsInternal: 99% availability during business hours (measured monthly). No formal SLA with end users.
Escalation pathsService Desk -> IT Operations -> Development Lead -> Solution Architect
QuestionResponse
Non-prod auto-shutdown scheduleNot implemented — see 3.3.6 rationale.
Right-sizing review cadenceAnnual SKU review aligned to the renewal cycle of the Azure spend governance process.
Unused / orphaned resource reclamationReviewed during annual SKU review.
Carbon footprint reportingTracked at department level via Microsoft Sustainability Manager; not separately reported for this single application.
Environment retirementDecommissioning runbook (would apply at end-of-life) requires resource group deletion, not just app stop.
Skill AreaCurrent LevelAction Required
Cloud platform (Azure)MediumNo action; existing team competency sufficient for PaaS services
Infrastructure as CodeLowBicep templates provided by Solution Architect; IT Ops to maintain
CI/CD pipeline managementHighNo action; team experienced with GitHub Actions
Application technology stack (React, Node.js)HighNo action; primary skills of the development team
Database administration (Azure SQL)MediumNo action; basic administration only required
Security & complianceMediumNo action; standard controls used; security review completed
QuestionResponse
Can the team fully operate and support this solution in production?A: Fully capable
ConcernApproach
Keeping software versions current and supportedDependabot for dependency updates; Node.js LTS version tracked; React updated with minor versions
Hardware lifecycle managementN/A — fully PaaS
Certificate managementManaged by Azure App Service (managed certificates for custom domain)
Dependency managementDependabot raises PRs for outdated or vulnerable dependencies weekly
AttributeDetail
Exit strategyApplication is standard Node.js + React; can be rehosted on any platform supporting Node.js and a SQL database.
Data portabilityAzure SQL supports standard export formats (bacpac, CSV). Employee data can be extracted at any time.
Vendor lock-in assessmentLow — see Section 3.1.6. No Azure-proprietary APIs or services are used in the application code.
Exit timeline estimate2-4 weeks to re-deploy on an alternative platform

IDConstraintCategoryImpact on DesignLast Assessed
C-001All new applications must be hosted on the Meridian Azure tenantOrganisationalLimits hosting to Azure services; all technology choices must be Azure-native or Azure-compatible2025-09-15
C-002Employee data must be sourced from PeopleSync via its existing CSV export capabilityTechnicalIntegration is batch-based (nightly CSV); real-time sync is not possible without changes to PeopleSync (out of scope)2025-09-15
IDAssumptionImpact if FalseCertaintyStatusOwnerEvidence
A-001PeopleSync CSV export format will remain stable and will not change without noticeCSV import job would fail; data would become stale until the import is updatedHighClosedJane Doe (HR Systems Manager)Confirmed with PeopleSync vendor that format is contractually stable through 2027
A-002The existing ExpressRoute connection between Meridian data centre and Azure UK South has sufficient bandwidth for the nightly CSV upload (< 10 MB)CSV upload would fail or be slowHighClosedDave Bloggs (IT Operations Lead)Confirmed; ExpressRoute has 200 Mbps capacity with < 5% utilisation at 02:00 UTC

Risk identification:

IDRisk EventCategorySeverityLikelihoodOwner
R-001PeopleSync is replaced or decommissioned, breaking the CSV integrationTechnicalMediumLowJane Doe
R-002Employee photograph storage exceeds Azure SQL Basic tier limits (2 GB)TechnicalLowLowTom Bloggs

Risk response:

IDMitigation StrategyMitigation PlanResidual RiskLast Assessed
R-001MitigateThe CSV import job is a modular component that can be adapted to a new data source. If PeopleSync is replaced, only the import job needs updating.Low2025-10-01
R-002MitigateMonitor database size via Azure Monitor alert. If approaching 2 GB, migrate photographs to Azure Blob Storage (estimated 2-day development effort).Low2025-10-01
IDDependencyDirectionStatusOwnerEvidenceLast Assessed
D-001PeopleSync nightly CSV export must be enabled and runningInboundCommittedJane DoePeopleSync export configured and tested in development2025-10-15

No open issues at the time of writing.

QuestionResponse
Does this design create any exception to current policies and standards?No
QuestionResponse
Does this design create an issue against the process library?No
QuestionResponse
Does the design materially change the organisation’s technology risk profile?No
ADR #TitleStatusDateImpact
ADR-001Use Azure SQL Database over Azure Cosmos DBAccepted2025-09-22Lower cost, simpler operations, team familiarity
ADR-002Nightly CSV batch import over real-time integrationAccepted2025-09-22Data up to 24 hours stale; accepted trade-off

TermDefinition
CSVComma-Separated Values — a plain-text file format for tabular data
DTUDatabase Transaction Unit — Azure SQL performance measurement unit
Entra IDMicrosoft Entra ID (formerly Azure Active Directory) — cloud identity and access management service
GALGlobal Address List — the Outlook/Exchange directory of email addresses
JWTJSON Web Token — a compact token format used in OIDC authentication
Managed IdentityAn Azure feature that provides Azure services with an automatically managed identity in Entra ID, eliminating the need for credentials
OIDCOpenID Connect — an authentication protocol built on top of OAuth 2.0
PeopleSyncMeridian’s corporate HR system (third-party SaaS product)
PKCEProof Key for Code Exchange — a security extension to the OAuth 2.0 authorisation code flow, recommended for SPAs
RBACRole-Based Access Control — a method of restricting access based on user roles
SPASingle-Page Application — a web application that loads a single HTML page and dynamically updates content
TDETransparent Data Encryption — Azure SQL feature that encrypts database files at rest
DocumentVersionDescriptionLocation
HR System SAD (PeopleSync)2.1Architecture of the corporate HR systemMeridian Confluence / Architecture / APP-0112
Meridian Cloud Platform Standards2.0Azure naming conventions, tagging, region policyMeridian Confluence / Standards / STD-0023
Meridian Information Security Policy3.1Security controls, classification, encryption requirementsMeridian SharePoint / Policies / POL-0008
DPIA — Employee Directory1.0Data Protection Impact AssessmentMeridian SharePoint / Legal / DPIAs / DPIA-2025-041
RoleNameDateSignature / Approval Reference
Solution ArchitectFred Bloggs2025-11-18ARB-2025-089-SA
Information SecurityJoe Bloggs2025-11-19ARB-2025-089-SEC
Architecture Review BoardARB Panel2025-11-20ARB-2025-089-APPROVED

SectionScore (0-5)AssessorDateNotes
1. Executive Summary4ARB Panel2025-11-20Clear business context, scope well-defined, strategic alignment demonstrated, criticality justified
3.1 Logical View3ARB Panel2025-11-20Components documented with technology choices; vendor lock-in assessed. Design patterns section omitted (monolith — no complex patterns to document).
3.2 Integration & Data Flow4ARB Panel2025-11-20All interfaces documented with protocols and authentication. API contracts not formally versioned (acceptable for single internal consumer).
3.3 Physical View3ARB Panel2025-11-20Deployment architecture complete, hosting documented. Bandwidth and latency not quantified (not required at this scale).
3.4 Data View4ARB Panel2025-11-20All data stores classified, retention defined, encryption specified, DPIA complete, sovereignty addressed.
3.5 Security View4ARB Panel2025-11-20Authentication and authorisation fully documented. Managed Identity eliminates secrets management risk. Formal threat model not produced (proportionate for Tier 4 and low business impact).
3.6 Scenarios3ARB Panel2025-11-20Two key use cases documented; two ADRs with rationale and alternatives. Additional use cases (e.g., failure scenario) would improve coverage.
4.1 Operational Excellence3ARB Panel2025-11-20Centralised logging and alerting in place. No distributed tracing (not needed). No formal runbooks (proportionate).
4.2 Reliability3ARB Panel2025-11-20Backup configured, recovery scenarios documented. No DR or fault tolerance — appropriate for Tier 4.
4.3 Performance3ARB Panel2025-11-20Targets defined, growth projected. No formal performance testing — acceptable given low concurrency and simple queries.
4.4 Cost Optimisation4ARB Panel2025-11-20Cost analysis performed, lowest-cost Azure tiers selected, proportionate to business value.
4.5 Sustainability3ARB Panel2025-11-20Non-production auto-shutdown configured. Hosting region chosen for compliance, not carbon. Right-sized PaaS resources.
5. Lifecycle3ARB Panel2025-11-20CI/CD documented, migration plan in place, skills assessed. DAST and penetration testing omitted (proportionate).
6. Decision Making3ARB Panel2025-11-20Constraints, assumptions, risks, and dependencies documented with ownership. No open issues or guardrail exceptions.
Overall3ARB Panel2025-11-20Solid, proportionate documentation for a Tier 4 internal application at Recommended depth. No critical gaps. Lowest section scores are 3 (meets the minimum for production approval).