<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lullabot's Architecture Decisions</title>
    <description>A collection of processes, designs, and tools our team has standardized on.</description>
    <language>en-us</language>
    <link>https://architecture.lullabot.com/</link>
    <atom:link href="https://architecture.lullabot.com/rss.xml" rel="self" type="application/rss+xml"/>
    <generator>Eleventy v3.1.5</generator>
    <lastBuildDate>Mon, 18 May 2026 01:16:22 GMT</lastBuildDate>
    <copyright>2026  Lullabot, Inc. CC-BY 4.0.</copyright>
    
  <item>
    <title>Always pin GitHub Actions to a commit hash</title>
    <link>https://architecture.lullabot.com/adr/20260505-pin-github-actions-to-hash/</link>
    <description>GitHub Actions referenced by a mutable tag or branch can be silently replaced with malicious code, exposing CI/CD secrets across every repository that uses them.</description>
    <category>ci, security</category>
    <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260505-pin-github-actions-to-hash/</guid>
  </item>
  <item>
    <title>Use Stylelint</title>
    <link>https://architecture.lullabot.com/adr/20260421-use-stylelint/</link>
    <description>Using Stylelint helps prevent errors and keeps code in a consistent format.</description>
    <category>front-end, css</category>
    <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260421-use-stylelint/</guid>
  </item>
  <item>
    <title>Use Tagify for entity autocomplete widgets in Drupal</title>
    <link>https://architecture.lullabot.com/adr/20260414-use-tagify/</link>
    <description>Drupal&#39;s default entity reference autocomplete widget has limited UX. A modern, well-supported replacement is needed and the Tagify module has been successfully used in several Lullabot projects.</description>
    <category>drupal, contrib-modules, editorial-experience</category>
    <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260414-use-tagify/</guid>
  </item>
  <item>
    <title>Use composer audit in automated checks for known security vulnerabilities</title>
    <link>https://architecture.lullabot.com/adr/20260410-composer-audit/</link>
    <description>Third-party dependencies can introduce known security vulnerabilities at any time, so projects need an automated mechanism to detect them early.</description>
    <category>composer, security, ci</category>
    <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260410-composer-audit/</guid>
  </item>
  <item>
    <title>Use PHPStan for PHP code static analysis at level 6</title>
    <link>https://architecture.lullabot.com/adr/20260320-use-phpstan/</link>
    <description>Static analysis catches type errors, logic bugs, and unsafe code paths without running the application, improving code quality at low cost.</description>
    <category>php, drupal, ci</category>
    <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260320-use-phpstan/</guid>
  </item>
  <item>
    <title>Only allow developers and site administrators access to the default Drupal files listing</title>
    <link>https://architecture.lullabot.com/adr/20260320-files-listing-access/</link>
    <description>Drupal&#39;s built-in files listing at `/admin/content/files` is a technical tool that has caused editorial confusion and accidental data loss.</description>
    <category>drupal, access-control, media, editorial-experience</category>
    <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260320-files-listing-access/</guid>
  </item>
  <item>
    <title>Use `access_unpublished` for password-protected pages</title>
    <link>https://architecture.lullabot.com/adr/20260313-use-access-unpublished/</link>
    <description>Some pages need to be accessible only to specific groups or individuals using a password or token, without requiring a full user account.</description>
    <category>drupal, contrib-modules, access-control</category>
    <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260313-use-access-unpublished/</guid>
  </item>
  <item>
    <title>Use the term &quot;microcontent&quot; to describe embeddable content from the same website</title>
    <link>https://architecture.lullabot.com/adr/20260313-microcontent-terminology/</link>
    <description>Teams have used inconsistent terminology — including &quot;micro-content&quot;, &quot;component&quot;, &quot;embeds&quot;, and &quot;inline content&quot; — to describe content that is embedded within pages but never exists independently.</description>
    <category>drupal, content-modeling, editorial-experience</category>
    <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260313-microcontent-terminology/</guid>
  </item>
  <item>
    <title>Use &#39;drush deploy&#39; when building Drupal sites</title>
    <link>https://architecture.lullabot.com/adr/20260313-drupal-build-steps/</link>
    <description>When updating Drupal code and configuration in a given environment, it&#39;s useful to make sure all members of the team and all teams follow a consistent set of steps, in the same order. Having consistent steps across multiple projects will reduce onboarding for new team members.</description>
    <category>drush, drupal, deployments</category>
    <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20260313-drupal-build-steps/</guid>
  </item>
  <item>
    <title>Self-host Third-Party Static Assets</title>
    <link>https://architecture.lullabot.com/adr/20251219-self-host-third-party-static-assets/</link>
    <description>Third-party hosted assets (e.g. web fonts, icon libraries) can lead to performance, privacy, and reliability issues. These include GDPR violations, extra DNS lookups, and outages outside the organization control.</description>
    <category>front-end, performance, javascript, css</category>
    <pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20251219-self-host-third-party-static-assets/</guid>
  </item>
  <item>
    <title>Layer elements deliberately with stacking contexts</title>
    <link>https://architecture.lullabot.com/adr/20251210-create-deliberate-stacking-contexts/</link>
    <description>Overlap elements predictably by creating new stacking contexts for `z-index` values.</description>
    <category>front-end, css</category>
    <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20251210-create-deliberate-stacking-contexts/</guid>
  </item>
  <item>
    <title>The main branch of a project should always be ready to deploy to production</title>
    <link>https://architecture.lullabot.com/adr/20251125-main-deployable/</link>
    <description>Even with the best planning, unexpected bugs and security issues can require a fast deployment to production. By ensuring the main branch is always deployable, we minimize additional development work and QA in the case of an unplanned deployment.</description>
    <category>devops</category>
    <pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20251125-main-deployable/</guid>
  </item>
  <item>
    <title>Use Renovate for third-party dependency updates</title>
    <link>https://architecture.lullabot.com/adr/20251120-use-renovate/</link>
    <description>Renovate supports automatic updates across a wide variety of ecosystems ensuring our projects are secure and up to date.</description>
    <category>drupal, devops, security</category>
    <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20251120-use-renovate/</guid>
  </item>
  <item>
    <title>Use SVG view box instead of width and height</title>
    <link>https://architecture.lullabot.com/adr/20251008-use-svg-viewbox/</link>
    <description>Using viewBox improves maintainability.</description>
    <category>front-end, performance</category>
    <pubDate>Wed, 08 Oct 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20251008-use-svg-viewbox/</guid>
  </item>
  <item>
    <title>Use human-readable names as exposed filter identifiers in Views</title>
    <link>https://architecture.lullabot.com/adr/20250924-human-readable-views-filters/</link>
    <description></description>
    <category>drupal, editorial-experience, views</category>
    <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250924-human-readable-views-filters/</guid>
  </item>
  <item>
    <title>Enforce Twig coding standards with automatic linting</title>
    <link>https://architecture.lullabot.com/adr/20250922-use-twig-coding-standard/</link>
    <description>Linters like twigcs keep code more consistent and readable</description>
    <category>twig, drupal, front-end</category>
    <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250922-use-twig-coding-standard/</guid>
  </item>
  <item>
    <title>Use ImageMagick with Drupal</title>
    <link>https://architecture.lullabot.com/adr/20250409-use-imagemagick-with-drupal/</link>
    <description>Drupal requires the GD PHP extension, but many sites prefer ImageMagick for better performance, flexibility, and reliability. This choice affects image features, speed, and deployment in various hosting environments.</description>
    <category>drupal, images</category>
    <pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250409-use-imagemagick-with-drupal/</guid>
  </item>
  <item>
    <title>Avoid using jQuery</title>
    <link>https://architecture.lullabot.com/adr/20250416-avoid-using-jquery/</link>
    <description>jQuery is an unnecessary dependency for modern browsers.</description>
    <category>front-end, javascript</category>
    <pubDate>Wed, 16 Apr 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250416-avoid-using-jquery/</guid>
  </item>
  <item>
    <title>Use relative units in CSS for resizable content</title>
    <link>https://architecture.lullabot.com/adr/20250320-use-relative-units-in-css/</link>
    <description>Using relative units improves accessibility by ensuring that text and content does not overlap when zooming web pages or changing the base font size.</description>
    <category>front-end, css</category>
    <pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250320-use-relative-units-in-css/</guid>
  </item>
  <item>
    <title>Use only one h1 on each page</title>
    <link>https://architecture.lullabot.com/adr/20250124-use-one-h1-per-page/</link>
    <description>Using one h1 on each page is best practice for accessibility and usability.</description>
    <category>drupal, accessibility</category>
    <pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250124-use-one-h1-per-page/</guid>
  </item>
  <item>
    <title>Use description template for upstream patches in composer</title>
    <link>https://architecture.lullabot.com/adr/20250109-use-issue-template-patches/</link>
    <description>When managing patches in a `composer.json` file, clear and consistent descriptions improve maintainability and facilitate tooling. Currently, there is no standard template for describing patches, leading to inconsistent documentation.</description>
    <category>composer</category>
    <pubDate>Thu, 09 Jan 2025 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20250109-use-issue-template-patches/</guid>
  </item>
  <item>
    <title>Use 11ty to manage the ADRs</title>
    <link>https://architecture.lullabot.com/adr/20240924-11ty-adr/</link>
    <description>We need a site generator to publish our ADRs.</description>
    <category>meta</category>
    <pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20240924-11ty-adr/</guid>
  </item>
  <item>
    <title>Document project setup in README.md</title>
    <link>https://architecture.lullabot.com/adr/20240820-project-docs/</link>
    <description>Documentation for getting started on a project should always be found in the same place and use the same formatting.</description>
    <category>documentation</category>
    <pubDate>Tue, 20 Aug 2024 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20240820-project-docs/</guid>
  </item>
  <item>
    <title>Use SVGs for icons</title>
    <link>https://architecture.lullabot.com/adr/20240221-use-svg-icons/</link>
    <description>Using SVGs for icons has the best display, performance, and accessibility</description>
    <category>front-end, accessibility, performance</category>
    <pubDate>Wed, 21 Feb 2024 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20240221-use-svg-icons/</guid>
  </item>
  <item>
    <title>Do not use placeholder text in form fields</title>
    <link>https://architecture.lullabot.com/adr/20240212-do-not-use-placeholders-forms/</link>
    <description>Placeholder text introduces significant usability and accessibility issues and should be avoided.</description>
    <category>drupal, editorial-experience</category>
    <pubDate>Mon, 12 Feb 2024 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20240212-do-not-use-placeholders-forms/</guid>
  </item>
  <item>
    <title>Order content type form fields based on content priority</title>
    <link>https://architecture.lullabot.com/adr/20231110-field-order-as-in-page/</link>
    <description>When content types have dedicated pages, matching the display order when possible makes edit forms easier to understand.</description>
    <category>drupal, editorial-experience</category>
    <pubDate>Fri, 10 Nov 2023 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20231110-field-order-as-in-page/</guid>
  </item>
  <item>
    <title>Load JavaScript as external resource with defer attribute</title>
    <link>https://architecture.lullabot.com/adr/20231027-javascript-loading-defaults/</link>
    <description>Loading JavaScript as deferred has the best default performance</description>
    <category>javascript, front-end, performance</category>
    <pubDate>Fri, 27 Oct 2023 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20231027-javascript-loading-defaults/</guid>
  </item>
  <item>
    <title>Standardize the order of steps when building a Drupal site</title>
    <link>https://architecture.lullabot.com/adr/20230929-drupal-build-steps/</link>
    <description>When updating Drupal code and configuration in a given environment, it&#39;s useful to make sure all members of the team and all teams follow a consistent set of steps, in the same order. Having consistent steps across multiple projects will reduce onboarding for new team members.</description>
    <category>drush, drupal, deployments</category>
    <pubDate>Wed, 04 Oct 2023 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20230929-drupal-build-steps/</guid>
  </item>
  <item>
    <title>Load JavaScript as external resource with async and defer attributes</title>
    <link>https://architecture.lullabot.com/adr/20230804-javascript-loading-defaults/</link>
    <description>Loading JavaScript as async &amp; deferred has the best default performance</description>
    <category>javascript, front-end, performance</category>
    <pubDate>Fri, 04 Aug 2023 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20230804-javascript-loading-defaults/</guid>
  </item>
  <item>
    <title>Use Typed Entity to encapsulate business logic in dedicated classes</title>
    <link>https://architecture.lullabot.com/adr/20230309-use-typed-entity/</link>
    <description>Wrapping the business logic for an entity using Typed Entity produces code that is easier to read, maintain, test, and discover.</description>
    <category>drupal, code quality</category>
    <pubDate>Thu, 09 Mar 2023 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20230309-use-typed-entity/</guid>
  </item>
  <item>
    <title>Leverage view modes when rendering entities</title>
    <link>https://architecture.lullabot.com/adr/20221205-render-entities-with-view-modes/</link>
    <description>Rendering entities using view modes have multiple benefits. These include better maintainability, faster initial development time, better performance, and hardened security.</description>
    <category>drupal</category>
    <pubDate>Wed, 14 Dec 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20221205-render-entities-with-view-modes/</guid>
  </item>
  <item>
    <title>Use [ticket-id]--[short-description] in feature branch names</title>
    <link>https://architecture.lullabot.com/adr/20220920-git-branch-naming/</link>
    <description>Omitting key information in branch names can cause confusion over the purpose of a branch.</description>
    <category>git</category>
    <pubDate>Tue, 20 Sep 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220920-git-branch-naming/</guid>
  </item>
  <item>
    <title>Use identical cache backends on development environments</title>
    <link>https://architecture.lullabot.com/adr/20220906-identical-cache-backends/</link>
    <description>Using memory caches like Memcached or Redis in production but not in development environments can lead to bugs and confusion.</description>
    <category>drupal, devops</category>
    <pubDate>Tue, 06 Sep 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220906-identical-cache-backends/</guid>
  </item>
  <item>
    <title>Use JavaScript strict mode</title>
    <link>https://architecture.lullabot.com/adr/20220816-use-js-strict-mode/</link>
    <description>Opt in to settings that raise errors for problematic code.</description>
    <category>front-end, javascript</category>
    <pubDate>Tue, 16 Aug 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220816-use-js-strict-mode/</guid>
  </item>
  <item>
    <title>Use SMACSS to organize CSS within projects</title>
    <link>https://architecture.lullabot.com/adr/20220721-organize-stylesheets-using-smacss/</link>
    <description>Organizing CSS within projects the same way Drupal organizes its CSS establishes a consistent pattern.</description>
    <category>front-end, css</category>
    <pubDate>Thu, 21 Jul 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220721-organize-stylesheets-using-smacss/</guid>
  </item>
  <item>
    <title>Use TypeScript for pure JavaScript development</title>
    <link>https://architecture.lullabot.com/adr/20220705-use-typescript/</link>
    <description>Strictly typed languages like TypeScript avoid unexpected behavior, prevent bugs, and improve code maintainability.</description>
    <category>javascript, front-end, back-end, developer-experience</category>
    <pubDate>Tue, 05 Jul 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220705-use-typescript/</guid>
  </item>
  <item>
    <title>Use CSS Logical Properties</title>
    <link>https://architecture.lullabot.com/adr/20220622-use-css-logical-properties/</link>
    <description>Decoupling styles from a language&#39;s writing direction makes them easier to maintain across translations.</description>
    <category>front-end, css, multilingual</category>
    <pubDate>Wed, 22 Jun 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220622-use-css-logical-properties/</guid>
  </item>
  <item>
    <title>Do not add the Metatag field to the node form</title>
    <link>https://architecture.lullabot.com/adr/20220622-1-do-not-add-metatags-to-node-form/</link>
    <description>The metatag field makes the node form slow and overly complex for editorial users.</description>
    <category>drupal, node-form, editorial-experience, performance, seo</category>
    <pubDate>Wed, 22 Jun 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220622-1-do-not-add-metatags-to-node-form/</guid>
  </item>
  <item>
    <title>Use gatsby-theme-adr to manage the ADRs</title>
    <link>https://architecture.lullabot.com/adr/20220621-gatsby-theme-adr/</link>
    <description>We need a site generator to publish our ADRs.</description>
    <category>meta</category>
    <pubDate>Tue, 21 Jun 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220621-gatsby-theme-adr/</guid>
  </item>
  <item>
    <title>Use Claro for the Drupal administration theme</title>
    <link>https://architecture.lullabot.com/adr/20220519-use-claro-as-admin-theme/</link>
    <description>Claro offers a modern, responsive, and accessible interface that showcases Drupal&#39;s capabilities from the outset.</description>
    <category>drupal, editorial-experience</category>
    <pubDate>Thu, 19 May 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220519-use-claro-as-admin-theme/</guid>
  </item>
  <item>
    <title>Use inclusive language in code and technical writing</title>
    <link>https://architecture.lullabot.com/adr/20220511-use-inclusive-language/</link>
    <description>Inclusive language can make technical subjects more inviting and understandable.</description>
    <category></category>
    <pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220511-use-inclusive-language/</guid>
  </item>
  <item>
    <title>Use Simple Add More to improve editorial experience</title>
    <link>https://architecture.lullabot.com/adr/20220504-use-simple-add-more/</link>
    <description>Drupal core by default outputs the maximum number of values (cardinality) as empty elements on entity forms, which usually represents a poor user-experience.</description>
    <category>drupal, contrib-modules, editorial-experience</category>
    <pubDate>Fri, 06 May 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220504-use-simple-add-more/</guid>
  </item>
  <item>
    <title>Use Type Tray to improve editorial UX</title>
    <link>https://architecture.lullabot.com/adr/20220503-use-type-tray/</link>
    <description>Drupal&#39;s editorial experience in the &quot;Add Content&quot; page is confusing out of the box, especially when the content model&#39;s complexity increases.</description>
    <category>drupal, contrib-modules, editorial-experience</category>
    <pubDate>Fri, 06 May 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220503-use-type-tray/</guid>
  </item>
  <item>
    <title>Configure Composer Patches to Use `-p2` as `patchLevel` for Drupal core</title>
    <link>https://architecture.lullabot.com/adr/20220429-composer-patchlevel/</link>
    <description>Drupal&#39;s git repository has a different directory structure than projects built on Drupal. Default Composer Patches settings can cause Drupal patches to be silently misapplied.</description>
    <category>drupal, php, composer</category>
    <pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220429-composer-patchlevel/</guid>
  </item>
  <item>
    <title>Store Composer Patches configuration in composer.json</title>
    <link>https://architecture.lullabot.com/adr/20220429-composer-patches-inline/</link>
    <description>Validating a complete Composer configuration is important to ensuring build issues are caught early.</description>
    <category>drupal, php, composer</category>
    <pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220429-composer-patches-inline/</guid>
  </item>
  <item>
    <title>Use local copies of patch files</title>
    <link>https://architecture.lullabot.com/adr/20220429-composer-patch-files/</link>
    <description>When using [cweagans/composer-patches](https://github.com/cweagans/composer-patches), it is important that patch sources are consistent and do not change between builds.</description>
    <category>drupal, php, composer</category>
    <pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220429-composer-patch-files/</guid>
  </item>
  <item>
    <title>Break composer install if patches don&#39;t apply</title>
    <link>https://architecture.lullabot.com/adr/20220429-composer-exit-failure/</link>
    <description>Allowing builds to succeed with failed patches can lead to malformed code or hidden errors.</description>
    <category>drupal, composer, php</category>
    <pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220429-composer-exit-failure/</guid>
  </item>
  <item>
    <title>Use dedicated accounts for service integrations</title>
    <link>https://architecture.lullabot.com/adr/20220426-use-dedicated-accounts-service-integrations/</link>
    <description>Service integrations that use personal accounts tie the function of the service with the person&#39;s engagement with the project.</description>
    <category>devops</category>
    <pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220426-use-dedicated-accounts-service-integrations/</guid>
  </item>
  <item>
    <title>Always hide non-translatable fields on translation forms</title>
    <link>https://architecture.lullabot.com/adr/20220425-hide-untranslatable-fields/</link>
    <description>When content translation is enabled, it&#39;s possible to decide which fields can be translated.</description>
    <category>drupal</category>
    <pubDate>Mon, 25 Apr 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220425-hide-untranslatable-fields/</guid>
  </item>
  <item>
    <title>Lock entity language on edit forms</title>
    <link>https://architecture.lullabot.com/adr/20220320-prevent-language-change/</link>
    <description>Editors new to Drupal often try to translate content by changing the language on existing content, causing confusion for site visitors.</description>
    <category>drupal</category>
    <pubDate>Sun, 20 Mar 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220320-prevent-language-change/</guid>
  </item>
  <item>
    <title>Consistently name entity fields</title>
    <link>https://architecture.lullabot.com/adr/20220208-naming-fields/</link>
    <description>Adopting a consistent set of rules when naming entities in Drupal can reduce errors and improve maintainability.</description>
    <category>drupal</category>
    <pubDate>Tue, 08 Feb 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220208-naming-fields/</guid>
  </item>
  <item>
    <title>Use PHPUnit for unit testing PHP code</title>
    <link>https://architecture.lullabot.com/adr/20220207-php-unit-tests/</link>
    <description></description>
    <category>drupal, php, coding, testing</category>
    <pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220207-php-unit-tests/</guid>
  </item>
  <item>
    <title>Composer patches configuration and best practices</title>
    <link>https://architecture.lullabot.com/adr/20220119-composer-patches/</link>
    <description>Default `composer-patches` settings can lead to misapplied patches or hidden errors. Using a consistent configuration across projects will reduce errors and save time.</description>
    <category>drupal, php, composer</category>
    <pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220119-composer-patches/</guid>
  </item>
  <item>
    <title>Always use typehints in new PHP code</title>
    <link>https://architecture.lullabot.com/adr/20220112-type-hints/</link>
    <description>Following stricter typing where available can significantly reduce bugs, and simplify maintainability. This has been proven by several studies across different disciplines.</description>
    <category>drupal, php, coding</category>
    <pubDate>Wed, 12 Jan 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20220112-type-hints/</guid>
  </item>
  <item>
    <title>Block the Drupal user 1 account in production environments</title>
    <link>https://architecture.lullabot.com/adr/20211026-one-time-login-first-drupal-user-account/</link>
    <description>The first user account in a Drupal site (often referred to as &quot;administrator&quot; or &quot;user 1&quot;) is [granted every permission automatically](https://www.drupal.org/docs/user_guide/en/user-admin-account.html). If the account credentials are compromised, an attacker can easily inject JavaScript to attack site visitors and can likely execute arbitrary PHP code.</description>
    <category>drupal, security</category>
    <pubDate>Wed, 12 Jan 2022 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211026-one-time-login-first-drupal-user-account/</guid>
  </item>
  <item>
    <title>Confirm Drupal site configuration is always in a default state</title>
    <link>https://architecture.lullabot.com/adr/20211212-config-status-check/</link>
    <description>Configuration should never be in an overridden state after configuration import(s) have been completed.</description>
    <category>drupal, deployment, automation, devops</category>
    <pubDate>Sun, 12 Dec 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211212-config-status-check/</guid>
  </item>
  <item>
    <title>Use DDEV for local environments</title>
    <link>https://architecture.lullabot.com/adr/20211207-ddev-locals/</link>
    <description>The software development industry is continuing to move to containers both for production and local environments. It&#39;s clear that the bulk of new investment in local tooling is going towards container-focused solutions. While containers themselves add some complexity to local environments, they also reduce variance in development environments for teams with multiple developers.</description>
    <category>dev-tools, drupal, devops</category>
    <pubDate>Tue, 07 Dec 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211207-ddev-locals/</guid>
  </item>
  <item>
    <title>Use strict types in PHP code</title>
    <link>https://architecture.lullabot.com/adr/20211201-use-strict-types-in-php-code/</link>
    <description>PHP&#39;s type coercion can cause logical errors within a program. For example, when a float is cast to an int, the decimal portion is lost. We aim to reduce these errors in our code, but they can easily slip through manual code review. Following stricter typing where available can significantly reduce bugs, as shown by [Python&#39;s urllib3 type hinting case study](https://sethmlarson.dev/blog/2021-10-18/tests-arent-enough-case-study-after-adding-types-to-urllib3).</description>
    <category>php, drupal</category>
    <pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211201-use-strict-types-in-php-code/</guid>
  </item>
  <item>
    <title>Use settings.php for environment overrides and local settings</title>
    <link>https://architecture.lullabot.com/adr/20211026-use-settings-not-splits/</link>
    <description>When developing a Drupal website, additional modules and configuration are useful for local and development environments.</description>
    <category>dev-tools, drupal</category>
    <pubDate>Tue, 26 Oct 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211026-use-settings-not-splits/</guid>
  </item>
  <item>
    <title>Stage File Proxy for static files</title>
    <link>https://architecture.lullabot.com/adr/20210729-stage-file-proxy/</link>
    <description>Lullabot often works on projects that have large numbers of static file assets in production, such as images or PDFs. Keeping a complete copy of those files for each environment is wasteful, since developers tend to only look at a small portion of a site locally. A solution is needed to reduce disk use and the time it takes to update an environment.</description>
    <category>devops, locals, drupal, contrib-modules</category>
    <pubDate>Tue, 26 Oct 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20210729-stage-file-proxy/</guid>
  </item>
  <item>
    <title>Avoid command aliases and short options</title>
    <link>https://architecture.lullabot.com/adr/20211006-avoid-command-aliases/</link>
    <description>When writing scripts for CI tasks or local procedures, it is helpful to have the full command spelled out. Having the long options and avoiding command aliases will reduce chances of misinterpretation and mistakes. This will also reduce the need for checking the documentation while reading or reviewing a script.</description>
    <category>scripting</category>
    <pubDate>Wed, 06 Oct 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20211006-avoid-command-aliases/</guid>
  </item>
  <item>
    <title>Define the order of steps when building a Drupal site</title>
    <link>https://architecture.lullabot.com/adr/20210924-drupal-build-steps/</link>
    <description>When updating Drupal code and configuration in a given environment, it&#39;s useful to make sure all members of the team and all teams follow a consistent set of steps, in the same order. Having consistent steps across multiple projects will reduce onboarding for new team members.</description>
    <category>drush, deployments</category>
    <pubDate>Fri, 24 Sep 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20210924-drupal-build-steps/</guid>
  </item>
  <item>
    <title>Environment Indicator</title>
    <link>https://architecture.lullabot.com/adr/20210609-environment-indicator/</link>
    <description>All Drupal websites our team works on have one or more environments. At a minimum, there will be a production and a local development environment. Most projects will have production, staging, development preview, and local environments. Developers and QA often access different environments at the same time. Since making content or configuration changes on the wrong environment can have unintended consequences, it is important to be able to distinguish environments easily.</description>
    <category>contrib-modules, editorial-experience</category>
    <pubDate>Fri, 23 Jul 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20210609-environment-indicator/</guid>
  </item>
  <item>
    <title>Use Log4brains to manage the ADRs</title>
    <link>https://architecture.lullabot.com/adr/20210705-use-log4brains-to-manage-the-adrs/</link>
    <description></description>
    <category>dev-tools, doc, meta</category>
    <pubDate>Sun, 04 Jul 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20210705-use-log4brains-to-manage-the-adrs/</guid>
  </item>
  <item>
    <title>Record architecture decisions</title>
    <link>https://architecture.lullabot.com/adr/20210608-record-architecture-decisions/</link>
    <description>We need to record the architectural decisions made on this project.</description>
    <category>meta</category>
    <pubDate>Tue, 08 Jun 2021 00:00:00 GMT</pubDate>
    <guid>https://architecture.lullabot.com/adr/20210608-record-architecture-decisions/</guid>
  </item>
  </channel>
</rss>
