Simpler.Grants.gov Public Wiki
Grants.govSimpler.Grants.govGitHubDiscourse
  • 👋Welcome
  • GET INVOLVED
    • Why open source?
    • How to contribute code
    • How to file issues
      • Report a bug
      • Request a feature
      • Report a security vulnerability
    • Community guidelines
      • Code of Conduct
      • Reporting and removing content
      • Incident response protocol
    • Community events
      • Fall 2024 Coding Challenge
        • Event Submissions & Winners
      • Spring 2025 Collaborative Coding Challenge
        • Event Submissions & Winners
    • Communication channels
  • Product
    • Roadmap
    • Deliverables
      • 🏁Static site soft launch
      • 🏁Static site public launch
      • 🏁GET Opportunities
      • 🏁Open source onboarding
      • 🏁Co-Design Group planning
    • Decisions
      • ADR Template
      • ADRs
        • Dedicated Forum for Simpler.Grants.gov Community
        • Recording Architecture Decisions
        • Task Runner for the CI / CD Pipeline
        • API Language
        • Use Figma for design prototyping
        • ADR: Chat
        • DB Choices
        • API Framework and Libraries
        • Back-end Code Quality Tools
        • Front-end Language
        • Communications Tooling: Wiki Platform
        • Use Mural for design diagrams and whiteboarding
        • Ticket Tracking
        • Front-end Framework
        • Front-end Code Quality Tools
        • Front-end Testing & Coverage
        • Backend API Type
        • Front-end Testing & Coverage
        • Deployment Strategy
        • Use U.S. Web Design System for components and utility classes
        • FE server rendering
        • Use NPM over Yarn Architectural Decision Records
        • U.S. Web Design System in React
        • Communications Tooling: Video Conferencing
        • Back-end Production Server
        • Communications Tooling: Analytics Platform
        • Commit and Branch Conventions and Release Workflow
        • Cloud Platform to Host the Project
        • Infrastructure as Code Tool
        • Data Replication Strategy & Tool
        • HHS Communications Site
        • Communications Tooling: Email Marketing
        • Communications Tooling: Listserv
        • Use Ethnio for design research
        • Uptime Monitoring
        • Database Migrations
        • 30k ft deliverable reporting strategy
        • Public measurement dashboard architecture
        • Method and technology for "Contact Us" CTA
        • E2E / Integration Testing Framework
        • Logging and Monitoring Platform
        • Dashboard Data Storage
        • Dashboard Data Tool
        • Search Engine
        • Document Storage
        • Document Sharing
        • Internal Wiki ADR
        • Shared Team Calendar Platform
        • Cross-Program Team Health Survey Tool
        • Adding Slack Users to SimplerGrants Slack Workspace
        • Repo organization
        • Internal knowledge management
        • Migrate Existing API Consumers
      • Infra
        • Use markdown architectural decision records
        • CI/CD interface
        • Use custom implementation of GitHub OIDC
        • Manage ECR in prod account module
        • Separate terraform backend configs into separate config files
        • Database module design
        • Provision database users with serverless function
        • Database migration architecture
        • Consolidate infra config from tfvars files into config module
        • Environment use cases
        • Production networking long term state
    • Analytics
      • Open source community metrics
      • API metrics
  • DESIGN & RESEARCH
    • Brand guidelines
      • Logo
      • Colors
      • Grid and composition
      • Typography
      • Iconography
      • Photos and illustrations
    • Content guidelines
      • Voice and tone
    • User research
      • Grants.gov archetypes
  • REFERENCES
    • Glossary
  • How to edit the wiki
Powered by GitBook
On this page
  • Context and Problem Statement
  • Decision Drivers
  • Options Considered
  • Decision Outcome
  • Positive Consequences
  • Negative Consequences
  • Pros and Cons of the Options
  • Comments and Docstrings
  • Project Wiki
  • Links

Was this helpful?

Edit on GitHub
  1. Product
  2. Decisions
  3. ADRs

Recording Architecture Decisions

PreviousDedicated Forum for Simpler.Grants.gov CommunityNextTask Runner for the CI / CD Pipeline

Last updated 28 days ago

Was this helpful?

  • Status: Active

  • Last Modified: 2023-06-26

  • Related Issue:

  • Deciders: Lucas, Aaron, Billy

  • Tags: ADRs

Context and Problem Statement

Important decisions about the structure of a codebase, the tools or platforms adopted, and the scope or vision of a product are made all throughout a project's lifecycle. Often these decisions are made and changed blindly with little record of why that decision was made, making it difficult for other collaborators and even the original decision makers to understand the justification behind that decision in the future.

What is the best way to document key architectural decisions made within the project so that future contributors can understand the justification for those decisions?

Decision Drivers

  • Explicit: Important decisions about the project architecture should be clear and unambiguous

  • Documented: There should be a written record describing which decisions are made

  • Accessible: Decision records should be centrally located, searchable, and accessible to non-technical audiences

  • Portable: The decision records should be able to travel with the code when it's forked, cloned, etc.

  • Maintainable: The system we adopt should be easy to maintain or amend as needed.

  • Publicly Documented: Decisions should be part of the public record so that external stakeholders (including open source contributors) understand the rationale behind each decision.

Options Considered

  • ADRs in the repo documentation/decisions/adr folder

  • Comments and docstrings in the code itself

  • Articles in the project's Wiki

Decision Outcome

NOTE: We may want to revisit this decision to reconsider storing them in the Project Wiki once that wiki is established. Ideally ADRs could be drafted/edited and visible in the wiki but also synced with the repo -- some wiki solutions provide this option.

Positive Consequences

  • ADRs travel with the repo when it's cloned, forked, etc.

  • ADRs can be incorporated in the Issue and PR workflow

  • Changes to ADRs will be listed in the project's commit history

Negative Consequences

  • Certain urgent decisions may take longer to finalize if they need to be documented and agreed upon, slowing down the process of finalizing key decisions with the project

  • Unless regularly maintained and complied with, it could be easy for the ADRs to become out of sync with the actual decisions made about the architecture

  • If the project is organized as a set of microservices with different repositories, we'll have to decide whether to keep ADRs in a central repo or record those decisions in the repo to which they are relevant which may reduce discoverability and accessibility

  • Non-technical users may have a more challenging time creating and editing ADRs if they are not familiar with Markdown or GitHub

Pros and Cons of the Options

Comments and Docstrings

  • Pro

    • Decisions live alongside the code that implements them

    • Docstrings travel with the code when it's forked, cloned, etc.

    • Changes to docstrings and comments are part of the commit history

  • Cons

    • Not very accessible to non-technical audiences

    • Not centralized and difficult to search for

    • Hard to see the sequential evolution of decisions

Project Wiki

Documenting decisions in the Wiki tab on the project repository in GitHub.

  • Pro

    • Wikis are fairly searchable and accessible to non-technical audiences

  • Cons

    • Wikis are not forked with the main repo

    • Changes to the Wiki aren't easily integrated with the PR and Issue workflow

    • Changes to the Wiki aren't a part of the project's commit history

Links

Decisions will be documented using Architecture Decision Records (ADRs) as described by and the . The template for this project's ADRs will be adapted from the .

#34
Joel Parker Henderson
ADR GitHub organization
MADR template
ADR GitHub Organization
Joel Parker Henderson's ADR repo
GitHub Blog - Why Write ADRs