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&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>… 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> — 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), ⚠️ 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 […] 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.<br>
… 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’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 😄)
</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 (🙄) 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> — 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>… 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