GSA / notifications-api

The API powering Notify.gov
Other
10 stars 1 forks source link

Consider and set up a structure for Architecture Decision Records (ADR) #282

Closed tdlowden closed 1 year ago

tdlowden commented 1 year ago

As a developer of the system, I'd like to be able to keep track of system architecture decisions and understand why they were made, including what trade-offs and alternatives might have existed at the time. I'd also like to keep track of these in a place that I can refer back to later for historical context.

Acceptance Critera

Implementation Sketch

There are several templates and recommendations we can draw from, including the following:

There are several others as well, including the template the cloud.gov team follows:

# *[short title of solved problem and solution]*

**User Story:** *[ticket/issue-number]* <!-- optional -->

*[context and problem statement]*
*[decision drivers | forces]* <!-- optional -->

## Considered Alternatives

* *[alternative 1]*
* *[alternative 2]*
* *[alternative 3]*
* *[...]* <!-- numbers of alternatives can vary -->

## Decision Outcome

* Chosen Alternative: *[alternative 1]*
* *[justification. e.g., only alternative, which meets KO criterion decision driver | which resolves force force | ... | comes out best (see below)]*
* *[consequences. e.g., negative impact on quality attribute, follow-up decisions required, ...]* <!-- optional -->

## Pros and Cons of the Alternatives <!-- optional -->

### *[alternative 1]*

* `+` *[argument 1 pro]*
* `+` *[argument 2 pro]*
* `-` *[argument 1 con]*
* *[...]* <!-- numbers of pros and cons can vary -->

### *[alternative 2]*

* `+` *[argument 1 pro]*
* `+` *[argument 2 pro]*
* `-` *[argument 1 con]*
* *[...]* <!-- numbers of pros and cons can vary -->

### *[alternative 3]*

* `+` *[argument 1 pro]*
* `+` *[argument 2 pro]*
* `-` *[argument 1 con]*
* *[...]* <!-- numbers of pros and cons can vary -->

Whatever we choose, we ought to keep it lightweight to start with and build from that.

Security Considerations

ADRs, by their very nature, contain many details about a system and often delve into a variety of related bits of information. This includes trade-offs of taking one approach over another, oftentimes with implications to the security and stability of the overall system. Therefore, we'll want to be mindful of the following:

ccostino commented 1 year ago

Flagging these resources as particularly useful references (they are linked to on the GitHub page):

There are a host of design considerations and anti-patterns noted in the first article, and great ideas for what to include in a template in the second and third.