Record Architecture Decisions โ€” to scale to many people + many timezones

Created on 14 June 2024, 5 months ago
Updated 3 July 2024, 5 months ago

Problem/Motivation

Experience Builder (XB) is a huge undertaking.

The vision is hard to understand, because all that exists are:

  1. product requirements spreadsheet
  2. a very limited Figma wireframe from Q3 2023
  3. a 0.x branch

(We're currently still awaiting more detailed wireframes.)

It's unclear what has been actually decided for XB:

  • at all
  • with which rationale
  • when
  • by whom

โ€ฆ because the XB 0.x branch is literally just a number of independent PoC branches hastily thrown together following Dries' announcement at DrupalCon, where contribution was invited. In an attempt to facilitate contribution from day 1, we threw that together.

In hindsight, that probably was a mistake. It gave a sense of firmness of direction that just doesn't exist: there is a notable absence of clarity on what has been decided or not.

The reality is that not a single technical decisions is set in stone โ€” it is all merely to explore what could meet all product requirements as we work towards a first concrete goal: ๐ŸŒฑ Milestone 0.1.0: Experience Builder Demo Active .

The current situation is not tenable.

We need, at least:

  1. product requirements broken down into concrete issues (a graph of issues, with concrete issues that can be implemented in a single MR) to work towards that first concrete goal (#3454094), โš ๏ธ knowing full well that these will be incomplete: we're first working towards that first concrete goal, then expanding scope
  2. a record of decisions (and these decisions may need to be revisited too)
  3. a diagram tying the product requirements + decisions together: ๐Ÿ“Œ [PP-1] Diagram tying the product requirements + decisions together Postponed

Steps to reproduce

N/A

Proposed resolution

I've long been wanting to follow Lullabot's example (https://www.lullabot.com/articles/improving-team-efficiency-architecture...). Even for XB, I've been wanting to do that for a while now (apparently since April 4).

Quoting myself from a conversation with @e0ipso on May 24:

I proposed [โ€ฆ] to start adopting ADRs to document decisions that were made. Thatโ€™d allow us to stop rehashing past conversations and allow people to onboard with fewer meetings.
โ€ฆ or so I think.

Because I think that ADRs could be an excellent way to scale this project up to A) many people, B) many timezones.

Iโ€™d love to hear your thoughts on that idea/proposal. I have zero experience with ADRs. (Iโ€™d also be happy for somebody else to run the ADR part of this if they feel that calling ๐Ÿ˜„)

I've spoken to the following people, and they all were +1 to giving it a try:

  • @tim.plunkett
  • @jessebaker
  • @lauriii
  • @effulgentsia

Now having actually read https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions, the status part of it perfectly fits the agile development (๐Ÿ™„) we're doing for XB.

Lullabot even built a static site generator for them: https://github.com/Lullabot/gatsby-theme-adr โ€” this makes sense for them as an organization and to share their best practices with the Drupal community.

But for the scope of this project, that seems overkill: we don't need a static site, just a directory in the repo will do, especially because Drupal.org's GitLab instance will happily render the Markdown it's stored in. It appears to work fine for the Home Assistant project: https://github.com/home-assistant/architecture/tree/master/adr.

So let's just run with the simplest possible thing:

  • use https://github.com/npryce/adr-tools, which uses a simple Markdown format
  • rely on GitLab to make the ADRs human-readable
  • โ€ฆ which means it's as simple as
    adr new This Is A New Decision
    

    to generate the next ADR.

Remaining tasks

Do it.

User interface changes

None.

API changes

None.

Data model changes

None.

๐Ÿ“Œ Task
Status

Fixed

Component

Documentation

Created by

๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Merge Requests

Comments & Activities

  • Issue created by @wim leers
  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ
  • Merge request !59Resolve #3454669 "Adrs" โ†’ (Merged) created by wim leers
  • Issue was unassigned.
  • Status changed to Needs review 5 months ago
  • Status changed to RTBC 5 months ago
  • ๐Ÿ‡ซ๐Ÿ‡ฎFinland lauriii Finland
  • ๐Ÿ‡บ๐Ÿ‡ธUnited States tim.plunkett Philadelphia
  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ

    https://git.drupalcode.org/issue/experience_builder-3454669/-/blob/34546... looks perfectly readable in the GitLab UI, so โ€ฆ going ahead and merging this rather than waiting for explicit repeated +1s โ€” assuming the "yep, let's try it" reactions from the 4 mentioned people are sufficient to go ahead.

  • Pipeline finished with Skipped
    5 months ago
    #199086
  • Status changed to Fixed 5 months ago
  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ
  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ
  • ๐Ÿ‡บ๐Ÿ‡ธUnited States ctrladel North Carolina, USA

    Another possible home for the ADRs is the project's gitlab wiki. I think it's available to our poejcts but not sure if our unique contrib flow would work well with them. Gitlab does create a new repo just for the wiki, all changes to wiki are recorded as commits, and it supports markdown so overall sounds like it could work?

  • e0ipso Can Picafort

    One small suggestion, do not ever edit an accepted record. Only make cosmetic changes to it. If you need to change it, deprecate it and write a new one. Write why you are deprecating it on the new one. Links back and forth should be present in both ADRs.

    WRT #12 we have seen much better results when the ADRs are in the repo. In our experience, putting them as close as possible to the code helps developers maintain them.

  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ

    #12: see #13 โ€” @e0ipso wrote what I was thinking ๐Ÿ˜„

    #13: +1 to never editing accepted CRs. Thanks for the advice! โค๏ธ

  • ๐Ÿ‡จ๐Ÿ‡ฆCanada deviantintegral

    This is great to see! I think your current blog posts could be good ways to highlight or announce new ADRs, since I don't see an RSS feed or similar coming out from GitLab.

    If you do decide you want to generate a site - we're actually in the process of rebuilding ours in 11ty. We're hoping its done in the next month or so. It's already quite an improvement on build time and developer experience than Gatsby. So, please reach out if you could use that so you don't have to rebuild later unless you want to.

    As far as editing ADRs go, we are a little more flexible than "cosmetic" changes. Let's say that a drush command changes names in our example docs. In that case, we wouldn't write a new one since the decision itself hasn't changed - just the implementation. But you have lots of room to try and learn given this is the first time this is being used in core-adjacent development.

  • ๐Ÿ‡ง๐Ÿ‡ชBelgium wim leers Ghent ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡บ
    This is great to see! I think your current blog posts could be good ways to highlight or announce new ADRs, since I don't see an RSS feed or similar coming out from GitLab.

    ๐Ÿ’ฏ

    If you do decide you want to generate a site

    I mean โ€ฆ if we can get that generated from within GitLab CI and host it on GitLab Pages (much like ๐Ÿ“Œ CI: host static version of UI in GitLab Pages Fixed ), then I'd welcome an MR with open arms! ๐Ÿ˜„

    Let's say that a drush command changes names in our example docs [โ€ฆ]

    That wouldn't change the meaning of the decision though, that's just keeping names in sync. I'd call that "cosmetic" too ๐Ÿค“ But potato, potahto I guess ๐Ÿ˜„

    But you have lots of room to try and learn given this is the first time this is being used in core-adjacent development.

    ๐Ÿ’ฏ โ€” and I'll continue to very much welcome your advice!

    P.S.: retroactively crediting both of you, @e0ipso and @deviantintegral, because you've both influenced this! ๐Ÿ™๐Ÿ˜Š

  • Automatically closed - issue fixed for 2 weeks with no activity.

Production build 0.71.5 2024