Record Architecture Decisions — to scale to many people + many timezones
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3454669. --> Reported by: [wim leers](https://www.drupal.org/user/99777) Related to !59 >>> <h3 id="summary-problem-motivation">Problem/Motivation</h3> <p>Experience Builder (XB) is a <em>huge</em> undertaking.</p> <p>The vision is hard to understand, because all that exists are:</p> <ol> <li><a href="https://docs.google.com/spreadsheets/d/1OpETAzprh6DWjpTsZG55LWgldWV_D8jNe9AM73jNaZo/edit#gid=1721130122">product requirements spreadsheet</a></li> <li>a very limited <a href="https://www.figma.com/design/RDBTpKh82Ku4WHGaKuE6WR/Next-Gen-Page-Building-Wireframes?node-id=0-1&amp;t=P76OKhwHJPQE8tyz-0">Figma wireframe from Q3 2023</a></li> <li><a href="https://git.drupalcode.org/project/experience_builder/-/commits/0.x/?ref_type=HEADS">a <code>0.x</code> branch</a></li> </ol> <p>(We're currently still awaiting more detailed wireframes.)</p> <p>It's unclear what has been <em>actually decided</em> for XB:</p> <ul> <li><em>at all</em></li> <li>with which rationale</li> <li>when</li> <li>by whom</li> </ul> <p>&hellip;&nbsp;because the <a href="https://git.drupalcode.org/project/experience_builder/-/commits/0.x/?ref_type=HEADS">XB <code>0.x</code> branch</a> is literally just a number of independent PoC branches hastily thrown together following <a href="https://dri.es/state-of-drupal-presentation-may-2024">Dries' announcement at DrupalCon</a>, where contribution was invited. In an attempt to facilitate contribution from day 1, we threw that together.</p> <p>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.</p> <p><strong>The reality is that not a single technical decisions is set in stone</strong> &mdash; it is all merely to explore what <em>could</em> meet <a href="https://docs.google.com/spreadsheets/d/1OpETAzprh6DWjpTsZG55LWgldWV_D8jNe9AM73jNaZo/edit#gid=1721130122">all product requirements</a> as we work towards a first concrete goal: <span class="drupalorg-gitlab-issue-link project-issue-status-info project-issue-status-7"><a href="https://www.drupal.org/project/experience_builder/issues/3454094" title="Status: Closed (fixed)">#3454094: Milestone 0.1.0: Experience Builder Demo</a></span>.</p> <p>The current situation is not tenable.</p> <p>We need, at least:</p> <ol> <li><strong>product requirements</strong> broken down into concrete issues (a graph of issues, with concrete <q>Task</q> issues that can be implemented in a single MR) to work towards that first concrete goal (#3454094), &#9888;&#65039; knowing full well that these will be incomplete: we're first working towards that first concrete goal, <em>then</em> expanding scope</li> <li>a record of <strong>decisions</strong> (and these decisions may need to be revisited too)</li> <li>a diagram tying the product requirements + decisions together: <span class="drupalorg-gitlab-issue-link project-issue-status-info project-issue-status-7"><a href="https://www.drupal.org/project/experience_builder/issues/3454677" title="Status: Closed (fixed)">#3454677: Diagram tying the product requirements + decisions together</a></span></li> </ol> <h4 id="summary-steps-reproduce">Steps to reproduce</h4> <p>N/A</p> <h3 id="summary-proposed-resolution">Proposed resolution</h3> <p>I've long been wanting to follow Lullabot's example (<a href="https://www.lullabot.com/articles/improving-team-efficiency-architecture-decision-records">https://www.lullabot.com/articles/improving-team-efficiency-architecture-decision-records</a>). Even for XB, I've been wanting to do that for a while now (apparently <a href="https://git.drupalcode.org/project/experience_builder/-/blob/88b92e3e8836b79139dd23fc917b3c3b1dc71f90/src/Cache/DesignAndLayoutVersionCacheContext.php#L19">since April 4</a>).</p> <p>Quoting myself from a conversation with @e0ipso on May 24:</p> <blockquote><p> I proposed [&hellip;] to start adopting ADRs to document decisions that were made. That&rsquo;d allow us to stop rehashing past conversations and allow people to onboard with fewer meetings.<br> &hellip; or so I think.</p> <p>Because I think that ADRs could be an excellent way to scale this project up to A) many people, B) many timezones.</p> <p>I&rsquo;d love to hear your thoughts on that idea/proposal. I have zero experience with ADRs. (I&rsquo;d also be happy for somebody else to run the ADR part of this if they feel that calling &#128516;) </p></blockquote> <p>I've spoken to the following people, and they all were +1 to giving it a try:</p> <ul> <li>@tim.plunkett</li> <li>@jessebaker</li> <li>@lauriii</li> <li>@effulgentsia</li> </ul> <p>Now having actually read <a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions">https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions</a>, the <code>status</code> part of it perfectly fits the agile development (&#128580;) we're doing for XB.</p> <p>Lullabot even built a static site generator for them: <a href="https://github.com/Lullabot/gatsby-theme-adr">https://github.com/Lullabot/gatsby-theme-adr</a> &mdash; this makes sense for them as an organization and to share their best practices with the Drupal community.</p> <p>But for the scope of <em>this</em> 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: <a href="https://github.com/home-assistant/architecture/tree/master/adr">https://github.com/home-assistant/architecture/tree/master/adr</a>.</p> <p>So let's just run with the simplest possible thing:</p> <ul> <li>use <a href="https://github.com/npryce/adr-tools">https://github.com/npryce/adr-tools</a>, which uses a simple Markdown format </li><li>rely on GitLab to make the ADRs human-readable </li><li>&hellip; which means it's as simple as<br> <pre>adr new This Is A New Decision</pre><p> to generate the next ADR.</p></li> </ul> <h3 id="summary-remaining-tasks">Remaining tasks</h3> <p>Do it.</p> <h3 id="summary-ui-changes">User interface changes</h3> <p>None.</p> <h3 id="summary-api-changes">API changes</h3> <p>None.</p> <h3 id="summary-data-model-changes">Data model changes</h3> <p>None.</p>
issue