{
  "version": "https://jsonfeed.org/version/1",
  "title": "Tools on enumerator.dev",
  "icon": "<no value>",
  "home_page_url": "https://enumerator.dev/",
  "feed_url": "https://enumerator.dev/feed.json",
  "items": [
      {
        "id": "https://enumerator.dev/technical-diagrams-for-communication/",
        "title": "Technical Diagrams for Communication",
        "content_html": "<p>How many ways are there to draw the same diagram? Lots! It turns out. The screenshot below shows image search results for &ldquo;google oauth login diagram.&rdquo; Some of these diagrams are clear while others are cluttered and confusing.</p>\n<p><img\n    src=\"/images/google-oauth-login-diagram-search-results_hu_ae422404a4bd4b4e.webp\"\n    srcset=\"/images/google-oauth-login-diagram-search-results_hu_dd113f9c0e6906b4.webp 576w, /images/google-oauth-login-diagram-search-results_hu_4b5e4bd0fecdb0d9.webp 864w, /images/google-oauth-login-diagram-search-results_hu_ae422404a4bd4b4e.webp 1152w\" sizes=\"(max-width: 36rem) 100vw, 36rem\"\n    width=\"1152\"\n    height=\"622\"\n    loading=\"lazy\"\n    decoding=\"async\" alt=\"Image search results for “google oauth login diagram” showing very different diagrams of the same flow\"></p>\n<p>Diagrams are a communication tool. Used well, they focus a conversation, communicate objectives, and enforce guidelines. Used poorly, they can derail conversations and result in frustration.</p>\n<p>The slides below are from a short workshop I gave on how I use diagramming in my technical proposals.</p>\n<div class=\"slides my-10\"><div class=\"carousel flex w-full rounded-box border border-base-300\"><figure id=\"slides-0-1\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 1 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"reasons-to-draw\">Reasons to Draw</h2>\n<ul>\n<li>Explore a problem</li>\n<li>Make a decision</li>\n<li>Share a solution</li>\n</ul>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-18\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">1 / 18</span>\n                <a href=\"#slides-0-2\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>I am going to talk about three different reasons to draw diagrams and why each reason requires a different thought process.</p>\n<p>Diagrams are a powerful communication tool. If they are done wrong, they will send your audience off in the wrong direction and you&rsquo;ll misunderstand each other. If they are done right, you&rsquo;ll have a focused, productive conversation.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-2\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 2 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"diagrams-create-a-shared-mental-model-of-a-system\">Diagrams Create a Shared Mental Model of a System</h2>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-1\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">2 / 18</span>\n                <a href=\"#slides-0-3\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Put yourself in your audience&rsquo;s position when you draw a diagram.</p>\n<ul>\n<li>What are their goals when they read your diagram?</li>\n<li>What context do they have that will affect how they read it?</li>\n<li>What do you need from them when they see the diagram? Are you telling them how something works? Proposing a solution? Demonstrating a tradeoff?</li>\n</ul>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-3\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 3 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"what-makes-a-good-diagram\">What Makes a Good Diagram?</h2>\n<ol>\n<li>Follows a formula</li>\n<li>Minimal colour</li>\n<li>Clear visual hierarchy</li>\n<li>Incorporates time, relationships, &amp; decisions as needed</li>\n</ol>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-2\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">3 / 18</span>\n                <a href=\"#slides-0-4\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <ol>\n<li>Following a formula makes it easy for your audience to understand the content. They will spend less time trying to take in the colours, symbols, and lines and instead see the whole picture.</li>\n<li>Minimal colour. Too much colour is distracting. Only use colour to focus the eye on important details.</li>\n<li>Clear visual hierarchy. The reader should clearly see the important parts of the diagram on the first glance. Cut extra details.</li>\n<li>Incorporates time, relationships &amp; decisions. Don&rsquo;t use a single formula for every diagram. If time is an important factor, pick a structure that adds time on an axis. If relationships are important, use a diagram with symbols to indicate this aspect.</li>\n</ol>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-4\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 4 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"a-diagram-should-explain-itself\">A Diagram Should Explain Itself</h2>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-3\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">4 / 18</span>\n                <a href=\"#slides-0-5\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>I have drawn many diagrams and when I step back I wonder, &ldquo;What do these scribbles mean?&rdquo; If you have to write extensive notes to explain a diagram, take another pass at it. Try using a different diagramming syntax or cut out unnecessary elements.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-5\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 5 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"diagram-to-explore-a-problem\">Diagram to Explore a Problem</h2>\n<ul>\n<li>Rough drawings</li>\n<li>Good for collaborating live and figuring out ideas</li>\n<li>Only make sense in the context of exploration</li>\n</ul>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-4\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">5 / 18</span>\n                <a href=\"#slides-0-6\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Diagrams for exploring problems are the kind that I make when I&rsquo;m pairing with a group to solve a problem or hashing something out on a notepad for myself. These diagrams only make sense in the moment and only to the people present.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-6\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 6 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h3 id=\"example-oauth-flow\">Example: OAuth Flow</h3>\n<p><img\n    src=\"/images/hand-drawn-oauth-authentication-flow-sketch_hu_2a2ed2694c2dcd6b.webp\"\n    srcset=\"/images/hand-drawn-oauth-authentication-flow-sketch_hu_c0f3dba26966a82a.webp 576w, /images/hand-drawn-oauth-authentication-flow-sketch_hu_2a2ed2694c2dcd6b.webp 860w\" sizes=\"(max-width: 36rem) 100vw, 36rem\"\n    width=\"860\"\n    height=\"608\"\n    loading=\"lazy\"\n    decoding=\"async\" alt=\"A rough hand-drawn sketch titled “Authentication Flow”, with boxes for User, /login, Backend, OAuth Provider, and OAuth Validate joined by arrows\"></p>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-5\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">6 / 18</span>\n                <a href=\"#slides-0-7\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Here&rsquo;s an example of a very rough diagram of an OAuth flow. This is the kind of diagram I&rsquo;d draw to understand the key elements involved. But this diagram is useless for communicating the components and sequences involved.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-7\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 7 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"diagrams-for-exploring-are-not-diagrams-for-communication\">Diagrams for Exploring are Not Diagrams for Communication</h2>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-6\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">7 / 18</span>\n                <a href=\"#slides-0-8\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Draw lots of diagrams! Exploring problems with diagrams is great. But they are for a small audience. These diagrams are not good for communicating to a broader audience.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-8\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 8 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"diagram-to-make-decisions\">Diagram to Make Decisions</h2>\n<ul>\n<li>Communicate options</li>\n<li>Include time component when relevant</li>\n<li>Distinguish current and future state</li>\n</ul>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-7\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">8 / 18</span>\n                <a href=\"#slides-0-9\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Drawing to make decisions means you have an external audience. This is where it is important to think about your audience&rsquo;s context and pick the right visual language.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-9\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 9 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h3 id=\"oauth-flow-as-flow-chart\">OAuth Flow as Flow Chart</h3>\n<pre><code class=\"language-mermaid\">flowchart LR\nUser --&gt;|Enter credentials| Browser\nBrowser --&gt;|POST /login| App[App Backend]\nApp --&gt;|Verify password| DB[(Database)]\nApp --&gt;|Set session cookie| Browser\nBrowser --&gt; User</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-8\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">9 / 18</span>\n                <a href=\"#slides-0-10\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>The flow chart in this example works for a simple flow but makes the details of OAuth very hard for an audience to understand.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-10\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 10 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h3 id=\"auth-flow-as-sequence-diagram\">Auth Flow as Sequence Diagram</h3>\n<pre><code class=\"language-mermaid\">sequenceDiagram\nactor User\nparticipant Browser\nparticipant App as App (Backend)\nparticipant DB as Database\nUser-&gt;&gt;Browser: Enter email &#43; password\nBrowser-&gt;&gt;App: POST\nApp-&gt;&gt;DB: Verify credentials\nDB--&gt;&gt;App: Valid\nApp--&gt;&gt;Browser: Set session cookie\nBrowser--&gt;&gt;User: Logged in</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-9\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">10 / 18</span>\n                <a href=\"#slides-0-11\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Here&rsquo;s the basic auth flow as a sequence diagram. There is a clear syntax. You don&rsquo;t even have to read &ldquo;user&rdquo; to know that the stick person is a human, and the x axis clearly distinguishes components while the y axis delineates time.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-11\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 11 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h3 id=\"oauth-flow-as-sequence-diagram\">OAuth Flow as Sequence Diagram</h3>\n<pre><code class=\"language-mermaid\">sequenceDiagram\nactor User\nparticipant Browser\nparticipant App as App (Backend)\nparticipant Google\n\nUser-&gt;&gt;Browser: Click &#34;Sign in with Google&#34;\nBrowser-&gt;&gt;Google: Redirect to authorize\nGoogle-&gt;&gt;User: Show consent screen\nUser-&gt;&gt;Google: Authenticate &#43; grant access\nGoogle--&gt;&gt;Browser: Redirect with auth code\nBrowser-&gt;&gt;App: Send auth code\nApp-&gt;&gt;Google: Exchange code for tokens\nGoogle--&gt;&gt;App: Return tokens\nApp--&gt;&gt;Browser: Set session cookie\nBrowser--&gt;&gt;User: Logged in</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-10\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">11 / 18</span>\n                <a href=\"#slides-0-12\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>And here&rsquo;s the OAuth flow. You can now look at the two side by side and clearly see the difference. If we were building a product and wanted to decide between Google OAuth or basic auth, these two diagrams could help us understand the tradeoffs.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-12\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 12 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"an-artifact-to-build-from\">An Artifact to Build From</h2>\n<ul>\n<li>Document a desired state</li>\n<li>Can be used in Jira tickets</li>\n<li>Can change if you discover gotchas along the way</li>\n</ul>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-11\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">12 / 18</span>\n                <a href=\"#slides-0-13\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Diagrams as artifacts are like blueprints for projects. A good diagram can be referenced over the course of a project and shared with the team. Nothing is certain in software, though! It&rsquo;s good practice to update artifacts to keep a shared mental model of the system.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-13\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 13 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h3 id=\"oauth-artifact\">OAuth Artifact</h3>\n<pre><code class=\"language-mermaid\">sequenceDiagram\n    participant User\n    participant Browser\n    participant App as App (Backend)\n    participant Google\n\n    User-&gt;&gt;Browser: Click &#34;Sign in with Google&#34;\n    Browser-&gt;&gt;App: GET /auth/google\n    App--&gt;&gt;Browser: 302 Redirect to Google authorize URL&lt;br/&gt;(client_id, redirect_uri, scope, state, response_type=code)\n    Browser-&gt;&gt;Google: GET /o/oauth2/v2/auth\n    Google--&gt;&gt;Browser: Show account picker &#43; consent screen\n    User-&gt;&gt;Google: Authenticate &#43; grant consent\n    Google--&gt;&gt;Browser: 302 Redirect to redirect_uri&lt;br/&gt;(authorization code, state)\n    Browser-&gt;&gt;App: GET /auth/google/callback?code=...&amp;state=...\n    Note over App: Validate state (CSRF check)\n    App-&gt;&gt;Google: POST /token&lt;br/&gt;(code, client_id, client_secret, redirect_uri, grant_type=authorization_code)\n    Google--&gt;&gt;App: access_token, id_token (JWT), refresh_token\n    Note over App: Verify id_token signature &#43; claims&lt;br/&gt;(read sub, email, name)\n    Note over App: Find or create user, establish session\n    App--&gt;&gt;Browser: Set session cookie, redirect to app\n    Browser--&gt;&gt;User: Logged in</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-12\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">13 / 18</span>\n                <a href=\"#slides-0-14\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>As an artifact, the OAuth flow has more detail and notes on each interaction. You could reference this diagram if you needed to sort out the requirements to implement a part of this flow.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-14\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 14 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"four-types-of-diagrams\">Four Types of Diagrams</h2>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-13\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">14 / 18</span>\n                <a href=\"#slides-0-15\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>I used sequence diagrams today as an example. There are many other diagramming syntaxes. Here are four more that I find useful.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-15\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 15 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"flow\">Flow</h2>\n<p>Use when a sequence of events can have alternative branches.</p>\n<pre><code class=\"language-mermaid\">flowchart LR\nStart([Start]) --&gt; Decision{Condition met?}\nDecision --&gt;|Yes| Path1[Do this]\nDecision --&gt;|No| Path2[Do that]\nPath1 --&gt; Stop([Stop])\nPath2 --&gt; Stop</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-14\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">15 / 18</span>\n                <a href=\"#slides-0-16\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n            <figcaption class=\"slide-notes w-full grow border-t border-base-300 px-6 py-4 text-sm text-base-content/70 sm:px-10\">\n                <p>Don&rsquo;t go overboard on syntax. Stick to simple diagram syntax that your audience will understand.</p>\n\n            </figcaption>\n        </figure><figure id=\"slides-0-16\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 16 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"entity-relationship-diagram\">Entity Relationship Diagram</h2>\n<p>Use when entities (often database tables) have relationships to one another.</p>\n<pre><code class=\"language-mermaid\">erDiagram\nUSER {\nint id\nstring email\nstring password_hash\n}\nSESSION {\nint id\nint user_id\nstring session_token\ndatetime expires_at\n}\nOAUTH_ACCOUNT {\nint id\nint user_id\nstring provider\nstring provider_user_id\n}\nUSER ||--o{ SESSION : has\nUSER ||--o{ OAUTH_ACCOUNT : has</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-15\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">16 / 18</span>\n                <a href=\"#slides-0-17\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n        </figure><figure id=\"slides-0-17\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 17 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"network-architecture\">Network Architecture</h2>\n<p>Use when describing how software systems interact over a network.</p>\n<pre><code class=\"language-mermaid\">architecture-beta\n\tgroup api(cloud)[API]\n\n\tservice db(database)[Database] in api\n\tservice disk1(disk)[Storage] in api\n\tservice disk2(disk)[Storage] in api\n\tservice server(server)[Server] in api\n\tdb:L -- R:server\n\tdisk1:T -- B:server\n\tdisk2:T -- B:db</code></pre>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-16\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">17 / 18</span>\n                <a href=\"#slides-0-18\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n        </figure><figure id=\"slides-0-18\" class=\"carousel-item w-full flex-col\" aria-label=\"Slide 18 of 18\"><div class=\"slide-frame relative aspect-square w-full shrink-0 sm:aspect-video\">\n                <div class=\"slide-body absolute inset-0 overflow-y-auto p-6 sm:p-10\" tabindex=\"0\">\n                    <h2 id=\"resources\">Resources</h2>\n<ul>\n<li><a href=\"https://www.anildash.com/2024/03/10/make-better-documents/\">Make Better Documents</a></li>\n<li><a href=\"https://sportebois.medium.com/better-architecture-diagrams-for-agile-teams-actionable-tips-and-lessons-e76627dc4315\">Better Architecture Diagrams for Agile Teams</a></li>\n<li><a href=\"https://terrastruct.com/blog/post/draw-software-architecture-diagrams/\">How to draw beautiful software architecture diagrams</a></li>\n<li><a href=\"https://mermaid.ai/open-source/intro/\">Mermaid Diagrams</a></li>\n</ul>\n\n                </div>\n            </div>\n            <div class=\"slide-controls not-prose flex w-full shrink-0 items-center justify-between gap-2 border-t border-base-300 px-4 py-2\">\n                <a href=\"#slides-0-17\" class=\"btn btn-circle btn-sm\" aria-label=\"Previous slide\">❮</a>\n                <span class=\"text-sm text-base-content/50\">18 / 18</span>\n                <a href=\"#slides-0-1\" class=\"btn btn-circle btn-sm\" aria-label=\"Next slide\">❯</a>\n            </div>\n        </figure>\n    </div>\n</div>\n\n",
        "date_published": "2026-08-07T00:00:00+00:00",
        "url": "https://enumerator.dev/technical-diagrams-for-communication/",
        "tags": ["tools"]
      },
      {
        "id": "https://enumerator.dev/samuel-johnson-the-unexpected-grandfather-of-llms/",
        "title": "Samuel Johnson, the Unexpected Grandfather of LLMs",
        "content_html": "<p>As many people have I&rsquo;ve been trying out a handful of LLMs to assist with coding. I&rsquo;ve found them very useful tackling mundane tasks that might otherwise take me a few minutes, or at times hours, to accomplish on my own</p>\n<p>This reminds me of a good corruption of a Samuel Johnson quote:</p>\n<blockquote>\n<p>The next best thing to knowing something is knowing where to find it.</p>\n</blockquote>\n<p>The real quote is:</p>\n<blockquote>\n<p>Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information upon it. – <a href=\"https://www.samueljohnson.com/apocryph.html\">https://www.samueljohnson.com/apocryph.html</a></p>\n</blockquote>\n<p>Thank you to an LLM for uncovering this for me. To me, LLMs are the second kind of knowledge, and very useful for my day to day work. They let me focus on the big picture while taking care of the small details.</p>\n<p>Interestingly, the LLM I used also uncovered this quote:</p>\n<blockquote>\n<p>The greatest part of a writer&rsquo;s time is spent in reading, in order to write: a man will turn over half a library to make one book. <a href=\"https://www.samueljohnson.com/attentio.html\">https://www.samueljohnson.com/attentio.html</a></p>\n</blockquote>\n<p>It is as if Johnson knew the environmental impact of LLMs before computers even existed. An LLM undoubtedly turns over half a library to write one good line of code.</p>\n",
        "date_published": "2025-01-31T00:00:00+00:00",
        "url": "https://enumerator.dev/samuel-johnson-the-unexpected-grandfather-of-llms/",
        "tags": ["tools","ai","llm"]
      }
  ]
}
