Google Sign-In Required

Use your company Google account to access the BetterFleet private content.

Back to private home

BetterFleet Support Private
Skip to content
BetterFleet Dev Wiki
Architecture Decision Records
Initializing search
    bf-dev
    • Home
    • Process
    • Products
    • Reference
    • Decisions
    • Work
    • Operations
    bf-dev
    • Home
      • Process Handbook
      • BetterFleet Workflow Map
      • Product Development System
      • Product Engineering Workflow
        • Process Workflows
        • Work Intake and Weekly Planning
        • Product Engineering Workflow in Linear
        • Product Engineering Delivery
        • Agent Guidance
        • Workflow
        • Skills
        • Skill Sources
        • Process Guides
        • GitLab Feature Flags
        • In-App Docs Authoring
        • Release Notes
        • Process Templates
        • Release Plan: <title>
      • Process Publishing
      • Product overview
        • General Reference
          • Core Domain Training
          • System Topology
          • Two-Axis Ontology Model
          • Ontology Primer
          • Worked Example
          • Evidence, Ownership, and Lineage
          • Energy Management
          • Standards and Protocol Map
          • Charging, Roaming, and Commercial Model
          • Charge Planning and Operations
          • Cross-Cutting Domains
          • Domain Coverage Matrix
        • BetterFleet Product Ontology
        • Core Operations Data Ontology
        • BetterFleet R&D Plan
        • Index
        • Architecture
        • Manage Product Capabilities
        • Manage Data and State
        • Manage Service Interaction Flows
        • Manage Reference
        • Manage Internal Application Diagrams
          • Manage Authorization And Permissions
          • bf-manage-core Auth and Authorization Model
          • Manage Authorization and Permissions
          • bf-manage-web Auth and Permission Model
          • Manage Service Catalog
          • bf-depot-sim
          • bf-digital-twin (Manage Role)
          • bf-fleet-health
          • bf-manage-connect
          • bf-manage-core
          • bf-manage-incidents
          • bf-manage-roaming
          • bf-manage-sitepwrmon
          • bf-manage-web
          • bf-schedule-creator (Manage Role)
          • bf-support-microsite
          • bf-telematics
        • Index
        • Architecture
        • Plan Reference
        • Plan Internal Application Diagrams
        • Plan Migration and Flags
        • Plan Simulation Request Lifecycle
          • Plan Service Catalog
          • bf-bnl-schedule-analysis-compute
          • bf-bnl-settings
          • bf-bnl-ui
          • bf-digital-twin (Plan Role)
          • bf-route-modelling
          • bf-schedule-creator (Plan Role)
      • Where to Ask Product Questions
      • Reference
        • Platform Reference
        • Platform Architecture
        • Script Runtime Model
        • Compose Profiles and Modes
        • Repository Map
        • Monolithic Git Transition FAQ
        • Monolithic Git Sizing
        • CI and Release Integration
        • Shared Reference
        • Shared Infrastructure Architecture
        • Secrets and Env Strategy
        • Vendors and Local Dependencies
        • System Reference
        • Cloud Data Dependencies
        • Ports and URLs
        • Service Matrix
          • API Docs
          • OCPI API Docs
          • OCPP API Docs
          • OSCP API Docs
          • VDV API Docs
          • Yard State API Docs
        • System Design
        • System Design: BBA Microgrid Controller Generic Packet Translation
        • System Design: Depot Simulation
        • System Design: IoT Sensor Packet
        • System Design: Microgrid Energy Orchestration
          • System Design: OCPP Profile 3 And ISO 15118 PKI
          • Architecture: BetterFleet OCPP Profile 3 and ISO 15118 PKI
          • Specification: BetterFleet OCPP Profile 3 and ISO 15118 Certificate Lifecycle Management
          • System Design: On-Prem Control
          • Challenge
          • Specification: BetterFleet On-Prem Continuity Control
          • System Design: OSCP
          • OSCP Protocol Documentation
          • Depot Sim Testing Requirements
          • System Design: OSCP Flexibility Provider Domain
      • Decisions
        • Architecture Decision Records
          • Working Rule
          • ADRs
          • Notes
          • Guidance
            • When and how to record an ADR
        • 0001 - Record architecture decisions
        • 0002 - Cognito for Authentication and Authorisation
        • 0003 - AWS Amplify for Authentication
        • 0004 - DynamoDB for default database
        • 0005 - Data Persistence
        • 0006 - Trunk-Based Development
        • 0007 - Generalised principle for automation
        • 0008 - Naming Repositories, Services, and URLs
        • 0009 - Use Timezone Aware DateTimes and UTC
        • 0010 - Use semantic release
        • 0011 - Centralized feature flag repository
        • 0012 - Use Named Exports in Storybook
        • 0013 - RESTful TITLE GraphQL
        • 0014 - Service Granularity
        • 0015 - Async/co-routine exception handling pattern
        • 0016 - Logging & log levels
        • 0017 - Instantiated Models
        • 0018 - Repository Pattern for Database Access
        • 0019 - Use of Design Tokens in TypeScript React Application
        • 0020 - API backwards compatibility and versioning
        • 0021 - Alembic Migration strategy
        • 0022 - Consistent react-hook-form usage
        • 0023 - Domain Event-Driven Architecture
        • 0024 - Domain Event Bus Tech Stack
        • 0025 - No enum types in DB table columns
        • 0026 - In-Memory Ormar Stores for Repository testing
        • 0027 - Storing Tab State in Query and Local Storage
        • 0028 - Adopt OpenTelemetry Semantic Conventions for Structured Logging
        • 0029 - Adopt RFC 9457 for HTTP Error Responses
        • 0030 - Use GitLab registry and Terraform state for ECS services
        • 0031 - Adopt DDD, Hexagonal Architecture, and CQRS for Python Domain Services
      • Work
        • Active Work
          • Work: Bba Microgrid Controller
          • Implementation Specification: BBA Microgrid Controller
          • BBA Microgrid Controller Deliverables (Stories)
          • Work: BFDev Monolithic Git
          • Challenge
          • Specification: BFDev Monolithic Git v2
          • BFDev Monolithic Git v2 Stories
          • Work: Complex Circuit Load Balancing
          • Implementation Specification: Complex Circuit Load Balancing
          • Complex Circuit Load Balancing Deliverables (Stories)
            • COR-10 and COR-11 Consolidation Review
          • Work: Dispatch Reliability and Reconciliation
          • Challenge
          • Specification: Dispatch Reliability and Reconciliation
          • Dispatch Reliability and Reconciliation (Unit User Stories)
            • Dispatch populated vehicle cards grey surface snapshot
            • Dispatch Visual Review
          • Work: Enable Scheduled Managed Charger Access
          • Challenge: Enable Scheduled Managed Charger Access
          • Specification Exploration Dossier: Enable Scheduled Managed Charger Access
          • Specification Review: Enable Scheduled Managed Charger Access
          • Specification: Enable Scheduled Managed Charger Access
          • Work: Guided Cut-Off and Release Orchestration
          • Specification: Guided Cut-Off and Release Orchestration
          • Guided Cut-Off and Release Orchestration (Unit User Stories)
          • Work: Production Deployment Validation
          • Challenge
          • Work: Scheduled Report Parity
          • Specification: Scheduled Report Parity
          • Work: Telematics
          • Telematics EventBridge Path
          • Telematics Ingress Architecture
          • Specification: Telematics Migration into bf-manage-core with 5-Minute Freshness and Health Visibility
          • Telematics Core Migration MVP (Implementation-Time BDD)
          • Work: Vector Derms
          • Implementation Specification: Vector DERMS
          • Vector DERMS Deliverables (Stories)
          • Work: Visiting Vehicle Charging Visibility
          • Specification: Visiting Vehicle Charging Visibility
          • Visiting Vehicle Charging Visibility (Unit User Stories)
          • Work: Workspace Owned Stripe Roaming
          • Specification: Workspace-Owned Stripe Credentials for Roaming Payments
        • Backlog Work
          • Work: Microgrid
          • Microgrid Backlog Stories
          • Work: Mobile Ops Companion
          • Challenge
          • Specification: Mobile Operations Companion v1
          • Mobile Operations Companion Deliverables (Stories)
          • Work: Oscp
          • OSCP Backlog Stories
        • Archived Work
          • Work: Code Canonical Orchestration
          • Challenge
          • Specification: Product Engineering Workflow
          • Product Engineering Workflow Deliverables (Unit User Stories)
          • Work: Release Notes Automation
          • Release Plan: Release Notes Automation
          • Release Notes Automation Backlog Stories
      • Operations
      • Onboarding Runbook
        • Operations Runbooks
        • Production Hotfix Release
        • Staging Hotfix Release
        • Manage Staging Release Validation
        • Terraform Plan Dry Runs
        • Operations Tooling
        • Code Indexing
        • Operations Evidence
        • Database Restoration Test Report
      • Daily Operations Runbook
      • Testing Guide
      • Troubleshooting
    • Working Rule
    • ADRs
    • Notes
    • Guidance
      • When and how to record an ADR
    1. Home
    2. Decisions
    3. Adrs
    Resilience & Security Security & Access Control decisions general

    Architecture Decision Records¶

    This directory is the code-native home for BetterFleet-wide architecture decision records. Product-specific ADRs should live in the relevant product repository, but cross-product decisions belong here.

    Working Rule¶

    • Before changing shared architecture, platform conventions, API standards, persistence strategy, observability, delivery conventions, or cross-service patterns, review the relevant ADRs here.
    • If a change intentionally conflicts with an accepted ADR, update or supersede the ADR in the same change rather than silently drifting from it.
    • Create and maintain BetterFleet-wide ADRs in this repo.

    ADRs¶

    ADR Status Date
    0001 - Record architecture decisions Accepted 2022-05-26
    0002 - Cognito for Authentication and Authorisation Accepted 2022-05-27
    0003 - AWS Amplify for Authentication Accepted 2022-05-27
    0004 - DynamoDB for default database Superseded by 0005 - Data Persistence 2022-06-17
    0005 - Data Persistence Accepted 2022-09-21
    0006 - Trunk-Based Development Accepted 2022-11-17
    0007 - Generalised principle for automation Accepted 2022-11-18
    0008 - Naming Repositories, Services, and URLs Accepted 2022-11-24
    0009 - Use Timezone Aware DateTimes and UTC Accepted 2022-12-20
    0010 - Use semantic release Accepted 2023-01-10
    0011 - Centralized feature flag repository Accepted 2023-02-15
    0012 - Use Named Exports in Storybook Accepted 2023-02-21
    0013 - RESTful TITLE GraphQL Accepted 2023-05-22
    0014 - Service Granularity Proposed 2023-05-22
    0015 - Async/co-routine exception handling pattern Proposed 2024-01-10
    0016 - Logging & log levels Proposed 2024-01-16
    0017 - Instantiated Models Proposed 2024-02-07
    0018 - Repository Pattern for Database Access Accepted 2024-05-16
    0019 - Use of Design Tokens in TypeScript React Application <Proposed \| Accepted \| Rejected \| Deprecated \| Superseded by x> 13/06/2024
    0020 - API backwards compatibility and versioning Proposed 2025-01-24
    0021 - Alembic Migration strategy Unknown Unknown
    0022 - Consistent react-hook-form usage Unknown Unknown
    0023 - Domain Event-Driven Architecture Proposed 2025-09-01
    0024 - Domain Event Bus Tech Stack Proposed 2025-09-02
    0025 - No enum types in DB table columns Accepted 2025-10-30
    0026 - In-Memory Ormar Stores for Repository testing Proposed 2024-11-13
    0027 - Storing Tab State in Query and Local Storage Proposed 2025-11-24
    0028 - Adopt OpenTelemetry Semantic Conventions for Structured Logging Proposed Unknown
    0029 - Adopt RFC 9457 for HTTP Error Responses Proposed Unknown
    0030 - Use GitLab registry and Terraform state for ECS services Accepted 2026-04-29
    0031 - Adopt DDD, Hexagonal Architecture, and CQRS for Python Domain Services Proposed 2026-05-11

    Notes¶

    • 0019 still carries a placeholder status line.
    • 0021 and 0022 do not currently expose explicit Date or Status headings.
    • 0028 and 0029 do not currently expose explicit Date headings.
    • 0004 remains marked as superseded so the decision history stays intact.

    Guidance¶

    Architecture Decision Records (ADRs) are a way to record decisions that we make in our architecture. An architectural decision can simply be viewed as decisions that may be expensive to change later.

    This list of ADRs are ones that apply across all our products. Individual repositories should their own list, stored in the repository, that is specific to that product. adr-tools can be used to create and manage these, both for the handbook and individual projects.

    We’re using the Decision record template from Michael Nygard.

    When and how to record an ADR¶

    As above, any time an decision could be expensive to change later, it's good to get a clear understanding for that. It could be around the use of a specific pattern, or 3rd party library, database, etc.

    If the decision has already been made with consensus (making sure relevant people have had a say), it just needs to be documented as Accepted. If it's a decision that should get input from more people, create it as Proposed, and circulate to the team to add comments to the page. When the decision has been suitable shaped and ratified, set it to Accepted.

    Sometimes, a decision will supersede another decision. In that case, update the status of the superseded ADR to "Superseded by x", with a document link to the superseding ADR.

    Also, set the page icon accordingly, to quickly convey status in the side menu: ❓= Proposed βœ… = Accepted ❌ = Rejected, Deprecated, Superseded

    Made with Material for MkDocs
    BFDev Docs Assistant
    New conversation?
    Ask one focused question at a time, this helps the assistant provide accurate answers about what's been implemented in BetterFleet.