<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Ris Adams</title>
        <link>https://risadams.com/blog</link>
        <description>Ship Code. Stay Human.</description>
        <lastBuildDate>Tue, 25 Aug 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <copyright>Copyright © 2026 Ris Adams</copyright>
        <item>
            <title><![CDATA[What Dolly Parton Taught Me, and What She Would Want Us to Do Now]]></title>
            <link>https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me</link>
            <guid>https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me</guid>
            <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Dolly Parton died today, and it's no surprise how much it's hit me. I never met her. I have no business grieving like this. But some people shape you from a distance, and you don't notice how much until they're gone.]]></description>
            <content:encoded><![CDATA[<p>Dolly Parton died today, and it's no surprise how much it's hit me. I never met her. I have no business grieving like this. But some people shape you from a distance, and you don't notice how much until they're gone.</p>
<p>She was funny, generous, smart, kind, and completely unbothered by anyone who mistook the wig and the nails for the whole story. That combination taught me more about how to build a life and a career than most of the advice I've paid for.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-woman-behind-the-image">The Woman Behind the Image<a href="https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me#the-woman-behind-the-image" class="hash-link" aria-label="Direct link to The Woman Behind the Image" title="Direct link to The Woman Behind the Image" translate="no">​</a></h2>
<p>The joke about Dolly was always the same: all that hair and rhinestones, surely there wasn't much going on underneath. She heard that joke her entire career and used it as a tool. "It costs a lot of money to look this cheap," she'd say, and the room would laugh, and she'd already be three steps ahead of everyone in it.</p>
<p>That's the first thing she taught me. Let people underestimate you if it buys you room to work. She wrote "Jolene" and "I Will Always Love You" on the same day. She turned down Elvis's people when they wanted half the publishing rights to "I Will Always Love You" just for him to record it, and she said no, politely, and kept the rights, and that decision alone was worth millions over the following decades. Kind and firm aren't opposites. She proved that daily.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-she-meant-to-me-personally">What She Meant to Me Personally<a href="https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me#what-she-meant-to-me-personally" class="hash-link" aria-label="Direct link to What She Meant to Me Personally" title="Direct link to What She Meant to Me Personally" translate="no">​</a></h2>
<p>I grew up watching my grandmother put on Dolly records while she cleaned the house on Saturday mornings, and there was something in that voice, plainspoken and completely without pretense, that made hard things feel survivable. "Coat of Many Colors" is a song about being poor and being mocked for it and choosing to be proud anyway. I didn't grow up poor the way she did, but I grew up different in ways that got me mocked plenty, and that song told me the mocking says more about the mockers than about me.</p>
<p>She also gave me a model for what generosity looks like when it isn't performance. The Imagination Library has mailed free books to kids, including mine, since 1995, over 250 million of them by the time she died, and she ran it quietly for years before anyone turned it into a headline. She didn't do it for a tax write-off photo op. She did it because she remembered not having books, and she had the means to fix that for other kids, so she did.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-she-meant-to-me-professionally">What She Meant to Me Professionally<a href="https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me#what-she-meant-to-me-professionally" class="hash-link" aria-label="Direct link to What She Meant to Me Professionally" title="Direct link to What She Meant to Me Professionally" translate="no">​</a></h2>
<p>Professionally, the lesson was about ownership and range. Dolly wrote her own songs when plenty of women in country music in the 1960s and 70s were handed material by men and expected to be grateful. She built Dollywood in her own hometown instead of chasing every opportunity to leave it behind. She moved between country, pop, bluegrass, and gospel without apologizing for any of it, and she never let one part of the audience tell her which parts of herself weren't allowed. When she was offered an induction into the Rock and Roll Hall of Fame, she produced a rock album to prove she'd earned it. She didn't ask permission to be more than one thing, and she didn't let anyone else define what she could be.</p>
<p>I think about that when I catch myself narrowing my own work to fit what a title or a job description says I'm supposed to be.</p>
<p>She was also, from what session musicians and producers have said for decades, exacting about her craft and completely without ego about the people around her. Session musicians talk about how prepared she was, how she knew exactly what she wanted and could also take a better idea from the newest player in the room without flinching. That's a rare combination. High standards and low ego usually get treated as a tradeoff. She ran both at full strength.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="how-to-live-a-life-shed-be-proud-of">How to Live a Life She'd Be Proud Of<a href="https://risadams.com/blog/2026/08/25/what-dolly-parton-taught-me#how-to-live-a-life-shed-be-proud-of" class="hash-link" aria-label="Direct link to How to Live a Life She'd Be Proud Of" title="Direct link to How to Live a Life She'd Be Proud Of" translate="no">​</a></h2>
<p>I don't think Dolly Parton would want a wave of sad posts about her. I think she'd want people to actually do something with what she showed them. Here's what that looks like to me.</p>
<p><strong>Be exactly who you are, loudly, and let the mockery bounce.</strong> She never toned down the accent, the look, or the humor to be taken more seriously by people who'd already decided not to take her seriously. The people worth keeping around noticed the songwriting instead.</p>
<p><strong>Give before you're asked, and keep doing it after nobody's watching.</strong> The Imagination Library ran for years before it became famous. Find the version of that for your own life: the thing you do because it's right, not because it'll show up on a resume or a highlight reel.</p>
<p><strong>Own your work.</strong> Read the contract. Keep the rights. Say no to the deal that sounds generous but costs you the thing that'll matter in twenty years. She said no to Elvis's people and it changed her life. Most of us won't get an offer that dramatic, but the instinct still applies.</p>
<p><strong>Don't let one skill become the whole cage.</strong> She was a songwriter, a performer, a businesswoman, an actress, and a philanthropist, and she treated all of it as one life instead of five careers fighting for time. Whatever you're known for at work, it doesn't have to be the only thing you're allowed to become.</p>
<p><strong>Be kind on purpose, especially to people who can't do anything for you.</strong> The stories from crew members, waitstaff, fans who got ten seconds with her backstage, keep landing in the same place: she was warm to people who had nothing to offer her. That's not a coincidence. That's a practiced habit.</p>
<p><strong>Stay rooted somewhere.</strong> She never left Tennessee behind, built her theme park in her own hometown, and kept showing up for the place that raised her instead of trading up for somewhere shinier once she could afford to. Success doesn't require cutting the cord to where you came from.</p>
<p><strong>Let people laugh with you before they figure out how sharp you are.</strong> Being underestimated is only a disadvantage if you let it stop you from doing the work. She used it as cover.</p>
<p>I'll miss knowing she's out there being exactly herself. The least I can do is take the parts of that I actually have use for and put them to work. She spent seventy years showing the math. All that's left is doing it.</p>]]></content:encoded>
            <category>tribute</category>
            <category>celebrity</category>
            <category>authenticity</category>
            <category>values</category>
            <category>purpose</category>
            <category>life-lessons</category>
            <category>career</category>
            <category>generosity</category>
        </item>
        <item>
            <title><![CDATA[The Accommodations Nobody Tells You to Ask For]]></title>
            <link>https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for</link>
            <guid>https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for</guid>
            <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Most autistic people I know have a mental list of things that would make work survivable, and a second list of things they'd never ask for because they sound ridiculous. The second list is usually the more useful one. It's where you find the requests that would actually change your week, filed under "they'd think I'm difficult" and left there for years.]]></description>
            <content:encoded><![CDATA[<p>Most autistic people I know have a mental list of things that would make work survivable, and a second list of things they'd never ask for because they sound ridiculous. The second list is usually the more useful one. It's where you find the requests that would actually change your week, filed under "they'd think I'm difficult" and left there for years.</p>
<p>I'm autistic. I've asked for some of these and lost sleep over asking. I've also spent a lot of my career on the other side of the table, watching people who needed something obvious never say a word about it. So here's the longer list, including the parts that feel too small or too strange to bring up.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-first-thing-worth-knowing">The First Thing Worth Knowing<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#the-first-thing-worth-knowing" class="hash-link" aria-label="Direct link to The First Thing Worth Knowing" title="Direct link to The First Thing Worth Knowing" translate="no">​</a></h2>
<p>An accommodation is a change to how the job gets done. That's the whole definition. It isn't a reduction in what you're accountable for, and it isn't a favor someone does you because they're nice.</p>
<p>That distinction matters more than it sounds. Most autistic people I've talked to frame their requests as personal failings they're asking the company to tolerate. "I know this is annoying, but." That framing invites a favor, and favors get withdrawn when the person granting them has a bad quarter or gets replaced. A change to how the work gets done doesn't have that problem, because you can point at the work.</p>
<p>You also don't need a diagnosis for most of what follows. A lot of it is stuff any employee can request. Ask plainly first. Escalate to the formal process only if plain asking fails, or if you want the paper trail.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sensory-and-physical">Sensory and Physical<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#sensory-and-physical" class="hash-link" aria-label="Direct link to Sensory and Physical" title="Direct link to Sensory and Physical" translate="no">​</a></h2>
<p>The obvious ones are obvious. Noise-cancelling headphones and permission to wear them in meetings, a desk away from the kitchen and the printer, natural light or the option to sit away from a window.</p>
<p>Here's what people miss:</p>
<p><strong>The light above your desk can be turned off.</strong> Not the whole office. The specific fixture over your head. Facilities does this all the time. If you've spent five years with a flickering fluorescent tube grinding at your skull, that's five years you could have gotten back by asking one person once.</p>
<p><strong>You can ask out of hot-desking.</strong> Open-plan offices with unassigned seating are one of the worst environments ever inflicted on autistic workers, and "I need a consistent, predictable workspace" is an extremely standard request. An assigned desk is cheap. Ask for one.</p>
<p><strong>You can ask for a fragrance-free radius.</strong> Colleagues' perfume and scented plug-ins can be genuinely disabling. Companies handle this for people with asthma and migraines constantly. It isn't a novel request.</p>
<p><strong>Dress code has more give than the handbook suggests.</strong> If certain fabrics or shoes are unbearable, say so. Nobody in the history of business casual has ever noticed which specific shirt you're wearing, but you'll notice all day.</p>
<p><strong>You're allowed to move.</strong> Standing during calls, walking meetings, a fidget on your desk, stimming that isn't disruptive. If you've been suppressing this in open view for years, you know how much energy it costs. That energy is coming out of your actual work.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="meetings">Meetings<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#meetings" class="hash-link" aria-label="Direct link to Meetings" title="Direct link to Meetings" translate="no">​</a></h2>
<p>This is where the useful, under-asked-for accommodations live.</p>
<p><strong>Agendas in advance.</strong> A written agenda, at least a day ahead, with what's expected of you spelled out. This is the single highest-value request on the list and it's almost never made. If you know what a meeting is about, you can prepare and contribute. If you don't, you spend the whole thing reconstructing the plot in real time and then get feedback about how quiet you are.</p>
<p><strong>No unlabeled "quick chat" invites.</strong> A calendar block with no subject and no agenda from your manager will destroy your entire day, and the meeting will turn out to be about parking. Ask that invites carry a one-line purpose. Managers rarely realize what an unlabeled invite does.</p>
<p><strong>Advance notice for anything evaluative.</strong> Performance reviews, feedback conversations, anything with consequences. Getting pulled into an unscheduled room to be assessed is a setup for a bad outcome that has nothing to do with your ability. Ask for the topic and a day's notice.</p>
<p><strong>The right to answer later.</strong> A standing agreement that you can say "let me think and get back to you by end of day" instead of producing a position on the spot. Speed of verbal response is not quality of thinking, but meetings reward it anyway. This request just decouples the two.</p>
<p><strong>Camera off.</strong> Reading faces on a video grid is expensive processing, and your own face in the corner is worse. Many companies default to cameras-on. You can ask out.</p>
<p><strong>Recordings or transcripts.</strong> Automatic notetakers are standard now, which makes this easy to get. If you process better by reading than by listening in real time, this is the fix.</p>
<p><strong>Meeting shape.</strong> Some people need buffer time to decompress after meetings. Some need everything stacked into one block so the rest of the day stays clean. Both are valid, and they're opposites, so work out which one you actually are before you ask. Guessing wrong makes your calendar worse.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="communication">Communication<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#communication" class="hash-link" aria-label="Direct link to Communication" title="Direct link to Communication" translate="no">​</a></h2>
<p><strong>Verbal instructions confirmed in writing.</strong> Frame it as a standing expectation, not a request you make each time. "Send me a Slack message after we talk so I have it" costs the other person eight seconds and eliminates an entire category of failure.</p>
<p><strong>A named channel.</strong> If phone calls are hard, say email and Slack only. If drop-bys are hard, say scheduled or async only. You don't have to be reachable through every door in the building.</p>
<p><strong>One point of contact.</strong> When five people can assign you work directly, you have five queues and no way to prioritize between them. Routing through one person is an ordinary operational fix that happens to solve a real problem for you.</p>
<p><strong>A no-hints policy.</strong> This one takes nerve. Ask your manager to tell you directly when something is wrong, in plain words, without softening it into a hint you're expected to decode. Most managers have been trained to deliver criticism obliquely. That training makes their feedback useless to you. Ask them to drop it, and tell them you won't take the directness badly. Most are relieved.</p>
<p><strong>Written criteria for your performance review.</strong> If your review says "needs to work on communication" or "lacks executive presence," you've been handed a grade with no rubric. Ask for observable, specific criteria in writing, before the review period, not after. Vague evaluation criteria are where autistic careers quietly stall. Fixing this is legitimate and you should push hard on it.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="work-structure">Work Structure<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#work-structure" class="hash-link" aria-label="Direct link to Work Structure" title="Direct link to Work Structure" translate="no">​</a></h2>
<p><strong>A written scope for your job.</strong> Ambiguity about what you're responsible for is a barrier in itself. Ask for it in writing and ask what "good" looks like at your level.</p>
<p><strong>Protected focus blocks.</strong> Not "I'd like fewer interruptions." Specific hours, on the calendar, where you're not expected to be responsive.</p>
<p><strong>Off the interrupt rotation, or on it differently.</strong> Support duty, on-call, triage, whatever your version is. Sometimes the fix isn't removal but restructuring: longer, less frequent shifts instead of constant partial attention.</p>
<p><strong>Task swaps instead of task reduction.</strong> If a chunk of your role is customer-facing and it's eating you alive, propose trading it for work someone else doesn't want. This lands much better than asking to do less, and it's usually true that somebody on the team wants the trade.</p>
<p><strong>Advance notice of change.</strong> Reorgs, tooling migrations, desk moves, office relocations, process changes. You can ask to be told early rather than in the all-hands. Managers can usually do this and it doesn't occur to them that it matters.</p>
<p><strong>A predictable schedule.</strong> Core hours you can count on, and protection from last-minute rescheduling. Also: a flexible start time. If your commute at rush hour is sensory hell and thirty minutes earlier makes it tolerable, ask for the thirty minutes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-social-layer">The Social Layer<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#the-social-layer" class="hash-link" aria-label="Direct link to The Social Layer" title="Direct link to The Social Layer" translate="no">​</a></h2>
<p><strong>You can opt out of team-building without it counting against you.</strong> That second clause is the important one. Anyone can skip an offsite. What you want is agreement that skipping isn't logged as low engagement. Say that part out loud, because otherwise it happens silently in a calibration meeting you're not in.</p>
<p><strong>You can eat lunch alone.</strong> Every day. The same lunch. This is not a problem that requires solving, but well-meaning colleagues will try to solve it, so it's worth naming once.</p>
<p><strong>You don't have to be the ambassador.</strong> If you're the only out autistic person at your company, you'll get asked to speak on panels, review the DEI deck, and mentor every new neurodivergent hire. Some people want that. If you don't, declining is fine, and you can decline permanently rather than one invitation at a time.</p>
<p><strong>Business travel is negotiable.</strong> Your own hotel room instead of a shared one. Direct flights. Arriving a day early so you're not walking into a conference at full sensory load off a red-eye. Seeing the venue before the event starts. These get granted more often than people expect because they're small line items.</p>
<p><strong>Support in HR meetings.</strong> If you're in a disciplinary or investigatory conversation, you can ask to bring someone, and you can ask for questions in advance. Under pressure, in an unfamiliar format, with someone reading your body language for guilt, is close to a worst-case setting for an autistic person. Don't go in alone if you can help it.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-home-is-the-office">When Home Is the Office<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#when-home-is-the-office" class="hash-link" aria-label="Direct link to When Home Is the Office" title="Direct link to When Home Is the Office" translate="no">​</a></h2>
<p>Remote work gets treated as the accommodation, singular, after which the conversation is considered finished. It isn't. Working from home solves the sensory problem and leaves most of the rest of this list untouched, and it adds a few of its own.</p>
<p><strong>Get remote documented as an accommodation, not a perk.</strong> This is the most important item on this page right now. If you work from home because your company allows it, that permission can be withdrawn in a single all-hands. If you work from home as a documented accommodation, withdrawing it requires a process and a stated reason. Same job, different footing. If you're remote today and it's holding your working life together, spend the awkward twenty minutes getting it written down before the return-to-office memo lands, not after.</p>
<p><strong>A mandate is not the end of the conversation.</strong> Company-wide RTO policies still have an individual exemption path, and the fact that it applies to everyone doesn't remove the obligation to consider your situation specifically. Ask.</p>
<p><strong>Your home office is fundable.</strong> Employers buy chairs and monitors routinely. Less routinely, and still very much on the table: acoustic panels, a better lamp, a door, a second monitor arm so the screen sits where your neck wants it.</p>
<p><strong>If you're hybrid, the specific days matter more than the count.</strong> Fixed days beat floating ones. And say whether you want them adjacent, so there's one disruption and one recovery, or spread out so you never have two hard days back to back. Nobody is going to ask you which you prefer.</p>
<p><strong>Office days should have a reason.</strong> Commuting in to sit on video calls in a louder room with worse coffee is the worst available configuration. If you're being asked in, it's fair to ask what for.</p>
<p><strong>Get a response window in writing.</strong> The remote version of constant availability is the green dot. An agreed expectation, something like "I check Slack hourly, genuinely urgent goes to my phone," replaces an unstated assumption that you're instant. Unstated assumptions are the ones you fail without knowing.</p>
<p><strong>Hard edges on the day.</strong> Remote deleted the commute, and the commute was doing real work as a transition. No meetings before a certain hour, a hard stop at the end, no expectation of evening Slack.</p>
<p><strong>Mandatory virtual fun is worse than the in-person kind.</strong> Coffee roulette, the standing social call, the Friday quiz. Opt out, and get the same agreement as before that opting out isn't quietly scored.</p>
<p><strong>Ask for decisions to be written down.</strong> Remote workers lose the hallway. Choices get made in a huddle you weren't in and surface three weeks later as something you were apparently supposed to know. Pushing for decisions in a findable written place is an ordinary operational request that helps the whole team, which makes it one of the easiest asks on this list to win.</p>
<p><strong>Onboarding and tool migrations hit harder remotely.</strong> Written documentation, recorded walkthroughs, and one named person you're allowed to ask stupid questions.</p>
<p><strong>A backup for when home stops working.</strong> Construction next door, a broken boiler, family staying for a month. A coworking day pass or a bookable office for those weeks costs almost nothing and saves you from working through it.</p>
<p>The trap to watch for: don't let "but you work from home" become the standing answer to everything else. Remote solves the fluorescent lights. It does not produce agendas, direct feedback, or written performance criteria. If every subsequent request gets waved off because you're already remote, name that pattern out loud.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="before-youre-even-hired">Before You're Even Hired<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#before-youre-even-hired" class="hash-link" aria-label="Direct link to Before You're Even Hired" title="Direct link to Before You're Even Hired" translate="no">​</a></h2>
<p>Accommodations apply to hiring, and almost nobody asks.</p>
<p>You can request interview questions in advance. You can ask for a written or take-home exercise instead of live whiteboarding. You can ask for the interview format, the names and roles of who you'll be meeting, and how long each stage runs. You can ask for a break between panel rounds. You can ask for the office layout, or to do it remotely.</p>
<p>None of this reveals a diagnosis, and asking for the agenda of a meeting you're attending is not a strange thing to do. Companies that treat it as strange have told you something worth knowing.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="asking">Asking<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#asking" class="hash-link" aria-label="Direct link to Asking" title="Direct link to Asking" translate="no">​</a></h2>
<p>The formal route in the US runs through the ADA's interactive process, usually via HR. The Job Accommodation Network at askjan.org is free, US-based, and has specific written suggestions you can hand to an employer. I'm not a lawyer and none of this is legal advice, but knowing the vocabulary helps, because "I'd like to start an interactive process about a reasonable accommodation" gets a different response than "hey, is there any chance."</p>
<p>The tradeoff is real. The formal process creates a record, which protects you if things go badly later. It also creates a record, which some people don't want. The informal ask is fast and gets you what you need this week, and it evaporates when your manager changes jobs. My own approach: ask informally, get the answer in writing anyway, even if the writing is just a Slack message from your manager saying yes. If the informal ask gets refused or slow-walked, that's your signal to escalate.</p>
<p>The fear underneath all of this is usually the same. If I ask for the thing, they'll think I can't do the job. I've felt it. It's a rational fear in some workplaces.</p>
<p>But look at what masking actually buys you. You spend enormous effort appearing not to need anything, that effort comes directly out of the work you were hired to do, and the reward is that everyone concludes you don't need anything. You're paying for the evidence used against you. Meanwhile you're operating at some fraction of your capacity and getting reviewed as if that fraction is your ceiling.</p>
<p>The request that makes you look weak is the one framed as a confession. "I'm sorry, I know this is a lot, I have trouble with." Try the version that isn't: "I do my best work with a written agenda. Can you send one ahead of our syncs?" Same request. Completely different thing being said.</p>
<p>Start with one. Pick the item on your list that would change the most about your week and cost your employer the least, and ask for that one first. Get a yes on the small thing. The next ask is much easier from there.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-the-answer-is-no">When the Answer Is No<a href="https://risadams.com/blog/2026/08/11/accommodations-nobody-tells-you-to-ask-for#when-the-answer-is-no" class="hash-link" aria-label="Direct link to When the Answer Is No" title="Direct link to When the Answer Is No" translate="no">​</a></h2>
<p>First, work out which no you got. They sound identical and they need different responses.</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>"I don't understand what you're asking."</strong> By far the most common, especially for anything that sounds unusual. Nothing has been refused yet. Rewrite the request in terms of the work and try again.</li>
<li><strong>"I don't have the authority."</strong> Your manager can't approve a desk change or a schedule change and would rather not say so. Ask who can, and ask them to make the introduction.</li>
<li><strong>"Not that specific thing."</strong> A real constraint sits behind it. Budget, coverage, a client contract. This one leaves room.</li>
<li><strong>"No, and stop asking."</strong> Rare, and it tells you considerably more about the employer than about your request.</li>
</ul>
<p><strong>Put the no in writing.</strong> Not aggressively. Just a short reply after the conversation: "Confirming I've understood, I asked for X and the answer is no because Y." A lot of soft refusals don't survive that sentence, because a no delivered in a hallway costs nothing and a no somebody has to type out and stand behind costs something. If it does survive, you've now got a stated reason you can work against, and a record if you ever need one.</p>
<p><strong>Ask what they'd propose instead.</strong> In the US you aren't entitled to the accommodation you asked for. You're entitled to an effective one, worked out through what the ADA calls an interactive process. A flat no with no alternative offered means that process didn't happen. "That doesn't work for you, so what would?" asks for it, without accusing anyone of anything.</p>
<p><strong>Unbundle it.</strong> A no to one large request is frequently a yes to three smaller ones. Fully remote becomes two fixed days at home. A private office becomes a standing room booking twice a week. Take the pieces and come back for the rest later.</p>
<p><strong>Ask for a trial.</strong> "Could we try it for six weeks and review?" converts a genuinely surprising number of no's, because most of them are fear of permanence rather than objection to the thing itself.</p>
<p><strong>If the objection is cost, name the number.</strong> The Job Accommodation Network's long-running employer survey keeps landing in the same place: around half of accommodations cost nothing at all, and most of the rest are a one-time cost of a few hundred dollars. If somebody is treating a desk lamp as a budget conversation, budget isn't what's happening, and you can say so pleasantly.</p>
<p><strong>If the objection is fairness,</strong> the "if I do it for you I'd have to do it for everyone" line, there are two answers and both are true. Accommodations are individual by design, which is the formal answer. The practical one is: fine, do it for everyone. Agendas help everyone. Written decisions help everyone. Most of this list would improve the department.</p>
<p><strong>Check whether documentation is the real blocker.</strong> Sometimes the obstacle is that HR needs a letter from a doctor or occupational health, and nobody thought to mention it. Worth one question before you conclude you've been refused.</p>
<p><strong>Escalate on purpose, and mind the clock.</strong> Manager, then skip-level or HR, then a formal written accommodation request. Formal requests behave differently from conversations because they create obligations and start timers. Past that, the US has the EEOC plus a state-level agency in most states, and the UK route runs through ACAS conciliation before a tribunal. Both have filing deadlines measured in months, not years, and I'd check the current numbers rather than trust my memory of them. The point is that you can spend eighteen months being patient and reasonable and find the door shut somewhere around month six.</p>
<p><strong>Route around what you can.</strong> Not everything needs a yes. If you can't get your manager to confirm instructions in writing, send the confirmation yourself: "Following up on our conversation, here's what I understood we agreed." That gets you most of the benefit and requires nobody's approval. Put your own focus blocks on your own calendar. Ask for the agenda in the invite thread rather than trying to win it as policy. A decent fraction of this list can be self-served the moment you stop waiting for permission.</p>
<p><strong>Keep a record.</strong> Dates, what you asked for, what was said, who said it. Somewhere that isn't a company laptop or a company account. If it never matters, you've lost twenty minutes. If it ever matters, contemporaneous notes are the difference between a case and a feeling.</p>
<p>And know when you've actually got your answer. A refusal delivered with contempt, or a pattern of no's to requests that would cost nothing, is information about where you work rather than about what you need. That deserves to be taken seriously instead of turned into a personal improvement project. Some people should stay and fight for the agenda, because somebody has to, and the next autistic person hired there will inherit whatever you win. But it's a choice, and the energy for it comes out of the same account as the rest of your life. Leaving is a legitimate outcome. So is staying and deciding this particular fight isn't yours.</p>
<p>The option to avoid is the third one, where you never ask at all, decide on the company's behalf that the answer would have been no, and then spend five years paying the cost of a refusal nobody ever issued.</p>]]></content:encoded>
            <category>autism</category>
            <category>neurodiversity</category>
            <category>self-advocacy</category>
            <category>workplace-culture</category>
            <category>accessibility</category>
            <category>career</category>
            <category>boundaries</category>
            <category>mental-health</category>
        </item>
        <item>
            <title><![CDATA[Scope Creep Is a Goal-Setting Failure]]></title>
            <link>https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure</link>
            <guid>https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure</guid>
            <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Every project I've watched go sideways had the same issue. Somebody says "scope creep," everyone nods, and the room decides to blame the Scrum Master for failing to prevent it, or the Product Owner for changing requirements. We should have pushed back harder. We should have had a change control process. We should have been more disciplined. We need more Agile. We need less Agile.]]></description>
            <content:encoded><![CDATA[<p>Every project I've watched go sideways had the same issue. Somebody says "scope creep," everyone nods, and the room decides to blame the Scrum Master for failing to prevent it, or the Product Owner for changing requirements. We should have pushed back harder. We should have had a change control process. We should have been more disciplined. We need more Agile. We need less Agile.</p>
<p>That's not what happened. In every one of those projects, I couldn't have told you in one sentence what the project was supposed to accomplish. Neither could anyone else in the room. Scope creep isn't a discipline problem. It's what fills the space where a goal should have been.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="a-project-that-couldnt-fail">A Project That Couldn't Fail<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#a-project-that-couldnt-fail" class="hash-link" aria-label="Direct link to A Project That Couldn't Fail" title="Direct link to A Project That Couldn't Fail" translate="no">​</a></h2>
<p>My first job out of college had a project called Reporting Dashboard. That's not the real name. I'm not interested in calling out the company. The point was to track ad performance. What we actually spent our time on was the technology: which reporting engine, and how far we could abuse it into fitting the system we already had. We'd paid for that platform. It was going to work whether or not it wanted to. It didn't, and we found that out slowly and expensively.</p>
<p>Nobody asked which ad decisions the dashboard was supposed to change. Nobody asked who would open it on a Monday morning, or what they'd do differently after they looked at it. Those questions weren't shut down. They just never came up. I didn't ask them either. I was twenty-two, and I assumed the people above me were holding answers I hadn't earned access to yet.</p>
<p>The project ran for years before I got there, and I assume it ran for years after I left. It never went into production. The part that stuck with me isn't that it failed. It's that it couldn't fail. There was no condition under which anyone could stand up and say the Reporting Dashboard is finished, and no condition under which anyone could say this isn't working, we should stop. Both of those sentences need the same thing underneath them, and we didn't have it.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="goals-have-verbs">Goals Have Verbs<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#goals-have-verbs" class="hash-link" aria-label="Direct link to Goals Have Verbs" title="Direct link to Goals Have Verbs" translate="no">​</a></h2>
<p>Here's the distinction, which I couldn't have named until a few jobs later. "Reporting Dashboard" is a noun. Nouns name a thing you're building, and a thing under construction can always have more added to it. There's no sentence you can build out of a noun that tells you when to stop.</p>
<p>A goal is a verb with a number attached. Cut the time the media team spends assembling the weekly performance report from four hours to twenty minutes. Get us to the point where we kill an underperforming campaign within a day instead of at the end of the month. Those are ugly and specific and much harder to get everyone to agree to, which is exactly why the noun keeps winning. The noun lets eight people leave the room believing eight different things and feel good about the meeting.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="nobody-asks-for-scope-creep">Nobody Asks for Scope Creep<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#nobody-asks-for-scope-creep" class="hash-link" aria-label="Direct link to Nobody Asks for Scope Creep" title="Direct link to Nobody Asks for Scope Creep" translate="no">​</a></h2>
<p>Nobody on that project asked for scope creep. What we got were ordinary questions from people doing their jobs. Could it slice the numbers a different way. Could it pull in the feed we were already paying another vendor for. Could a client see it instead of just us.</p>
<p>Every one of those is a fair question. That's the trap. With a goal in the room, each one gets measured against it: does this move the media team from four hours toward twenty minutes? Some would have. Most wouldn't. Both answers are easy to say out loud when there's a number sitting on the table, and neither one requires somebody to volunteer as the difficult person.</p>
<p>We had no number on the table. So the only things left to weigh a request against were who was asking and how tired we were that week. Every request turned into a yes, and it turned into a yes for a reason nobody wanted to write down.</p>
<p>The client-facing question is the one I'd flag now. Putting it in front of a client meant a second product wearing the first one's clothes, with its own security model and its own answer to what counts as acceptable downtime at 2am. Nobody wanted that, because weighing it would have required something to weigh it against. It went onto the list with everything else. The list had no criteria. It only had room.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-you-cant-put-a-number-on-it">When You Can't Put a Number on It<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#when-you-cant-put-a-number-on-it" class="hash-link" aria-label="Direct link to When You Can't Put a Number on It" title="Direct link to When You Can't Put a Number on It" translate="no">​</a></h2>
<p>The obvious objection: some work is genuinely exploratory. You don't know what the outcome should be, because finding out is the work. Demand a number up front and you'll get a fabricated one, which is worse than none at all, because now people have to defend it.</p>
<p>That's fair, and it doesn't get you out of having a goal. It moves the goal somewhere else. When you can't say what the result should be, the goal becomes the question you're trying to answer and the date you'll have an answer by. Find out whether our event data can reconcile against the vendor's, and know by the end of the month. That's still a verb, and it still has a stopping condition, which was the part you were missing. A goal doesn't have to predict the future. It just has to give you something to work towards.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="if-youre-already-in-too-deep">If You're Already in too Deep<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#if-youre-already-in-too-deep" class="hash-link" aria-label="Direct link to If You're Already in too Deep" title="Direct link to If You're Already in too Deep" translate="no">​</a></h2>
<p>At a kickoff, this is easy advice: write the verb before you write the backlog, and write down what you're not doing right next to it. Most people reading this aren't at a kickoff. They're eight months into something shapeless, watching the list get longer every week, with no standing to call a reset.</p>
<p>You can't retroactively define the goal you should have had. Nobody is going to give you a meeting for that. What you can do is ask the questions that would have produced it, in the rooms you're already sitting in.</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>What changes for somebody if we ship this?</strong> If the answer comes back as a list of features, ask again. Features aren't changes. You're looking for a person whose week is different.</li>
<li><strong>Who opens this on Monday, and what do they do differently after they look at it?</strong> A named role beats a department name. If nobody can produce one, you're building for an audience that doesn't exist yet.</li>
<li><strong>What would have to be true for us to stop?</strong> This one makes people uncomfortable, because it sounds like you're asking permission to quit. You're not. A project nobody can stop is a project nobody can finish.</li>
<li><strong>If we could only ship a third of this, which third?</strong> People who won't state a goal directly will state it happily in this form. Whatever they pick is the goal.</li>
</ul>
<p>None of those are objections. They're questions, which matters when you're the youngest person in the room and you've correctly worked out that you have no leverage. Nobody gets marked down for asking who the user is.</p>
<p>If the answers come back sharp, you got the goal you were missing, and the next scope conversation gets a lot shorter. If the room goes quiet, the silence is your answer. Write it down somewhere, even if nothing changes that week.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-id-tell-my-younger-self">What I'd Tell my Younger Self<a href="https://risadams.com/blog/2026/08/04/scope-creep-is-a-goal-setting-failure#what-id-tell-my-younger-self" class="hash-link" aria-label="Direct link to What I'd Tell my Younger Self" title="Direct link to What I'd Tell my Younger Self" translate="no">​</a></h2>
<p>I've thought about that project more than it deserves. Not because it failed, and not because I could have saved it; I couldn't have. I was the most junior person on it, and I had no idea what I was looking at.</p>
<blockquote>
<p>What I'd tell him is that the question he was afraid to ask was the cheapest question in the building.</p>
</blockquote>
<p>Who opens this, and what do they do differently afterward? He assumed the silence meant the answer lived somewhere above his pay grade. It didn't live anywhere. Nobody had it. Asking wouldn't have exposed him as the kid who didn't understand the project.</p>
<p>It would have exposed the project. Years before anyone wrote a line of code, and long before anyone in a postmortem got around to calling it creep.</p>]]></content:encoded>
            <category>agile</category>
            <category>goals</category>
            <category>planning</category>
            <category>project</category>
            <category>leadership</category>
            <category>communication</category>
            <category>product-owner</category>
            <category>decision-making</category>
            <category>scrum-master</category>
        </item>
        <item>
            <title><![CDATA[Velocity Didn't Fail. It Worked Too Well.]]></title>
            <link>https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well</link>
            <guid>https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well</guid>
            <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[There's a moment in a lot of standups that nobody names out loud. The team is underwater, everyone knows it, and when planning poker comes around a story that's honestly a three gets called a five. Nobody argues. Not because anyone's lying. Because the number has quietly stopped being an estimate and turned into a shield.]]></description>
            <content:encoded><![CDATA[<p>There's a moment in a lot of standups that nobody names out loud. The team is underwater, everyone knows it, and when planning poker comes around a story that's honestly a three gets called a five. Nobody argues. Not because anyone's lying. Because the number has quietly stopped being an estimate and turned into a shield.</p>
<p>I've watched that happen on teams I was supposed to be protecting. The velocity chart looked great the entire time. That's the part that should bother you.</p>
<!-- -->
<p>Most posts about velocity want to tell you it's a bad metric and you should stop measuring it. I don't think that's right. Velocity is a fine planning tool. It helps a team figure out how much it can reasonably take on. The problem isn't the number. It's the job we promoted the number into, why it got promoted, and what that costs you that never shows up on the chart.</p>
<p>So here's my actual claim: velocity didn't fail. It succeeded at the wrong job. It became the cheapest way for a team's work to look productive to the people above it, and that cheapness is exactly why the real bill, burnout and the attrition that follows it, stays invisible until someone hands you a resignation letter.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-metric-that-travels">The metric that travels<a href="https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well#the-metric-that-travels" class="hash-link" aria-label="Direct link to The metric that travels" title="Direct link to The metric that travels" translate="no">​</a></h2>
<p>Think about everything that happens inside a single sprint. Someone does a careful refactor that'll save the next person a week. A teammate is clearly fried and pushing through anyway. A quiet architecture decision dodges a month of pain six months from now. The on-call rotation chews up two people's focus. None of that compresses well. None of it fits on a slide.</p>
<p>Velocity does. It's one number, it trends on a chart, and it survives the trip from the team room to the VP's dashboard intact. So it gets overweighted, not because anyone's malicious, but because it's the signal that's actually available. Leadership reports velocity for the same reason you reach for the flashlight that has batteries in it.</p>
<blockquote>
<p>when a measure becomes a target, it stops being a good measure.
—Charles Goodhart</p>
</blockquote>
<p>The trouble starts the moment that number becomes a target. Goodhart's law covers it: when a measure becomes a target, it stops being a good measure. The instant velocity turned from a planning aid the team owned into a performance number management owned, the estimates started drifting up. The three becomes a five. Coverage targets get hit by tests that assert nothing. The metric keeps climbing and tells you less every quarter.</p>
<p>Which brings up the objection that every honest version of this conversation has to answer. A VP says: "If I stop tracking velocity, how do I know the team is delivering?"</p>
<p>Here's the uncomfortable answer. You didn't know before either. Velocity was never proving how much a team could deliver. It was proving how busy the team looked. A team can hit its committed points every sprint and ship a pile of features nobody uses. John Cutler named this the feature factory: a story-point machine where the work gets celebrated by the unit and no one stops to ask whether any of it actually worked. A green velocity chart is fully compatible with shipping nothing of value. If that sentence stings, it's doing its job.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="redefine-done-so-it-includes-the-people-doing-it">Redefine "done" so it includes the people doing it<a href="https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well#redefine-done-so-it-includes-the-people-doing-it" class="hash-link" aria-label="Direct link to Redefine &quot;done&quot; so it includes the people doing it" title="Direct link to Redefine &quot;done&quot; so it includes the people doing it" translate="no">​</a></h2>
<p>If you change one thing, change what "done" means.</p>
<p>When "done" means the story is merged and the points are claimed, a team that's quietly drowning still looks done every single sprint. The definition of done can't see the debt the team is taking on to hit it. So the debt accrues silently, sprint after sprint, while every dashboard stays green.</p>
<p>A definition of done that ignores whether the team can do this again next sprint isn't a definition of done. It's an IOU you're writing against your own people.</p>
<p>This is where team health stops being a soft topic. The researchers behind the <a href="https://space-framework.com/" target="_blank" rel="noopener noreferrer">SPACE framework</a>, the developer-productivity model out of Microsoft, GitHub, and the University of Victoria, found that developer satisfaction works as a leading indicator. Not a feel-good footnote. An early warning system. When satisfaction drops while output holds steady, you're not fine. You're building hidden burnout that shows up later as attrition and a quiet collapse in quality. A fifteen percent satisfaction drop at stable velocity is a forecast, not a vibe.</p>
<p>Sit with what that means next to the velocity chart. The number that travels upward most easily is the one that structurally cannot show you the risk that costs you the most. Your team can be one bad quarter from losing two senior engineers, and velocity will report "on track" right up to the exit interview.</p>
<p>That's the case for putting sustainability inside your definition of done. Not as a wellness perk. As the only place in your process that's actually watching the signal your delivery metrics are blind to.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="give-the-number-keepers-something-better-to-report">Give the number-keepers something better to report<a href="https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well#give-the-number-keepers-something-better-to-report" class="hash-link" aria-label="Direct link to Give the number-keepers something better to report" title="Direct link to Give the number-keepers something better to report" translate="no">​</a></h2>
<p>Here's the part most of these arguments skip. You can't just tell a Product Owner or an engineering manager to stop reporting velocity and walk away. They answer to someone. Take away their number without handing them a better one and you've just asked them to go dark upstream, which no one with a job is going to do.</p>
<p>So give them the replacement. This is what <a href="https://dora.dev/guides/dora-metrics/" target="_blank" rel="noopener noreferrer">DORA metrics</a> are for: lead time for changes, deployment frequency, change failure rate, and mean time to restore. Two of those measure speed to value, two measure stability. They travel upward as cleanly as velocity does, and they're a lot harder to game without genuinely getting better. You can inflate an estimate. You can't fake a low change failure rate. The number gets better only when the system does.</p>
<p>Pair that with how you talk about the work. Instead of "we burned forty-seven points," the report becomes "we shipped the thing that lets customers do X, here's the lead time behind it and here's our failure rate." A sprint goal is the unit of value. Report the goal and the quality behind it, not the volume of tickets that fed it.</p>
<p>One honest warning, because the alternative to one bad metric is not four shiny ones. Goodhart's law applies to DORA too. Turn deployment frequency into a target and someone will start splitting deploys to juice the count. Swap a single weaponized number for four and you've rebuilt the same machine with more dials. The fix was never a better leaderboard. The fix is refusing to let any one metric become the whole story, and keeping velocity where it belongs: inside the team as a capacity check, off the executive slide as a verdict.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-done-should-actually-mean">What "done" should actually mean<a href="https://risadams.com/blog/2026/06/30/velocity-didnt-fail-it-worked-too-well#what-done-should-actually-mean" class="hash-link" aria-label="Direct link to What &quot;done&quot; should actually mean" title="Direct link to What &quot;done&quot; should actually mean" translate="no">​</a></h2>
<p>The version of done I want is simple. The work shipped, and the team isn't starting the next sprint already in debt.</p>
<p>Velocity will tell you the first half of that sentence. It will never tell you the second. That's not a flaw you can tune out with a better burndown chart or a cleaner Jira board. It's the job the metric was never built to do. Asking velocity to report team health is like asking the speedometer whether the driver is tired.</p>
<p>Measure what you ship. Measure whether it worked. And measure, separately and on purpose, whether the people who built it can do it again. Ship code, stay human. The second part doesn't show up on the chart, which is exactly why it's the one you have to go looking for.</p>]]></content:encoded>
            <category>agile</category>
            <category>scrum</category>
            <category>burnout</category>
            <category>leadership</category>
            <category>team-dynamics</category>
            <category>management</category>
        </item>
        <item>
            <title><![CDATA[Staying Human, Using AI as a tool not a personality]]></title>
            <link>https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality</link>
            <guid>https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality</guid>
            <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Using AI is fine. Using it to replace your thinking isn't.]]></description>
            <content:encoded><![CDATA[<p>Using AI is fine. Using it to replace your thinking isn't.</p>
<p>There's a version of AI adoption that looks like efficiency and is actually absence. You've stopped being the person doing the work. You've become the person approving outputs. The strange part is how good it feels while it's happening. The work gets faster, the results look competent, and nobody notices, including you, until the day you need the skill the tool was quietly doing on your behalf.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-efficiency-trap">The Efficiency Trap<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#the-efficiency-trap" class="hash-link" aria-label="Direct link to The Efficiency Trap" title="Direct link to The Efficiency Trap" translate="no">​</a></h2>
<p>The pull toward maximum AI use makes sense. If a tool can draft something in seconds, why spend an hour doing it yourself? If it can summarize a document, why read it?</p>
<p>The logic holds right up until you notice that the thinking you're skipping isn't overhead. It's often the actual point.</p>
<p>Writing a first draft forces you to figure out what you believe. Reading a document means you bump into the one specific claim that changes your understanding. Debugging your own code means you'll recognize the same failure faster next time. The struggle is where the skill gets built. When you hand those tasks off from the start, you collect the output and quietly skip the part that was making you better.</p>
<p>This is the difference between a tool that extends you and a tool that stands in for you. A power drill extends a carpenter. It doesn't make decisions about where the cabinet goes. The moment AI starts making the decisions that used to be yours, the relationship has flipped, and you might not be the one in charge anymore.</p>
<p>Ethan Mollick, a Wharton professor who studies AI's effect on knowledge work, lands on a similar place in his 2024 book <em>Co-Intelligence</em>. He argues for treating AI as a capable collaborator you actively work with rather than a vending machine you pull finished answers from (<a href="https://www.amazon.com/Co-Intelligence-Living-Working-Ethan-Mollick/dp/059371671X" target="_blank" rel="noopener noreferrer">Mollick, <em>Co-Intelligence</em>, 2024</a>). One of his core rules is plain: be the human in the loop. Not because the model is dumb, but because you bring things it can't, including accountability, real context, and judgment about what actually matters in this specific situation.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-kasparov-figured-out">What Kasparov Figured Out<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#what-kasparov-figured-out" class="hash-link" aria-label="Direct link to What Kasparov Figured Out" title="Direct link to What Kasparov Figured Out" translate="no">​</a></h2>
<p>Garry Kasparov has more reason than almost anyone to resent machines. In 1997 he lost a match to IBM's Deep Blue, the first time a reigning world champion fell to a computer under tournament conditions. His response was not to declare humans obsolete. It was to ask a better question: what happens when you put the human and the machine on the same side?</p>
<p>In 1998 he helped launch "Advanced Chess," where players used computers as real-time aids during their games. Years later, watching freestyle tournaments where any mix of humans and software could compete, he noticed something he never forgot. The winners weren't the grandmasters with the strongest engines. In his words, "weak human + machine + better process was superior to a strong computer alone and, more remarkably, superior to a strong human + machine + inferior process" (<a href="https://www.nybooks.com/articles/2010/02/11/the-chess-master-and-the-computer/" target="_blank" rel="noopener noreferrer">Kasparov, <em>New York Review of Books</em>, 2010</a>).</p>
<p>Read that twice, because it inverts the assumption most people bring to AI. The decisive factor wasn't the strength of the human or the strength of the machine. It was the quality of the collaboration between them. Amateurs who knew how to work with their tools beat experts who didn't.</p>
<p>That's the model worth keeping. The human brings judgment about the problem and what the goal really is. The machine brings speed and pattern matching. Neither alone beats the pairing. But the pairing only works if the human is genuinely in the seat, steering, and not just rubber-stamping whatever the model proposes.</p>
<p>The failure mode was never using AI. It's using it passively.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-cognitive-cost">The Cognitive Cost<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#the-cognitive-cost" class="hash-link" aria-label="Direct link to The Cognitive Cost" title="Direct link to The Cognitive Cost" translate="no">​</a></h2>
<p>Here's the part that's easy to wave away until it happens to you: leaning on a tool changes the brain behind it.</p>
<p>Nick Carr made this case in his 2010 book <em>The Shallows</em>, drawing on neuroscience to argue that the way we use tools reshapes how we think, not just what we get done (Carr, <em>The Shallows</em>, 2010). The brain is plastic. It strengthens what you practice and lets the rest fade. Outsource a mental task long enough and the underlying capability follows the use.</p>
<p>This isn't only a hunch. In 2011, researchers led by Betsy Sparrow published a study in <em>Science</em> showing what they called the Google effect: when people expect to be able to look something up later, they remember the fact itself less well and instead remember where to find it (<a href="https://doi.org/10.1126/science.1207745" target="_blank" rel="noopener noreferrer">Sparrow, Liu &amp; Wegner, <em>Science</em>, 2011</a>). We've started treating search as an external hard drive for memory. The general term for this is cognitive offloading, and researchers have spent the last decade documenting how readily we hand mental work to our devices (<a href="https://doi.org/10.1016/j.tics.2016.07.002" target="_blank" rel="noopener noreferrer">Risko &amp; Gilbert, <em>Trends in Cognitive Sciences</em>, 2016</a>). AI is cognitive offloading with the volume turned all the way up. It doesn't just store the answer. It produces the reasoning too.</p>
<p>A 2025 study from Microsoft Research and Carnegie Mellon put numbers on the worry. Surveying knowledge workers about how they actually use generative AI on the job, the researchers found that the more people trusted the AI, the less critical thinking they reported applying to its output. The people who kept thinking critically were the ones who trusted their own judgment, not the tool's (<a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2025/01/lee_2025_ai_critical_thinking_survey.pdf" target="_blank" rel="noopener noreferrer">Lee et al., Microsoft Research and Carnegie Mellon, CHI 2025</a>). Confidence in the machine and engagement of your own mind moved in opposite directions.</p>
<p>The everyday version is the GPS. It doesn't make you stupid. But if you never navigate without it, you stop building the mental map of the city that comes from occasionally getting a little lost. You arrive at the destination and couldn't redraw the route if your phone died.</p>
<p>The same dynamic runs through writing, code, and any creative work. AI that supplements your thinking is one thing. AI that replaces it is another. From the outside the gap is invisible, because the output can look identical either way. The only person who knows whether you actually thought about it is you.</p>
<p>There's also a skill-level wrinkle worth sitting with. The Brynjolfsson, Li, and Raymond study of customer-support agents found that AI assistance raised productivity most for newer and lower-skilled workers, while experienced top performers gained little (<a href="https://www.nber.org/papers/w31161" target="_blank" rel="noopener noreferrer">Brynjolfsson, Li &amp; Raymond, NBER, 2023</a>). AI is a powerful equalizer for beginners, and that's genuinely good. But flip it around: if you're experienced and you start leaning on the tool the way a novice does, you may be trading away the hard-won judgment that made you worth more than a novice in the first place.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-ironies-of-automation">The Ironies of Automation<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#the-ironies-of-automation" class="hash-link" aria-label="Direct link to The Ironies of Automation" title="Direct link to The Ironies of Automation" translate="no">​</a></h2>
<p>None of this is new. Back in 1983, the engineering psychologist Lisanne Bainbridge wrote a short, sharp paper called "Ironies of Automation" that reads like it was written about AI last week (<a href="https://doi.org/10.1016/0005-1098%2883%2990046-8" target="_blank" rel="noopener noreferrer">Bainbridge, <em>Automatica</em>, 1983</a>).</p>
<p>Her argument went like this. When we automate a system, we hand the easy, routine parts to the machine and leave the human with two jobs: monitor the automation, and take over when it fails. But those two jobs are in tension. Watching a system run smoothly is boring, and humans are terrible at sustained vigilance. Worse, because the machine now handles all the routine work, the operator's own skills wither from disuse. So at the exact moment the automation hits something it can't handle and kicks control back to the human, that human is the least practiced they've ever been, facing the hardest situation the system can produce.</p>
<p>The more reliable the automation, the sharper the irony. The better it works, the more you trust it, and the more you trust it, the less you're really watching. That inattention is exactly what sinks you on the rare day it fails.</p>
<p>Aviation learned this the expensive way. In 2009, Air France Flight 447 fell out of the sky over the Atlantic after its airspeed sensors iced over and the autopilot handed control back to the crew. The pilots, suddenly flying manually in conditions the automation usually managed, made nose-up inputs that stalled the aircraft, and never recovered it. France's accident investigators, and the safety reviews that followed, raised an uncomfortable point: pilots now hand-fly modern jets so rarely that the basic stick-and-rudder skill they need in a crisis can quietly erode. The fix the industry reached for wasn't less capable autopilots. It was deliberately making pilots fly by hand often enough to stay sharp.</p>
<p>That's the lesson to carry into knowledge work. The danger isn't the tool. It's the slow erosion of the human underneath it, hidden right up until the day the tool can't help and you discover what you've forgotten how to do.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="staying-the-author">Staying the Author<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#staying-the-author" class="hash-link" aria-label="Direct link to Staying the Author" title="Direct link to Staying the Author" translate="no">​</a></h2>
<p>So what does responsible use actually look like? Not refusing the tool. Using it on purpose.</p>
<p><strong>Start with your own thinking before you ask for help.</strong> Sketch a rough outline. Form an opinion. Write the first ugly paragraph yourself. Then bring in AI to push against it, stretch it, or poke holes. Starting from your thinking and starting from the model's output produce very different results, because one sharpens an argument you own and the other quietly installs an argument you didn't.</p>
<p><strong>Push back on what you get.</strong> Don't treat the first response as the verdict. Ask it to argue the opposite side. Ask why it chose what it chose. These systems are tuned to sound helpful and agreeable, which means they'll happily confirm a bad idea with total confidence. Your skepticism is the thing standing between fluent and correct.</p>
<p><strong>Keep your name on the work in a way that means something.</strong> A simple gut check: if you'd be uncomfortable explaining exactly how something got made, pay attention to that feeling. Not because AI help is shameful. It isn't. But you should be able to stand behind your process, not only the polished thing at the end of it.</p>
<p><strong>Do some of it the hard way on purpose.</strong> This is the part most people skip, and it's the one Bainbridge and the pilots would tell you matters most. Pick the skills you care about keeping and exercise them without the tool on a regular basis. Write something start to finish unassisted. Read the whole paper instead of the summary. Debug it yourself before you paste the error in. Treat it like keeping a language alive: use it or watch it fade.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-human-isnt-just-a-failsafe">The Human Isn't Just a Failsafe<a href="https://risadams.com/blog/2026/06/29/staying-human-using-ai-as-a-tool-not-a-personality#the-human-isnt-just-a-failsafe" class="hash-link" aria-label="Direct link to The Human Isn't Just a Failsafe" title="Direct link to The Human Isn't Just a Failsafe" translate="no">​</a></h2>
<p>There's a habit of framing "keep a human in the loop" as a safety measure, a way to catch the machine's mistakes before they cause damage. That framing is true but too small.</p>
<p>The human isn't there only to prevent errors. The human is there because the work needs a perspective that only comes from a person with real stakes in how it turns out. Someone has to know which question is worth asking, and notice when a technically correct answer is still the wrong thing to do. Someone has to actually care whether the result is any good. That's not a temporary capability gap the next model release closes. It's the part of the work that was always the point.</p>
<p>So use the tools. They're good, and they're getting better. Just be honest about which metaphor you're living by. Use AI like a calculator, something that takes a specific chunk of labor off your plate so you can spend your attention on the harder judgment it frees up. Don't use it like an autopilot you stop watching because the routine got boring. Flight 447 is what the second one looks like when the routine ends.</p>
<p>You're not here to review the machine's answers. You're here to be the person who knows whether it was even the right question.</p>]]></content:encoded>
            <category>ai</category>
            <category>productivity</category>
            <category>craft</category>
            <category>future-of-work</category>
            <category>focus</category>
            <category>humanism</category>
            <category>ethics</category>
            <category>tools</category>
            <category>thinking</category>
            <category>learning</category>
        </item>
        <item>
            <title><![CDATA[Introducing "Ink and Agency" a skill pack for humans (and claude)]]></title>
            <link>https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude</link>
            <guid>https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude</guid>
            <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[If your AI workflow still makes you repeat the same instructions in every single chat, that's a tax you don't need to pay. I built Ink and Agency to fix that friction point. It’s a practical skills pack that installs as a plugin in Claude Code (and now Codex), giving you reusable prompts for writing, planning, triage, architecture design, and just general day-to-day work.]]></description>
            <content:encoded><![CDATA[<p>If your AI workflow still makes you repeat the same instructions in every single chat, that's a tax you don't need to pay. I built <em>Ink and Agency</em> to fix that friction point. It’s a practical skills pack that installs as a plugin in Claude Code (and now Codex), giving you reusable prompts for writing, planning, triage, architecture design, and just general day-to-day work.</p>
<!-- -->
<p>I wanted better outputs with less effort and more consistency across tasks. So I turned repeatable playbooks into discrete skills, each with clear boundaries and predictable behavior.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-i-built-it">Why I Built It<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#why-i-built-it" class="hash-link" aria-label="Direct link to Why I Built It" title="Direct link to Why I Built It" translate="no">​</a></h2>
<p>Most agent failures don't happen because the model is bad. They happen because the prompt quality falls apart.</p>
<p>You ask for something broad, get a broad response. Then you spend time correcting it—steering it back on track. That’s fine if you do it once in a while. But when that becomes your daily job, it grinds you down.</p>
<p><em>Ink and Agency</em> packages task-specific behavior into reusable units. Now, you can route work by <strong>intent</strong> instead of rewriting the entire process every time.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="get-it-here">Get it here<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#get-it-here" class="hash-link" aria-label="Direct link to Get it here" title="Direct link to Get it here" translate="no">​</a></h2>
<p>Everything lives at <a href="https://github.com/risadams/ink-and-agency" target="_blank" rel="noopener noreferrer">risadams/ink-and-agency</a>. It’s MIT licensed and free to use.</p>
<p>Two older repos of mine, <code>risadams/skills</code> and <code>risadams/claude-subagent</code>, were folded into this one. Both histories came along via <code>git subtree</code>, so nothing was lost. The reason for the merge was simple: the subagent library couldn't ship to Codex, which has no equivalent primitive. Rewriting those specialists as skills made the whole library portable, and collapsed two install steps into one.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="whats-in-the-pack">What's In The Pack<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#whats-in-the-pack" class="hash-link" aria-label="Direct link to What's In The Pack" title="Direct link to What's In The Pack" translate="no">​</a></h2>
<p>200 skills, grouped into 15 category folders under <code>skills/</code>, each one a directory with a <code>SKILL.md</code> entry point. The split in the name is the split in the pack:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Ink</strong> covers workflow: writing, sprint and Scrum work, issue management, Obsidian tooling, codebase analysis, debugging, and an end-to-end build loop that runs plan → spec → tickets → implement → tdd → review.</li>
<li><strong>Agency</strong> covers expertise: roughly 138 specialist skills (language and framework experts, infra, data and AI, security, product), plus <code>clarity-council</code> and its 46 advisory personas for decisions that need more than one point of view.</li>
</ul>
<p>There's also a set of executive-function skills built with neurodivergent-friendly defaults, things like <code>task-initiation</code>, <code>hyperfocus-recovery</code>, and <code>energy-budget</code>. Those started as tools for me and stayed in because they earned their place.</p>
<p><em><strong>Quick start for Claude Code:</strong></em></p>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-sh code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-sh thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">/plugin marketplace </span><span class="token function" style="color:hsl(221, 87%, 60%)">add</span><span class="token plain"> risadams/ink-and-agency</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">/plugin </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> ink-and-agency</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><em><strong>Quick start for Codex:</strong></em></p>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-sh code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-sh thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">codex plugin marketplace </span><span class="token function" style="color:hsl(221, 87%, 60%)">add</span><span class="token plain"> risadams/ink-and-agency</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">codex plugin </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> ink-and-agency</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>That's the whole install. On Claude Code the skill names get namespaced at install time, so <code>/ink-and-agency:sprint-plan</code> won't collide with a <code>sprint-plan</code> skill in your own project. Most skills fire automatically when your request matches what they do; a handful are user-invoked only, and you reach those by typing the name.</p>
<p>If you can't remember what's in there, run <code>/ink-and-agency:which-skill</code>. It routes over the whole pack and hands back the exact invocation to use.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-skills-improve-themselves">The Skills Improve Themselves<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#the-skills-improve-themselves" class="hash-link" aria-label="Direct link to The Skills Improve Themselves" title="Direct link to The Skills Improve Themselves" translate="no">​</a></h2>
<p>This is the part I did not plan for at the start. Every skill now runs a short evaluation at the end of an invocation and writes a journal entry when the run produced real signal: a correction, a retry, something that misfired, something that clicked. Routine clean runs write nothing. On the next invocation, the skill reads its journal first.</p>
<p>The journals are plain markdown on your machine, one file per skill under <code>~/.ink-and-agency/learnings/</code>. Nothing leaves your disk. You can read them, edit them, or delete them.</p>
<p>When a learning suggests the skill itself should change rather than just your context, it proposes an edit against the source checkout if you have one, or files it as an idea with your consent. A skill never edits its own running copy in the plugin cache, because caches get wiped on every update.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="keeping-it-current">Keeping It Current<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#keeping-it-current" class="hash-link" aria-label="Direct link to Keeping It Current" title="Direct link to Keeping It Current" translate="no">​</a></h2>
<p>Releases follow semver and land as GitHub Releases, with the details in <code>CHANGELOG.md</code>. To pull a new version:</p>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-sh code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-sh thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">/plugin marketplace update ink-and-agency</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">/plugin update ink-and-agency</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Codex uses the same two commands with a <code>codex plugin</code> prefix. If you're hacking on the pack itself, run Claude with <code>--plugin-dir</code> pointed at your checkout and skip the marketplace entirely; it reads the working tree directly.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-real-value-in-day-to-day-work">The Real Value in Day-to-Day Work<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#the-real-value-in-day-to-day-work" class="hash-link" aria-label="Direct link to The Real Value in Day-to-Day Work" title="Direct link to The Real Value in Day-to-Day Work" translate="no">​</a></h2>
<p>A good skills pack isn't just a bag of clever prompts. It’s a reliability layer. Here is what changes after you start using one:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Better handoffs:</strong> Tasks are framed consistently, so the output quality doesn't feel random.</li>
<li><strong>Less context thrash:</strong> You stop re-explaining your process in every single chat thread.</li>
<li><strong>Faster execution:</strong> Known task types map directly to known skill patterns.</li>
<li><strong>Easier team adoption:</strong> Every skill has a stable surface area and clear purpose—it’s predictable.</li>
</ul>
<p>If you work in DevOps, delivery, or product engineering, this pattern hits home quickly. You're already used to turning repeated work into scripts, templates, and automation. Skills are just that move for prompt-driven work.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="a-few-quick-examples-of-use">A Few Quick Examples of Use<a href="https://risadams.com/blog/2026/05/18/introducing-ink-and-agency-an-ai-skill-pack-for-humans-and-claude#a-few-quick-examples-of-use" class="hash-link" aria-label="Direct link to A Few Quick Examples of Use" title="Direct link to A Few Quick Examples of Use" translate="no">​</a></h2>
<p>You don't have to write long instructions; you can just ask for the outcome:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><code>Use break-it-down on this email to explain what it is really saying.</code></li>
<li><code>/ink-and-agency:codebase-explain for this module.</code></li>
<li><code>Triage PROJ-1234.</code></li>
<li><code>Run a clarity-council on this design tradeoff.</code></li>
</ul>
<p>Skills also chain. Each one declares its workflow neighbors in frontmatter, so a full loop looks like <code>grill → work-plan → plan-to-spec → plan-to-tickets → implement</code>, with <code>tdd</code> and <code>code-review</code> running inside that last step. The named flows are documented in <code>skills/FLOWS.md</code> if you want to see how they fit together.</p>
<p>That's the whole point. You ask for outcomes, not rituals.</p>]]></content:encoded>
            <category>development</category>
            <category>personal</category>
            <category>ai</category>
            <category>skills</category>
            <category>claude</category>
            <category>prompt-engineering</category>
            <category>productivity</category>
        </item>
        <item>
            <title><![CDATA[Steel, Rivers, and Rewrites: What Pittsburgh Taught Me About Building Things That Last]]></title>
            <link>https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last</link>
            <guid>https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last</guid>
            <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I did not grow up in Pittsburgh.]]></description>
            <content:encoded><![CDATA[<p>I did not grow up in Pittsburgh.</p>
<p>I came here as an adult, with college debt, a meager job offer, and more than a little uncertainty. By the time I was learning to code in earnest and building a career, I was watching former industrial spaces turn into trails, riverfront paths, labs, and small tech offices. People pushing strollers where shift whistles used to run the clock is not my childhood memory. It is what I learned to notice after I moved here.</p>
<!-- -->
<p>Pittsburgh is never that neat. A high-tech marketing agency used to be a cigar factory with conference rooms named "Macanudo" and "Cohiba" as a nod to the building's past. A drive around Pittsburgh is like time-travel, and you can watch three versions of history from one traffic light.</p>
<p>That leaves a mark on how you think.</p>
<p>In software, we love to pretend our stack choice is destiny. We debate frameworks like we are choosing moral philosophy. We treat architecture diagrams like monuments.</p>
<p>Then three years pass.</p>
<p>The framework gets replaced. The core service becomes legacy. The "temporary" integration becomes mission critical. The clean system gets patched by people who were in middle school when it shipped.</p>
<p>Pittsburgh taught me to treat systems as living things, not statues. If a thing is useful today, great. If it should change tomorrow, change it.</p>
<blockquote>
<p>Do not confuse age with value, and do not confuse novelty with progress.</p>
</blockquote>
<p>Career plans, routines, habits, even identity can become stale if they stop serving the life you actually live.</p>
<p>Durability is not "never changing."</p>
<blockquote>
<p>Durability is the ability to keep adapting without losing your sense of self in the process.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-collapse-is-not-the-whole-story">The Collapse Is Not The Whole Story<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#the-collapse-is-not-the-whole-story" class="hash-link" aria-label="Direct link to The Collapse Is Not The Whole Story" title="Direct link to The Collapse Is Not The Whole Story" translate="no">​</a></h2>
<p>When people tell Pittsburgh stories from the outside, they often focus on one chapter: collapse.</p>
<p>I used to hear those same one-note versions before I moved here.</p>
<p>That chapter matters. A lot. Communities got hit hard. Families lost stability. Neighborhoods changed overnight.</p>
<p>But if that is the only tale you tell, you miss the point.</p>
<p>Pittsburgh is also a story about what people did next.</p>
<p>I've seen small businesses open where giant employers once stood. I've watched universities and hospitals become larger anchors in neighborhoods that had lost their economic center.</p>
<p>I have watched strong engineers rebuild after rough layoffs. I've also seen teams recover from bad launches and come back with tighter processes, better docs, and less ego.</p>
<p>The hard part is accepting that rebuilding is not a side quest. It is the work.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="reinvention-without-erasure">Reinvention Without Erasure<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#reinvention-without-erasure" class="hash-link" aria-label="Direct link to Reinvention Without Erasure" title="Direct link to Reinvention Without Erasure" translate="no">​</a></h2>
<p>The thing I respect most about this city is that it keeps changing while staying itself.</p>
<p>As someone who chose Pittsburgh after college instead of growing up in it, that balance is exactly what pulled me in.</p>
<p>Pittsburgh did not wake up one day and announce, "We are no longer Pittsburgh."
It held onto its accent, neighborhoods, weird sports obsessions, and blunt communication style. It also made room for different kinds of work.</p>
<p>Teams get into trouble when they confuse reinvention with amnesia.</p>
<p>"We are cloud-native now" can become an excuse to ignore lessons from on-prem reliability.</p>
<p>"We are moving fast now" can become an excuse to throw away test discipline.</p>
<p>"We are AI first now" can become an excuse to stop acting like humans around each other.</p>
<p>The question is this:</p>
<p>What are we changing, and what are we protecting?</p>
<p>For my work, I try to protect a short list:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>clear communication</li>
<li>useful documentation</li>
<li>steady, sustainable delivery</li>
<li>respect for people doing the work</li>
</ul>
<p>Everything else is fair game to improve.</p>
<p>Any family, team, or organization needs a small set of non-negotiables. Without that, change turns into drift.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-library-model-still-wins">The Library Model Still Wins<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#the-library-model-still-wins" class="hash-link" aria-label="Direct link to The Library Model Still Wins" title="Direct link to The Library Model Still Wins" translate="no">​</a></h2>
<p>One of my favorite Pittsburgh facts is that public access to knowledge is baked into the city's story. Carnegie libraries were not perfect institutions, but they represented a powerful idea: knowledge should be available to ordinary people, not locked behind status.</p>
<p>That idea maps straight into modern technical work.</p>
<p>A shared codebase is a library. An onboarding guide is a library. Good open source docs are libraries. So is a plain-language project brief.</p>
<p>When teams hoard context, velocity slows and stress climbs. When teams document what they learn, new people ramp faster and old problems stay solved.</p>
<p>Parents end up writing notes that become their family's operating manual. Small business owners write processes that keep quality steady when the founder gets busy. Volunteers see shared documentation keep programs alive when one person gets overwhelmed.</p>
<p>Knowledge sharing is not extra work. It is how work survives handoffs.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-pittsburgh-put-in-my-toolkit">What Pittsburgh Put In My Toolkit<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#what-pittsburgh-put-in-my-toolkit" class="hash-link" aria-label="Direct link to What Pittsburgh Put In My Toolkit" title="Direct link to What Pittsburgh Put In My Toolkit" translate="no">​</a></h2>
<p>There are three traits from this place that show up in how I work every day.</p>
<p>I did not inherit these by growing up here. I learned them by working here, raising a family here, and watching how people show up for each other over time.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-directness">1) Directness<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#1-directness" class="hash-link" aria-label="Direct link to 1) Directness" title="Direct link to 1) Directness" translate="no">​</a></h3>
<p>Pittsburgh directness gets mistaken for rough edges. I think it is usually care with less theater.</p>
<p>If a plan has holes, say it. If a timeline is unrealistic, say it. If a teammate needs help, offer it before the sprint slips.</p>
<p>Direct communication reduces drama. You spend less time decoding and more time solving.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-pragmatism-over-performance">2) Pragmatism Over Performance<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#2-pragmatism-over-performance" class="hash-link" aria-label="Direct link to 2) Pragmatism Over Performance" title="Direct link to 2) Pragmatism Over Performance" translate="no">​</a></h3>
<p>Around here, people tend to care whether something works. Fancy language is optional. Results are not.</p>
<p>In software, this means fewer architecture speeches and more operational readiness. In life, it means fewer performative goals and more repeatable habits.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-pride-in-craft">3) Pride In Craft<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#3-pride-in-craft" class="hash-link" aria-label="Direct link to 3) Pride In Craft" title="Direct link to 3) Pride In Craft" translate="no">​</a></h3>
<p>The old industrial roots still echo in how people talk about work. Not in a romanticized way. In a "do it right" way.</p>
<p>You can feel this in kitchens, machine shops, classrooms, neighborhood nonprofits, and yes, engineering teams.</p>
<p>Craft is not about perfection. It is about attention.</p>
<p>You leave the system cleaner than you found it. You write the extra paragraph in the docs. You review the edge case. You follow through.</p>
<p>That discipline compounds.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-i-want-to-build-that-lasts">What I Want To Build That Lasts<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#what-i-want-to-build-that-lasts" class="hash-link" aria-label="Direct link to What I Want To Build That Lasts" title="Direct link to What I Want To Build That Lasts" translate="no">​</a></h2>
<p>As I get older, my definition of "building" keeps widening.</p>
<p>I still care about shipping useful software. Helping teams deliver with less friction. Writing things that make complex topics feel usable.</p>
<p>But I also want to build a life with less brittleness.</p>
<p>A career that survives market shifts. Work that is useful to people I may never meet. A home culture where my kid sees curiosity, repair, and kindness as normal. A local community that gets stronger when people share what they know.</p>
<p>Choosing Pittsburgh gave me language for that.</p>
<p>Build with enough strength to carry weight. With enough flexibility to handle change. With enough humility to admit when a rebuild is overdue.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="a-practical-playbook-for-devs-and-everyone-else">A Practical Playbook (For Devs And Everyone Else)<a href="https://risadams.com/blog/2026/04/26/what-pittsburgh-taught-me-about-building-things-that-last#a-practical-playbook-for-devs-and-everyone-else" class="hash-link" aria-label="Direct link to A Practical Playbook (For Devs And Everyone Else)" title="Direct link to A Practical Playbook (For Devs And Everyone Else)" translate="no">​</a></h2>
<p>If you want to build things that last, here is the playbook I keep coming back to:</p>
<ol>
<li>
<p>Name your non-negotiables. What must stay true even when everything else changes?</p>
</li>
<li>
<p>Design for handoff. If only one person can run it, it is not durable yet.</p>
</li>
<li>
<p>Pay small maintenance costs early. Refactors, repairs, and relationship check-ins are cheaper than emergency rebuilds.</p>
</li>
<li>
<p>Keep your communication plain. Clarity outperforms polish under pressure.</p>
</li>
<li>
<p>Treat reinvention as a cycle, not a failure. You are not behind because you need a new version.</p>
</li>
<li>
<p>Invest in shared knowledge. Documentation, mentorship, and open notes beat heroics every time.</p>
</li>
<li>
<p>Build on purpose, not ego. The goal is useful, repeatable impact. Not applause.</p>
</li>
</ol>
<p>None of this is glamorous. Most durable things are not.</p>
<p>Durable things are maintained, revised, and cared for by people who take pride in doing steady work.</p>
<p>That might be Pittsburgh's best export.</p>
<p>Not steel. Not software.</p>
<p>A mindset: build what matters, keep what works, and rebuild without losing yourself. Stay human.</p>]]></content:encoded>
            <category>personal</category>
            <category>career</category>
            <category>developer-life</category>
            <category>culture</category>
            <category>technology</category>
            <category>pittsburgh</category>
            <category>craft</category>
            <category>reinvention</category>
            <category>durability</category>
            <category>knowledge-sharing</category>
            <category>pragmatism</category>
            <category>directness</category>
            <category>adaptability</category>
        </item>
        <item>
            <title><![CDATA[Working With Your Brain, Not Against It: ADHD and Software Development]]></title>
            <link>https://risadams.com/blog/2026/04/23/adhd-and-software-development</link>
            <guid>https://risadams.com/blog/2026/04/23/adhd-and-software-development</guid>
            <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The most productive three hours of my week look suspicious from the outside. No meetings, no Slack, headphones in, do not disturb. From the inside, it's the only time I'm actually working.]]></description>
            <content:encoded><![CDATA[<p>The most productive three hours of my week look suspicious from the outside. No meetings, no Slack, headphones in, do not disturb. From the inside, it's the only time I'm actually working.</p>
<p>I don't mean "actually working" as a knock on everything else. I mean it's the only time my brain is in the state where hard problems get solved, where the architecture makes sense, where I stop fighting friction and start making progress. Getting there, for an ADHD brain, is not as simple as closing your email client.</p>
<!-- -->
<p>This isn't a rehash of productivity tips. I've written about <a href="https://risadams.com/blog/2021/11/24/dealing-with-adhd-at-work/">managing ADHD at work before</a>, and that post covers the self-management angle. This one goes somewhere different: the environment. Most software teams are structured in ways that work against how ADHD brains operate. Understanding why is the first step to doing something about it.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="context-switching-costs-more-for-adhd-brains">Context switching costs more for ADHD brains<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#context-switching-costs-more-for-adhd-brains" class="hash-link" aria-label="Direct link to Context switching costs more for ADHD brains" title="Direct link to Context switching costs more for ADHD brains" translate="no">​</a></h2>
<p>Every developer knows context-switching is expensive. You lose your place, reload the mental model, spend time getting back up to speed. The research is solid enough that most engineers have heard the "20 minutes to get back into flow" number.</p>
<p>For ADHD brains, the recovery takes longer. Not because of some motivational deficit. The baseline state is noisier. A neurotypical developer who gets interrupted loses their place. An ADHD developer loses their place and has to spend additional effort quieting the mental static the interruption kicked up. The distraction doesn't just break flow. It triggers a cascade.</p>
<p>Slack pings, someone stopping by your desk, a quick call that runs long, a stand-up that drags — these are normal parts of team life. For a lot of developers they're just friction. For ADHD developers they can wipe out a morning.</p>
<p>The recovery cost is real and it's invisible. Nobody sees the thirty minutes after a ten-minute interruption where you're technically at your desk but your brain is still spinning down.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="hyperfocus-is-real-and-its-complicated">Hyperfocus is real, and it's complicated<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#hyperfocus-is-real-and-its-complicated" class="hash-link" aria-label="Direct link to Hyperfocus is real, and it's complicated" title="Direct link to Hyperfocus is real, and it's complicated" translate="no">​</a></h2>
<p>Here's the thing ADHD stereotypes miss: the attention regulation problem runs both ways. Holding attention on something uninteresting is hard. But the flip side is hyperfocus, and in a development context, it's a legitimate advantage.</p>
<p>When an ADHD developer hits a problem that captures their attention, the results can be remarkable. They'll trace a bug through eight layers of abstraction without getting bored. They'll spend six hours on an API design and come out the other side with something genuinely elegant. They'll read three years of git history to understand why a function does what it does, because the mystery has them hooked.</p>
<p>The catch is that you can't schedule it. Hyperfocus is not the same as voluntary concentration. You can build conditions that make it more likely, but you can't tell your brain to lock in at 9 AM on Tuesday for three hours of sprint work. If the work feels interesting, the environment is right, and the friction is low, it might happen. If any of those conditions are off, it might not.</p>
<p>This makes estimation hard. It makes commitment-based sprints complicated. ADHD developers look inconsistent on paper when what's actually happening is that the work varies in how well it matches the cognitive profile.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-the-standard-dev-environment-gets-wrong">What the standard dev environment gets wrong<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#what-the-standard-dev-environment-gets-wrong" class="hash-link" aria-label="Direct link to What the standard dev environment gets wrong" title="Direct link to What the standard dev environment gets wrong" translate="no">​</a></h2>
<p>Most software teams, even thoughtful ones, have built environments that create a lot of friction for ADHD brains specifically.</p>
<p>Meeting-heavy schedules break the day into chunks too small for deep work. When your morning looks like stand-up, then an hour, then backlog refinement, then lunch, then a one-on-one — you haven't given anyone a real block of time. For ADHD developers, that schedule might produce almost nothing technically useful, because none of those windows are long enough to get past startup overhead and into flow.</p>
<p>Constant availability expectations treat every notification as equally urgent. When Slack has the same interrupt priority as "production is on fire," you've created an environment where ADHD brains have to work harder to filter signal from noise. Filtering is already one of the harder things ADHD brains do.</p>
<p>Vague or oral requirements are a particular tax. "Just figure out what makes sense" or "we talked about this in the call last week" — when ADHD working memory is shaky, verbal handoffs disappear. Not from lack of effort or interest, but because the encoding didn't stick the way a written ticket would.</p>
<p>Open offices are, frankly, brutal. I've worked in them. The sensory load — conversations, movement, ambient noise — is hard to habituate to when your brain is already running loud. Noise-canceling headphones help. They don't fully solve it.</p>
<p>None of this is intentional. Teams aren't designing environments to disadvantage ADHD developers. The accumulated defaults point in that direction, though. If you're not asking "does this work for different cognitive profiles?" the answer is probably no.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-actually-helps">What actually helps<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#what-actually-helps" class="hash-link" aria-label="Direct link to What actually helps" title="Direct link to What actually helps" translate="no">​</a></h2>
<p>A few things reliably make a difference. Some are individual habits. Some require team-level change.</p>
<p>Protected deep work windows are the single biggest lever. Two or three hours with no meetings and no expected Slack response, where you can actually get into something hard. The rest of the team doesn't lose much. Everyone gains a lot.</p>
<p>Async-first communication reduces the ambient interrupt load. When the expectation is "respond when you're at a good stopping point" rather than "respond now," ADHD developers can work in longer stretches. This isn't about avoiding communication. It's about batching it to points in the day when the context switch is less costly.</p>
<p>Written requirements with specific acceptance criteria are worth the investment beyond the usual reasons. When the definition of done is concrete and written, an ADHD developer can work independently without holding ambiguous verbal context in working memory. "Build the thing, here's what done looks like" is a better task shape than "use your judgment."</p>
<p>Body doubling is underrated. Working in the same space as other people engaged in focused work helps a lot of ADHD brains stay on task. Co-working sessions, focus rooms, even shared silent video calls — these are weird to explain but they genuinely work.</p>
<p>Task chunking that matches interest matters more than it sounds. Breaking "implement the notification system" into small, specific, independently interesting problems gives an ADHD brain more entry points into flow. "Write the webhook handler" is a better task than "work on notifications."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-scrum-master-lens">The Scrum Master lens<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#the-scrum-master-lens" class="hash-link" aria-label="Direct link to The Scrum Master lens" title="Direct link to The Scrum Master lens" translate="no">​</a></h2>
<p>I've run a lot of sprints, and I've watched patterns that didn't make sense until I started thinking about neurodivergence explicitly.</p>
<p>The developer who commits in planning and delivers inconsistently — sometimes ahead of schedule, sometimes not finishing at all — might not have a motivation problem. They might have an ADHD brain that needs certain conditions to produce, and those conditions aren't always predictable.</p>
<p>The developer who dominates retrospectives but goes quiet in sprint reviews might be better at free-form discussion than structured presentation. The developer who's brilliant in a spike investigation but slow on routine ticket work might be following their hyperfocus rather than the backlog.</p>
<p>None of these are problems to fix in the developer. They're signals that the team structure might need to flex.</p>
<p>A few adjustments that help as a Scrum Master:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Pair ADHD developers who struggle with routine tasks with ones who specifically want to do that work. Some people have ADHD and like routine. Executive function differences don't all look the same.</li>
<li>Keep stand-ups short and structured. The roaming discussion format invites tangents that derail ADHD brains.</li>
<li>Use written sprint summaries and decisions, not just verbal recaps.</li>
<li>Check in privately before assuming a quiet developer has no blockers. "I'm fine" in a stand-up and "I'm stuck in an unproductive loop and don't know how to name it" can look identical from the outside.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-conversation-you-might-need-to-have">The conversation you might need to have<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#the-conversation-you-might-need-to-have" class="hash-link" aria-label="Direct link to The conversation you might need to have" title="Direct link to The conversation you might need to have" translate="no">​</a></h2>
<p>Whether to disclose ADHD at work is genuinely personal. I'm not going to tell you what to do there. What I will say is that the cost-benefit is different in different environments. Think about it clearly rather than defaulting to either "keep it hidden forever" or "announce it immediately."</p>
<p>What often helps, regardless of disclosure: knowing what you need and asking for it in concrete terms. "I work best with two uninterrupted hours in the morning" is a reasonable request whether or not you frame it in terms of ADHD. "Can requirements be written out rather than just discussed in the call" is a reasonable ask regardless. You don't have to disclose anything to advocate for conditions that help you work well.</p>
<p>If you're in an environment where you trust your team and your manager, knowing can change things. The developer who looks like they don't care about deadlines looks very different when the team understands that interruptions cost them four times what they cost everyone else.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-burnout-pattern">The burnout pattern<a href="https://risadams.com/blog/2026/04/23/adhd-and-software-development#the-burnout-pattern" class="hash-link" aria-label="Direct link to The burnout pattern" title="Direct link to The burnout pattern" translate="no">​</a></h2>
<p>This is the part I want to be direct about.</p>
<p>ADHD developers burn out in a specific way. It often looks like a motivation problem from the outside, and sometimes from the inside too. The tell is that it usually follows a long period of masking — compensating for ADHD friction through extra effort, working later, pushing harder, doing the hard invisible work of managing your own brain all day on top of the actual job.</p>
<p>That's exhausting. You can run it for a while. Eventually you can't.</p>
<p>Burnout doesn't announce itself cleanly. It shows up as suddenly not being able to start tasks you used to handle easily. Hyperfocus disappears. The coping systems that used to work go offline. From the outside it looks like a motivation problem. It's actually depletion.</p>
<p>If you're there, pushing harder doesn't help. Usually it's the opposite: find the version of the work that asks less of the parts that are already running empty, and rebuild from there.</p>
<p>If you're a team lead and you see this in someone, approach it as a wellbeing conversation, not a performance conversation. The underlying issue is rarely what it looks like.</p>
<hr>
<p>The standard developer productivity advice assumes a neurotypical baseline. Some of it works for everyone. Some of it adds friction for ADHD brains in ways you don't notice until you're looking for them. The fix isn't to work harder at the standard approach. Understand the cognitive profile. Build around that.</p>]]></content:encoded>
            <category>adhd</category>
            <category>mental-health</category>
            <category>neurodivergent</category>
            <category>productivity</category>
            <category>developer-experience</category>
            <category>focus</category>
            <category>team-dynamics</category>
        </item>
        <item>
            <title><![CDATA[You knew the answer and you didn't say it]]></title>
            <link>https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions</link>
            <guid>https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions</guid>
            <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I was in an architecture review a few years back. Fifteen people on the call, half of them senior engineers. Someone proposed a caching strategy that I knew would fall apart under concurrent writes. I'd hit that exact failure mode six months earlier on a different project. I had the scars and the postmortem to prove it.]]></description>
            <content:encoded><![CDATA[<p>I was in an architecture review a few years back. Fifteen people on the call, half of them senior engineers. Someone proposed a caching strategy that I <em>knew</em> would fall apart under concurrent writes. I'd hit that exact failure mode six months earlier on a different project. I had the scars and the postmortem to prove it.</p>
<p>I didn't say anything.</p>
<p>I sat there, muted, composing and deleting the same sentence in the chat three times. Someone else eventually raised the issue twenty minutes later, after the team had already committed to the direction. The rework cost us a sprint. And I spent that whole sprint thinking: <em>Why didn't I just say something?</em></p>
<p>If you've been that person, sitting on the right answer, the useful question, the experience that could save your team time, this one's for you.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="technical-discussions-are-a-different-kind-of-hard">Technical discussions are a different kind of hard<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#technical-discussions-are-a-different-kind-of-hard" class="hash-link" aria-label="Direct link to Technical discussions are a different kind of hard" title="Direct link to Technical discussions are a different kind of hard" translate="no">​</a></h2>
<p>Most advice about speaking up in meetings treats all meetings the same. But technical discussions have a specific flavor of difficulty that generic confidence advice doesn't touch.</p>
<p>The knowledge density alone is brutal. In a thirty-minute architecture review, you might context-switch between database design, API contracts, deployment strategy, and performance profiling. You might be the smartest person in the room; most of the time you're not. Just keeping up requires active concentration. Adding your own thoughts on top of that? Good luck.</p>
<p>Then there's the precision thing. In a product meeting, you can be directionally right and still be valuable. In a technical discussion, being wrong about a specific detail (misremembering an API signature, confusing two similar patterns, getting a trivial detail wrong) feels publicly humiliating. Someone will correct you. Your brain files that under "reasons to never speak again."</p>
<p>And technology moves fast enough that nobody can know everything, but a lot of team cultures pretend otherwise. If you're senior, you should have answers. Asking questions signals weakness. I've been on teams where that was the unspoken rule, and it's poison.</p>
<p>None of it is true. But it <em>feels</em> true when you're the one deciding whether to unmute.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-real-cost-of-staying-quiet">The real cost of staying quiet<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#the-real-cost-of-staying-quiet" class="hash-link" aria-label="Direct link to The real cost of staying quiet" title="Direct link to The real cost of staying quiet" translate="no">​</a></h2>
<p>Here's what I've noticed as a scrum master and as a developer: the quietest person in a technical discussion often has the most relevant experience for the problem at hand. Not always. But often enough that it's a pattern I watch for.</p>
<p>When you hold back, the team loses your perspective. I don't mean that in a motivational poster way. I mean the specific edge case nobody considers because you didn't mention it. The integration issue that surfaces in week three instead of week one. The architectural decision that gets made without the one person who'd actually built something similar.</p>
<p>The personal cost is worse, though. Every time you stay quiet when you had something to contribute, you're training yourself to believe your input doesn't matter. That training sticks. "I'm not the kind of person who speaks up in those meetings" starts as a description and becomes a rule you follow without questioning it.</p>
<p>I've watched talented developers plateau for years because of this. Their code is clean, their reviews are thorough. But they're invisible in the rooms where decisions happen. And visibility, like it or not, is how careers move.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="you-dont-need-to-know-everything-to-say-something-useful">You don't need to know everything to say something useful<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#you-dont-need-to-know-everything-to-say-something-useful" class="hash-link" aria-label="Direct link to You don't need to know everything to say something useful" title="Direct link to You don't need to know everything to say something useful" translate="no">​</a></h2>
<p>The biggest confidence killer I see is the belief that you need complete knowledge before you open your mouth. That unless you're the foremost expert on the exact topic, your input is noise.</p>
<p>That's backwards.</p>
<p>Some of the most useful things said in technical discussions aren't answers at all. They're questions. "What happens if the cache misses during a deploy?" "How does this interact with the billing service?" You don't need to know the answer to ask the question. You just need to notice the gap.</p>
<p>I think of it as a ladder. You don't have to start at the top.</p>
<p><strong>Clarifying questions</strong> are basically zero-risk: "Can you walk me through how this handles the retry logic?" You're just asking for understanding. Nobody's going to judge that.</p>
<p><strong>Context questions</strong> connect dots: "How does this relate to the auth changes we shipped last month?" You're showing you're thinking about the system, not just the slide in front of you.</p>
<p><strong>Analytical questions</strong> push the design: "What if we get a spike in concurrent users during the migration window?" That's stress-testing the proposal, and it's where a lot of the real value lives.</p>
<p><strong>Solution questions</strong> offer direction: "Could we use a write-through cache here instead of write-behind?" This is where your experience shows up.</p>
<p>Most meetings, I don't get past the second rung. That's fine. A good clarifying question is often the most useful thing anyone says in the room.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="prepare-like-it-matters-because-it-does">Prepare like it matters (because it does)<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#prepare-like-it-matters-because-it-does" class="hash-link" aria-label="Direct link to Prepare like it matters (because it does)" title="Direct link to Prepare like it matters (because it does)" translate="no">​</a></h2>
<p>I don't wing it well in technical discussions. Some people can improvise brilliantly in a design review. I'm not one of them. What I can do is prepare.</p>
<p>Before a meeting that matters, I spend ten minutes on two things:</p>
<p><strong>Where does my experience overlap?</strong> I scan the agenda (your meeting did come with one, right?) or the design doc and look for connections. Maybe I've built something similar, maybe I've seen a related failure, maybe I have context from a different part of the system. I write down a couple of specific things I could contribute.</p>
<p><strong>What's one thing I'll say?</strong> This is the trick that actually changed things for me. I commit to saying one specific thing. Not "I'll try to participate more." One concrete question or observation. Pre-loaded, so I'm not trying to compose something useful under pressure. Sometimes I don't even say the thing I planned, or someone else says it first. But just having that one thing in my back pocket gives me a foothold to get into the conversation.</p>
<p>Ten minutes of prep. That's it. The difference in how I show up is massive.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="being-wrong-is-cheaper-than-being-silent">Being wrong is cheaper than being silent<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#being-wrong-is-cheaper-than-being-silent" class="hash-link" aria-label="Direct link to Being wrong is cheaper than being silent" title="Direct link to Being wrong is cheaper than being silent" translate="no">​</a></h2>
<p>I got corrected in a design review once about how connection pooling worked in a specific database driver. I was wrong. I'd confused it with a different driver's behavior. Someone politely pointed it out, I said "ah, you're right, I was thinking of how it works in SQL Server, not Postgres," and we moved on.</p>
<p>Total elapsed time: maybe fifteen seconds.</p>
<p>The emotional weight I gave that moment afterward? Disproportionately huge. My brain replayed it for a week. But here's what actually happened in the room: nothing. Nobody cared. The conversation continued. I'd been wrong, I'd been corrected, and the collective understanding of the problem got clearer because of the exchange.</p>
<p>Being wrong in a technical discussion is almost never as bad as your brain tells you it will be. You know what's actually expensive? The bug that ships because nobody mentioned the edge case. The architecture rework because the person with relevant experience sat on their hands.</p>
<p>When I'm wrong, I try to keep it short:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>"Good catch. I was confusing that with X."</li>
<li>"Ah, that's not how I understood it. Thanks for the correction."</li>
<li>"I was wrong about that piece. What's the right approach here?"</li>
</ul>
<p>Acknowledge it, don't spiral, move on. The people I respect most in technical discussions aren't the ones who are always right. They're the ones who handle being wrong like it's just... a normal thing that happens.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-internal-narrator-is-lying-to-you">The internal narrator is lying to you<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#the-internal-narrator-is-lying-to-you" class="hash-link" aria-label="Direct link to The internal narrator is lying to you" title="Direct link to The internal narrator is lying to you" translate="no">​</a></h2>
<p>You know that voice. The one that says "everyone here knows more than you." The one that says "if you ask that question, they'll realize you don't belong." The one that turns a routine code review into an existential crisis.</p>
<p>That voice is imposter syndrome, and it's a liar.</p>
<p>Here's what I've learned to do with it: I don't try to silence it. I just refuse to let it make my decisions.</p>
<p>When the voice says "you don't know enough to comment on this," I try to replace it with something closer to the truth: "I have a different perspective that might be useful." When it says "everyone else seems so confident," I remind myself that confidence is a presentation layer, not a data layer. You have no idea what's happening behind someone else's composure. (That framing, by the way, came from a conversation with another engineer who admitted she felt the same way in every single meeting. <em>Every single one.</em> She was the person I thought had it all figured out.)</p>
<p>You can't think your way out of imposter syndrome. I've tried. But you can learn to act while it's talking. Feel uncertain, speak up anyway. That builds the evidence your brain needs to eventually quiet down.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="give-yourself-room-to-build-the-skill">Give yourself room to build the skill<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#give-yourself-room-to-build-the-skill" class="hash-link" aria-label="Direct link to Give yourself room to build the skill" title="Direct link to Give yourself room to build the skill" translate="no">​</a></h2>
<p>Nobody goes from silent in meetings to leading architecture reviews overnight. This is a skill. It develops like any other skill: through reps.</p>
<p>Start with low-stakes ones. A one-on-one with a teammate where you explain a technical decision. A Slack thread where you share something interesting you found. A code review comment suggesting an alternative. Then build from there. Ask a question in standup. Raise a concern in sprint planning. Each one adds evidence to the file your brain keeps: <em>I spoke up and the world didn't end.</em></p>
<p>I literally keep a wins file for this. It's a text doc. Nothing fancy. "Flagged the race condition in the checkout flow before it hit production." "Asked about the rollback strategy nobody was thinking about." "Suggested the caching approach we ended up using." On days when imposter syndrome is loud, I open it. Hard to argue with a list.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="build-the-room-not-just-your-voice">Build the room, not just your voice<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#build-the-room-not-just-your-voice" class="hash-link" aria-label="Direct link to Build the room, not just your voice" title="Direct link to Build the room, not just your voice" translate="no">​</a></h2>
<p>If you're a team lead, a scrum master, or anyone who shapes how meetings run: this isn't just an individual problem. It's a team design problem.</p>
<p>The quietest people on your team aren't quiet because they have nothing to say. They're quiet because the room doesn't feel safe, or the format doesn't create space, or the loudest voices use up all the air.</p>
<p>Some things I've actually seen work:</p>
<p><strong>Structured input rounds.</strong> Instead of "any questions?" (which rewards speed and extroversion), go around the room. "Let's hear from everyone. What's one concern or question you have about this approach?" This is the single most effective format change I've made as a facilitator.</p>
<p><strong>Async-first design reviews.</strong> Post the design doc 24 hours before the meeting. Let people comment asynchronously. Some of your best thinkers need time to process, and a synchronous-only format systematically excludes them.</p>
<p><strong>Normalize "I don't know."</strong> When leaders and senior engineers openly say "I'm not sure about this, let me think on it" or "that's outside my expertise, but here's what I'd check," it gives everyone else permission to be human.</p>
<p><strong>Follow up on silence.</strong> If someone's been quiet for three meetings straight, check in privately. Not "why aren't you talking more?" but "I'd love to hear your take on the caching discussion. Did anything come to mind that you didn't get to share?" The difference is between demanding performance and creating an invitation.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-version-of-you-that-speaks-up">The version of you that speaks up<a href="https://risadams.com/blog/2026/04/20/building-confidence-in-technical-discussions#the-version-of-you-that-speaks-up" class="hash-link" aria-label="Direct link to The version of you that speaks up" title="Direct link to The version of you that speaks up" translate="no">​</a></h2>
<p>There's a version of you that says the thing. That asks the question. That flags the issue before it turns into a two-week detour.</p>
<p>That version isn't someone else. It's you, with ten minutes of prep and the willingness to be wrong out loud.</p>
<p>You knew the answer. Next time, say it.</p>]]></content:encoded>
            <category>confidence</category>
            <category>communication</category>
            <category>imposter-syndrome</category>
            <category>career-development</category>
            <category>leadership</category>
        </item>
        <item>
            <title><![CDATA[Why Resident Alien gets imposter syndrome right (and what your team can do about it)]]></title>
            <link>https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome</link>
            <guid>https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome</guid>
            <pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[If you've watched Resident Alien, you know the core premise: Harry, an alien, crashes on Earth and spends the series pretending to be a human so he can complete his mission (and eventually repair his spaceship). He's brilliant at it. He studies human behavior obsessively. He nails the performance. He says and does all the right things.]]></description>
            <content:encoded><![CDATA[<p>If you've watched <em>Resident Alien</em>, you know the core premise: Harry, an alien, crashes on Earth and spends the series pretending to be a human so he can complete his mission (and eventually repair his spaceship). He's brilliant at it. He studies human behavior obsessively. He nails the performance. He says and does all the right things.</p>
<p>And he's absolutely miserable.</p>
<p>The alien's constant act of "being human" — perfectly mimicking behavior while feeling fundamentally separate from it — is actually a masterclass in imposter syndrome. And what's wild is how closely it mirrors something I see constantly in development teams: brilliant people who excel at their jobs while feeling like complete frauds.</p>
<p>The difference? The alien's situation is literal. He's actually not human. But the developers I know? They <em>are</em> good at what they do. Yet they're convinced they're faking it, waiting to be exposed, performing competence while feeling like imposters.</p>
<p><em>Resident Alien</em> shows us why this matters and what healthy teams do differently.</p>
<p><strong>Spoilers ahead.</strong></p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-performance-never-stops">The Performance Never Stops<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#the-performance-never-stops" class="hash-link" aria-label="Direct link to The Performance Never Stops" title="Direct link to The Performance Never Stops" translate="no">​</a></h2>
<blockquote>
<p>I'm perfect at being human. I eat the right foods. I wear the right clothes. I laugh at the correct times. — Harry  (the alien)</p>
</blockquote>
<p>The alien masters the mechanics of being human. He learns that humans eat, so he eats. He learns they sleep, so he sleeps. He learns they make eye contact and nod during conversations, so he does that too. From the outside, he's perfectly human.</p>
<p>From the inside? He's performing.</p>
<p>He's studying people constantly. Every interaction requires calculation. Every social moment is data to process. He's not being human; he's executing a flawless simulation of humanity.</p>
<p>This is what imposter syndrome feels like.</p>
<p>The senior developer who's been coding for ten years but still double-checks their syntax before committing. The architect who designs brilliant systems but thinks "someone more experienced would've done this differently." The tech lead who runs meetings perfectly but believes they're just playing the role of leader, that eventually people will realize they don't actually know anything.</p>
<p>Externally, they're crushing it. Internal monologue? <em>I'm faking this. The day they figure out I don't belong here is coming.</em></p>
<p>The alien studies human interaction the way imposter syndrome victims study "how to look competent." Both are performances. Both require constant vigilance. Both are exhausting.</p>
<p>And here's what breaks my heart about <em>Resident Alien</em>: the alien's performance is <em>so good</em> that humans don't realize it's a performance. Harry's colleagues think he's quirky but genuine. Harry's friend friendship with Asta seems authentic. Even when people like him, he feels like an infiltrator in his own relationships.</p>
<p>Your team probably has people like that. The person who gets consistently high performance reviews but experiences every compliment as "they just haven't figured me out yet." The developer everyone respects who still feels like a fraud when asked to mentor someone. The person doing everything right while convinced it's all smoke and mirrors.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="blending-in-is-not-the-same-as-belonging">Blending In Is Not the Same as Belonging<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#blending-in-is-not-the-same-as-belonging" class="hash-link" aria-label="Direct link to Blending In Is Not the Same as Belonging" title="Direct link to Blending In Is Not the Same as Belonging" translate="no">​</a></h2>
<blockquote>
<p>I don't have a family. I have a directive. — Harry</p>
</blockquote>
<p>The alien blends in flawlessly. He has a job, a house, colleagues who value him, a best friend. By every external measure, he belongs. He's integrated. He's part of the community.</p>
<p>But he doesn't actually <em>belong</em>. He can't. He's pretending to be something he's not, and the fear of exposure is always there.</p>
<p>This distinction — blending in versus belonging — is critical for team health, and most teams get it wrong.</p>
<p>Blending in is conformity. It's doing what's expected, following the rules, hitting the performance metrics. It's showing up at standups and saying the right things. It's matching the team's communication style. It's being professional. It's sustainable, mostly, but it's also lonely. Because you're performing, not being.</p>
<p>Belonging is different. It's being yourself, fully, while still being part of the group. It's saying "I don't know how to solve this" without fear. It's being weird and having the team appreciate your weirdness. It's being able to disagree with the direction and know you'll still be valued. It's psychological safety. It's authenticity.</p>
<p>The alien has blended in perfectly into small-town America. And he's miserable because he doesn't belong — can't belong — because he's not being honest about who he is.</p>
<p>Your team might be the same. You can have a team where everyone blends in beautifully. Where people come to meetings. Where they hit deadlines. Where they say the right things in retros. And underneath, you can have a team full of people performing competence while feeling like frauds.</p>
<p>The developer who won't ask questions because that signals weakness. The junior engineer who nods along to architecture decisions they don't fully understand because pushing back feels like admitting they don't belong. The person who's quietly struggling but appears fine because showing struggle reads as "not qualified for this role."</p>
<p>Blending in sustains itself through performance. Belonging sustains itself through authenticity.</p>
<p>Here's the thing though: the alien doesn't have a choice about his blending. He's literally not human. But your developers aren't aliens. They could belong. They're choosing to blend because your team culture doesn't feel safe for authenticity.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-loneliness-of-the-high-performer">The Loneliness of the High Performer<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#the-loneliness-of-the-high-performer" class="hash-link" aria-label="Direct link to The Loneliness of the High Performer" title="Direct link to The Loneliness of the High Performer" translate="no">​</a></h2>
<blockquote>
<p>Why do you care what these humans think? — The alien's species to Harry</p>
</blockquote>
<p>The alien is competent by any measure. He's solving problems. He's helping his town. He's succeeding at his mission. And he's profoundly alone because no one actually knows who he is.</p>
<p>This is the imposter syndrome experience in its purest form: achievement without belonging.</p>
<p>I've watched brilliant developers experience this. They ship features that become company staples. They solve architectural problems that save thousands in infrastructure costs. Their code is elegant. Their contributions are valued. And they experience each success as evidence that they're fooling people, not as evidence that they're actually good.</p>
<p>The loneliness comes from the gap between what they're accomplishing and what they believe about themselves. The achievement is real. The self-doubt is also real. And they're managing both in isolation because admitting the self-doubt would shatter the performance.</p>
<p>So they stay late to catch things other people miss. They triple-check their work. They volunteer for the hard projects because maybe <em>this</em> time they'll feel confident. They help others excel because at least then their value is clearly demonstrated (even if they still don't believe in their own competence).</p>
<p>This is unsustainable.</p>
<p>The alien's storyline shows this unsustainability. He can maintain the performance for a season or two. But eventually, the pressure of maintaining a false self 24/7 breaks him down. He gets sick. He questions his mission. He risks his cover to help his town because being useful is the only way he feels like he has value.</p>
<p>Your developer working 50-hour weeks while dealing with imposter syndrome isn't a high performer — they're burning out. They're trading long-term sustainability for short-term appearance management.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-imposter-syndrome-thrives-in-teams-without-belonging">Why Imposter Syndrome Thrives in Teams Without Belonging<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#why-imposter-syndrome-thrives-in-teams-without-belonging" class="hash-link" aria-label="Direct link to Why Imposter Syndrome Thrives in Teams Without Belonging" title="Direct link to Why Imposter Syndrome Thrives in Teams Without Belonging" translate="no">​</a></h2>
<blockquote>
<p>I need to keep my distance. It's safer this way. — Harry</p>
</blockquote>
<p>The alien maintains distance because connection means risk. If Asta knew who he really was, she might reject him. If his colleagues knew the truth, they'd see he doesn't belong. The distance protects him from that rejection.</p>
<p>This is also how imposter syndrome survivors operate within teams. They maintain distance by:</p>
<p><strong>Controlling the narrative.</strong> Only showing the polished version of their work, not the messy iteration process. Presenting decisions as certain when they're actually uncertain. Hiding the moments when they're figuring things out in real time.</p>
<p><strong>Avoiding vulnerability.</strong> Never admitting they're confused, overwhelmed, or out of their depth. Never asking for help unless absolutely necessary (and then making it seem like a minor thing). Never saying "I don't know" without immediately trying to figure it out before anyone notices.</p>
<p><strong>Proving their value constantly.</strong> Taking on extra work, solving problems beyond their scope, being the person everyone relies on. Because if they can be indispensable, maybe they'll feel like they belong.</p>
<p><strong>Staying away from situations where incompetence might be exposed.</strong> Not speaking up in meetings. Not volunteering for things that might reveal gaps. Not trying new things where they might fail in front of others. Safe is small.</p>
<p>The alien does all of this. He stays emotionally distant from his friends. He works overtime on his mission. He avoids situations where his true nature might be revealed. He performs competence with mathematical precision.</p>
<p>And none of it actually makes him feel like he belongs, because belonging requires being <em>known</em>.</p>
<p>Here's the kicker: this isn't a personality flaw. This is a rational response to an unsafe team. If your team culture is "we value competence above all else" or "mistakes are learning opportunities we never talk about after fixing them" or "if you can't figure something out quickly, maybe this role isn't for you," then yes, distance is the smart strategy.</p>
<p>The imposter is protecting themselves. And your team is reinforcing the imposter by not creating conditions where authenticity is safe.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-cost-of-performing-competence">The Cost of Performing Competence<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#the-cost-of-performing-competence" class="hash-link" aria-label="Direct link to The Cost of Performing Competence" title="Direct link to The Cost of Performing Competence" translate="no">​</a></h2>
<blockquote>
<p>Harry, you're the most human person I know. I just wish you'd let someone in. — Asta</p>
</blockquote>
<p>The alien's constant performance takes a toll. He experiences the town, Asta's friendship, and his mission through a filter of strategy and self-protection. He can't actually be <em>in</em> the moment because he's too busy managing the performance of being in the moment.</p>
<p>A developer performing competence experiences something similar. They can't be fully present in their work because they're managing the appearance of competence. They can't collaborate authentically because collaboration requires admitting uncertainty. They can't build genuine relationships with teammates because relationships require showing up as yourself.</p>
<p>The performance costs include:</p>
<p><strong>Slower problem-solving.</strong> If you can't admit you don't understand something, you spend longer trying to understand it alone. If you can't ask for help, you stumble longer before finding the solution. The team could solve it in an hour; you solve it in a day while maintaining the illusion of capability.</p>
<p><strong>Worse code.</strong> Code reviews become threatening because they might expose your work as less good than it should be. You're defensive instead of collaborative. You're protecting your reputation instead of optimizing for the right solution. You submit code that's "good enough to not be criticized" rather than "the best we can build together."</p>
<p><strong>Isolation.</strong> You can't bond with your team around shared struggle because you're pretending not to struggle. You can't celebrate solving hard problems together because you made sure no one knew you found it hard. You're technically part of the team while being emotionally separate.</p>
<p><strong>Burnout.</strong> Maintaining a false self is exhausting. It's an extra full-time job layered on top of your actual job. The alien doesn't sleep well. He's anxious. He's managing two versions of himself constantly. Your developer is doing the same thing and pretending it's fine.</p>
<p><strong>Limited growth.</strong> You can't improve in areas where you're performing competence because improvement requires admitting there's a gap. You can't learn from mistakes because mistakes reveal that you don't know something. You're stuck in a local maximum of "appears good" while actual growth stalls.</p>
<p>The performance is sustainable for a short sprint. For a career? For a team culture? It's corrosive.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="psychological-safety-as-permission-to-stop-performing">Psychological Safety as Permission to Stop Performing<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#psychological-safety-as-permission-to-stop-performing" class="hash-link" aria-label="Direct link to Psychological Safety as Permission to Stop Performing" title="Direct link to Psychological Safety as Permission to Stop Performing" translate="no">​</a></h2>
<blockquote>
<p>You know what the thing about humans is? They're surprisingly understanding. — Asta to Harry</p>
</blockquote>
<p>The turning point in <em>Resident Alien</em> comes when Harry risks showing his actual self to Asta. Not fully — he can't reveal he's an alien, the stakes are too high. But he drops the performance enough to be authentic about his loneliness, his alienation, his fear of not belonging.</p>
<p>And Asta's response? She appreciates him more. The parts of him that seem most alien — his honesty about struggle, his intensity, his weird perspective on human behavior — are the parts she actually values.</p>
<p>This is what psychological safety does. It creates permission to stop performing.</p>
<p>Psychological safety is the understanding that you can be yourself without risking your place on the team. You can say "I don't know how to do this." You can admit you made a mistake. You can disagree with the direction. You can be struggling. You can be weird. And you'll still be valued.</p>
<p>When psychological safety exists:</p>
<p><strong>People ask questions instead of pretending.</strong> The junior developer asks what a decorator does instead of spending an hour in the documentation. The senior person says "I've never used this library before, let's figure it out together" instead of Googling alone at midnight. The whole team learns faster because knowledge is shared instead of hoarded out of fear.</p>
<p><strong>Mistakes become learning.</strong> Instead of "who screwed up this deployment," it's "what conditions allowed this bug to reach production?" Instead of blame, it's curiosity. Instead of hiding errors, people surface them quickly because they know the response will be supportive problem-solving.</p>
<p><strong>Collaboration is real.</strong> People actually talk about the hard parts of projects because they're not managing the performance of competence. Pair programming becomes a learning opportunity instead of a threat. Code reviews are about making the best solution, not protecting egos.</p>
<p><strong>People stay.</strong> Burnout decreases when you're not running a 24/7 performance. Retention improves because people want to work with teams where they can be themselves. The weird developer who's been job-hunting stays because finally there's a place where their weirdness is appreciated.</p>
<p><strong>Growth happens.</strong> You can take on challenges that might expose knowledge gaps because mistakes are expected, not shameful. You can try new technologies. You can lead projects in areas where you're not the expert. You can actually develop instead of just performing at your current level.</p>
<p>The irony is that psychological safety actually <em>increases</em> performance because people are freed up to think, learn, and collaborate instead of just manage appearances.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-role-of-belonging-in-fighting-imposter-syndrome">The Role of Belonging in Fighting Imposter Syndrome<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#the-role-of-belonging-in-fighting-imposter-syndrome" class="hash-link" aria-label="Direct link to The Role of Belonging in Fighting Imposter Syndrome" title="Direct link to The Role of Belonging in Fighting Imposter Syndrome" translate="no">​</a></h2>
<blockquote>
<p>I'm not just trying to fit in. I actually want to help. — Harry</p>
</blockquote>
<p>By the end of season one, the alien's relationship to the town shifts. He stops just performing competence and starts actually caring about these people. He's still pretending to be human, but the performance is grounded in genuine investment.</p>
<p>And his imposter syndrome gets slightly less intense because he's not just going through the motions — he's actually part of something.</p>
<p>This is where teams get it wrong. They think the solution to imposter syndrome is "just believe in yourself" or "recognize your accomplishments." Those help, but they miss the point.</p>
<p>The solution to imposter syndrome is belonging. It's being part of a group where you're actually known, actually valued for who you are (not just what you produce), and actually safe to be yourself.</p>
<p>Teams that have this don't have developers performing competence. They have developers being themselves, which happens to include competence as one attribute among many others.</p>
<p>How do you build this?</p>
<p><strong>Lead with authenticity.</strong> If you're a Scrum Master or tech lead, model vulnerability. Talk about what you don't know. Admit when you're uncertain. Show that growth is ongoing, not a fixed state you've already achieved. The alien eventually does this with Asta, and it changes their relationship.</p>
<p><strong>Make space for struggle.</strong> In retros, ask "what was hard?" instead of just "what went well/poorly." Normalize talking about confusion, overwhelm, and fear. When people hear that others are struggling, imposter syndrome gets quiet. When everyone's pretending everything's easy, imposter syndrome whispers "everyone but you has this figured out."</p>
<p><strong>Celebrate not just outcomes, but growth.</strong> "You shipped that feature" is good. "You shipped that feature after learning three new technologies and you asked for help when you needed it" is better. Recognize the work and the learning, not just the results.</p>
<p><strong>Make asking for help the norm.</strong> Pair programming, asking in channels, rubber-ducking with teammates — make it obvious that collaboration is how good work happens. The alien eventually does better work because Asta helps him, not because he solved everything alone.</p>
<p><strong>Protect people from the pressure to blend.</strong> When someone's being their authentic self and that's different from the team norm, that's good. The weird developer who solves problems in unconventional ways? Protect them. The person who works differently (different hours, different process, different style)? Make space for it. Different is usually where innovation happens.</p>
<p><strong>Address competence publicly, not privately.</strong> If someone's genuinely struggling with their job, that's a conversation. But the conversation is about capability building, not about confirming they don't belong. The alien doesn't belong because he's literally not human. Your developer belongs; they just need to learn something specific.</p>
<p><strong>Be explicit about what belonging means.</strong> The alien doesn't actually know if he'd be accepted for who he is because it's never tested. Your team members are probably in the same position. Be clear: "You belong here even if you don't know something. You belong here even if you fail. You belong here even if you're struggling. Belonging is unconditional; contribution is where we work on growth together."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="imposter-syndrome-is-a-signal-not-a-character-flaw">Imposter Syndrome Is a Signal, Not a Character Flaw<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#imposter-syndrome-is-a-signal-not-a-character-flaw" class="hash-link" aria-label="Direct link to Imposter Syndrome Is a Signal, Not a Character Flaw" title="Direct link to Imposter Syndrome Is a Signal, Not a Character Flaw" translate="no">​</a></h2>
<blockquote>
<p>Sometimes I think the hardest part of being human is just showing up. — Harry</p>
</blockquote>
<p>Here's something crucial: imposter syndrome isn't proof that you don't belong. Often, it's the opposite. It's the sign of someone thoughtful enough to recognize gaps between what they know and what they need to know. Someone careful enough to consider whether they're making the right decisions. Someone who cares about doing good work.</p>
<p>The alien's constant self-doubt comes from taking his mission seriously. He worries about doing it right. He questions whether his approach is optimal. He cares. That's why he suffers.</p>
<p>Similarly, your developer experiencing imposter syndrome is probably:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Detail-oriented enough to notice things others miss</li>
<li>Thoughtful enough to question their own decisions</li>
<li>Conscientious enough to care about quality</li>
<li>Growth-oriented enough to see how far they have to go</li>
</ul>
<p>These are exactly the traits you want on your team.</p>
<p>The problem isn't that imposter syndrome means they don't belong. The problem is that their team culture made them think they needed to hide these qualities behind a performance.</p>
<p>So if you're experiencing imposter syndrome, the issue isn't "you suck." It's probably "your team doesn't make space for authenticity" or "your previous team had a culture that required performing competence" or "you're measuring yourself against an impossible standard."</p>
<p>And if people on your team are experiencing it, it's probably "you've built a culture where admitting struggle feels unsafe."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="building-teams-where-belonging-is-possible">Building Teams Where Belonging Is Possible<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#building-teams-where-belonging-is-possible" class="hash-link" aria-label="Direct link to Building Teams Where Belonging Is Possible" title="Direct link to Building Teams Where Belonging Is Possible" translate="no">​</a></h2>
<blockquote>
<p>The reason I trust you is you don't ask me to be anything other than what I am. — Asta's father to Harry</p>
</blockquote>
<p>The alien eventually finds versions of belonging with specific people — Asta, Ben, the bartender. Not perfect belonging (he still can't tell them the whole truth), but genuine connection built on something closer to authenticity.</p>
<p>Real belonging in a team looks like:</p>
<p><strong>You don't have to perform.</strong> You can show up as yourself. You can have a bad day. You can be confused. You can grow and change and learn. The team values you as a whole person, not just as a function you perform.</p>
<p><strong>Your mistakes are data, not indictments.</strong> When something goes wrong, the conversation is "what can we learn" not "whose fault." You can surface problems early because early surfacing is celebrated, not punished.</p>
<p><strong>You're known.</strong> People understand your strengths and your growth areas and they plan accordingly. They don't expect you to be good at everything. They value you for what you're actually good at and they help with the rest.</p>
<p><strong>Your weird is wanted.</strong> If you think differently, work differently, problem-solve differently — that's not something you hide. That's something the team leverages because diversity of thought produces better solutions.</p>
<p><strong>You can say no.</strong> When something's not your strength or you're stretched too thin, you can say so without fear. Your team trusts that you're being honest about your capacity because that's how you stay sustainable.</p>
<p><strong>You grow together.</strong> Learning is collaborative. You help others grow. Others help you. Growth isn't something you do alone in shame; it's something you do together.</p>
<p>The alien moves toward some of this with his people. Not fully, because the stakes of revealing his true self are too high. But enough that he feels less alone.</p>
<p>Your team can have full belonging. It requires intentional culture-building, but it's possible. And when it exists, imposter syndrome doesn't disappear, but it stops running your life.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-real-cost-of-belonging">The Real Cost of Belonging<a href="https://risadams.com/blog/2026/02/11/resident-alien-belonging-imposter-syndrome#the-real-cost-of-belonging" class="hash-link" aria-label="Direct link to The Real Cost of Belonging" title="Direct link to The Real Cost of Belonging" translate="no">​</a></h2>
<p>There's one more thing <em>Resident Alien</em> gets right: belonging requires risk.</p>
<p>The alien risks everything every time he lets someone get close. He risks exposure. He risks rejection. He risks someone realizing he's not actually human and destroying the relationships he's built.</p>
<p>Belonging requires vulnerability. It requires showing up as yourself and trusting that you'll be accepted.</p>
<p>That's scary. It's easier to perform competence because performance is controllable. Authenticity? You can't control how people respond to the real you.</p>
<p>So here's my ask: if you're a leader (Scrum Master, tech lead, manager, architect), create the conditions where that risk is safe. Make it clear that authenticity is safer than performance. Make it obvious that struggle is expected. Make it impossible for your team to feel like they need to hide.</p>
<p>And if you're experiencing imposter syndrome, recognize it might be a signal that you're in a team culture where blending in is required. Consider whether you actually don't belong or whether your team just doesn't make space for belonging.</p>
<p>The alien in <em>Resident Alien</em> is doing everything right and still feels like a fraud because he can't be honest about who he is. Your team might have people like that. Good people. Capable people. Just performing instead of being.</p>
<p>You can change that. It starts with creating psychological safety. It continues with actually valuing authenticity. It compounds when people see that being yourself is safer than being perfect.</p>
<p>Belonging isn't a luxury. It's not something you get after you've proven yourself. It's the foundation that lets people actually be themselves, which is when they do their best work.</p>
<p>The alien gets that by season two. Maybe it's time your team did too.</p>
<hr>
<p>If you're struggling with imposter syndrome, please know: it's not proof that you don't belong. It's often proof that you care about doing good work and you're in an environment that makes it unsafe to be honest about the gaps. That's a team problem, not a you problem.</p>
<p>Now if you'll excuse me, I need to check in with my team and make sure they know they belong, struggles and all.</p>]]></content:encoded>
            <category>imposter-syndrome</category>
            <category>belonging</category>
            <category>psychological-safety</category>
            <category>team-culture</category>
            <category>authenticity</category>
        </item>
        <item>
            <title><![CDATA[What Yellowjackets taught me about development teams (and why you should never work in survival mode)]]></title>
            <link>https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams</link>
            <guid>https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams</guid>
            <pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[After writing about what Ted Lasso taught me about being a Scrum Master, someone asked if I had any other TV shows that shaped my thinking on teams. I hesitated before answering "Yellowjackets," because unlike Ted's relentlessly optimistic football club, Yellowjackets is about a high school soccer team that crashes in the Canadian wilderness and descends into Lord of the Flies-style chaos. But here's the thing: I've seen more development teams operating like the Yellowjackets survivors than I'd like to admit. And the show's unflinching look at what happens when teams break down under pressure offers lessons that Ted Lasso's feel-good narrative can't.]]></description>
            <content:encoded><![CDATA[<p>After writing about what Ted Lasso taught me about being a Scrum Master, someone asked if I had any other TV shows that shaped my thinking on teams. I hesitated before answering "Yellowjackets," because unlike Ted's relentlessly optimistic football club, Yellowjackets is about a high school soccer team that crashes in the Canadian wilderness and descends into Lord of the Flies-style chaos. But here's the thing: I've seen more development teams operating like the Yellowjackets survivors than I'd like to admit. And the show's unflinching look at what happens when teams break down under pressure offers lessons that Ted Lasso's feel-good narrative can't.</p>
<p>So yes, we're going from biscuits and believe signs to cannibalism and cult behavior. Welcome to the darker side of team dynamics.</p>
<p><strong>Massive spoilers ahead for Yellowjackets seasons one and two.</strong></p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-leadership-vacuums-turn-toxic">When Leadership Vacuums Turn Toxic<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#when-leadership-vacuums-turn-toxic" class="hash-link" aria-label="Direct link to When Leadership Vacuums Turn Toxic" title="Direct link to When Leadership Vacuums Turn Toxic" translate="no">​</a></h2>
<blockquote>
<p>We're all going to die out here. — Jackie Taylor</p>
</blockquote>
<p>In the immediate aftermath of the crash, there's no clear leader. Team captain Jackie tries to maintain her social hierarchy from high school, but survival doesn't care about who was popular. Taissa attempts pragmatic leadership. Shauna quietly holds things together. Misty... well, Misty does Misty things. And into this vacuum steps something far more dangerous: desperation.</p>
<p>I've watched this exact pattern play out on development teams. The official Scrum Master leaves. The tech lead burns out. Product ownership becomes unclear. And suddenly, whoever speaks loudest or acts most certain fills the void, regardless of whether they should.</p>
<p>The Yellowjackets don't deliberately choose bad leadership — they drift into it because no one establishes clear roles and responsibilities when things get chaotic. By the time Lottie's mysticism takes hold, the team is so desperate for structure that they'll accept any framework, even one based on wilderness prophesies and ritual sacrifice.</p>
<p>Your team in crisis needs explicit leadership structure, not emergent chaos. When a project is on fire, that's exactly when you need to clarify who's making which decisions, not assume everyone knows. The absence of intentional leadership doesn't create democracy — it creates power struggles.</p>
<p>Jackie's failure as captain is instructive. She has the title but no actual authority because she can't adapt to new circumstances. The rules that made her captain on the field mean nothing in the wilderness. Similarly, that senior developer who's been with the company for ten years doesn't automatically know how to lead a cloud migration just because they have seniority.</p>
<p>Leadership isn't about titles. It's about who the team trusts to make good decisions in the current context. And when that context changes radically, leadership might need to change too.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="secrets-and-information-hoarding-are-poison">Secrets and Information Hoarding Are Poison<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#secrets-and-information-hoarding-are-poison" class="hash-link" aria-label="Direct link to Secrets and Information Hoarding Are Poison" title="Direct link to Secrets and Information Hoarding Are Poison" translate="no">​</a></h2>
<blockquote>
<p>We're all in this together, right? — Shauna Shipman (while hiding multiple secrets)</p>
</blockquote>
<p>Nearly every character in Yellowjackets is hiding something. Shauna's pregnant and having an affair with Jackie's boyfriend. Taissa has dissociative episodes. Misty destroyed the emergency transmitter to keep the group dependent on her. Natalie's struggling with the fact that she shot someone. The secrets compound until trust becomes impossible.</p>
<p>In the present-day timeline, these secrets have metastasized into blackmail, manipulation, and murder. The survivors can't work together effectively because they're all protecting their own versions of the truth.</p>
<p>Sound familiar? Not the murder part (hopefully), but the information hoarding?</p>
<p>That developer who won't document their code because job security. The architect who makes technical decisions in private conversations instead of open forums. The product owner who has side conversations with stakeholders and doesn't share the context with the team. The Scrum Master who knows organizational changes are coming but can't say anything yet.</p>
<p>Every secret creates asymmetric information. Every piece of hoarded knowledge creates dependency. Every private agenda undermines collective decision-making.</p>
<p>Misty's destruction of the transmitter is the perfect metaphor for this. She sabotages the team's best chance at rescue because being needed is more important to her than the team's wellbeing. I've seen developers do the equivalent — making systems unnecessarily complex so they're the only ones who can maintain them, or withholding tribal knowledge to stay indispensable.</p>
<p>Yellowjackets shows the endpoint of that trajectory. The secrets don't stay hidden. They explode at the worst possible moments. Relationships fracture. Trust evaporates. And the team's ability to function collapses under the weight of everything left unsaid.</p>
<p>Radical transparency isn't just a nice-to-have Agile principle. It's survival. The Yellowjackets could have made better decisions if they'd known all the constraints they were working under. Your team can't optimize for outcomes if they're missing critical information.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scapegoating-is-a-symptom-of-deeper-dysfunction">Scapegoating Is a Symptom of Deeper Dysfunction<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#scapegoating-is-a-symptom-of-deeper-dysfunction" class="hash-link" aria-label="Direct link to Scapegoating Is a Symptom of Deeper Dysfunction" title="Direct link to Scapegoating Is a Symptom of Deeper Dysfunction" translate="no">​</a></h2>
<blockquote>
<p>Pit girl, pit girl, we'll be the death of her. — The wilderness chant</p>
</blockquote>
<p>The most horrifying element of Yellowjackets is the ritual hunt and consumption of one of their own. But before you dismiss it as pure horror fiction, recognize what precedes it: the team has been looking for someone to blame for months. They need an outlet for their fear, frustration, and hunger. The hunt isn't random violence — it's the culmination of deteriorating group dynamics.</p>
<p>They've already been scapegoating each other in smaller ways. Blaming Jackie for not contributing enough. Viewing Misty with suspicion. Questioning Shauna's decisions. Creating in-groups and out-groups. The ritual just formalizes what's been building.</p>
<p>Development teams do this constantly, minus the cannibalism (again, hopefully). When a project fails, whose fault is it? QA didn't catch the bugs. Product didn't define requirements clearly. Engineering over-engineered the solution. DevOps didn't scale the infrastructure. The scapegoat rotates, but the pattern remains.</p>
<p>This is a sign that your team has lost psychological safety and shifted into blame mode. Healthy teams treat failures as system problems requiring collective solutions. Dysfunctional teams treat failures as individual moral failings requiring punishment.</p>
<p>The Yellowjackets create elaborate rituals around selecting their victim — drawing cards, making it seem random and therefore fair. Your retrospectives might do something similar when they focus on who messed up rather than what system allowed the mess-up to happen.</p>
<p>Real talk: if your retrospectives consistently identify individual people as problems rather than process gaps, you're not doing retrospectives. You're doing scapegoating with sticky notes.</p>
<p>The hunt in Yellowjackets is preceded by dehumanization. They stop seeing each other as individuals and start seeing each other as resources or threats. When your standup language shifts from "we need to solve this problem" to "they didn't deliver what they promised," you're on the same path. Different destination, same dynamic.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="survival-mode-destroys-long-term-thinking">Survival Mode Destroys Long-Term Thinking<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#survival-mode-destroys-long-term-thinking" class="hash-link" aria-label="Direct link to Survival Mode Destroys Long-Term Thinking" title="Direct link to Survival Mode Destroys Long-Term Thinking" translate="no">​</a></h2>
<blockquote>
<p>We're not going to make it through the winter. — Taissa Turner</p>
</blockquote>
<p>The Yellowjackets survivors are in constant crisis mode. There's always an immediate threat: hunger, cold, injuries, predators. Every decision is about surviving the next day, not building sustainable systems.</p>
<p>This is every death march project I've ever witnessed. This is "just ship it and we'll fix it later" technical debt. This is "skip the retrospective this sprint, we need the time for features." This is permanent crunch time, normalized.</p>
<p>The show demonstrates exactly where this leads. In survival mode, you make terrible long-term decisions. You eat the seed corn. You burn furniture for heat instead of building better insulation. You sacrifice future capability for present survival.</p>
<p>Taissa's election campaign storyline in the present day shows she never learned to operate differently. She's still in crisis mode, still making desperate short-term decisions that create bigger problems later. She's been in survival mode for 25 years and it's destroying her life.</p>
<p>I've been on teams like this. The "just until launch" sprint that became the permanent operating mode. The "temporary" workaround that became load-bearing architecture. The "quick hire" who became the senior developer you can't remove because they know all the tribal knowledge.</p>
<p>Yellowjackets shows that survival mode has an expiration date. Eventually, you run out of furniture to burn. Eventually, the shortcuts become the path. Eventually, the emergency becomes the culture.</p>
<p>Your job as a Scrum Master, tech lead, or engineering manager is to protect the team from permanent survival mode. Sometimes crisis happens — production is down, a competitor launched first, a key person quit. But crisis should be a state you move through, not a state you live in.</p>
<p>The Yellowjackets needed someone to say "we're going to die if we don't think past tomorrow." Your team needs someone to say "we're going to collapse if we don't invest in sustainability." Be that person. Even when (especially when) everyone else is in panic mode.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-psychological-safety-collapses">When Psychological Safety Collapses<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#when-psychological-safety-collapses" class="hash-link" aria-label="Direct link to When Psychological Safety Collapses" title="Direct link to When Psychological Safety Collapses" translate="no">​</a></h2>
<blockquote>
<p>I don't think we're on the same team anymore. — Natalie Scatorccio</p>
</blockquote>
<p>In the early episodes, the Yellowjackets still function as a team. They make collective decisions. They support each other. They maintain the social bonds from before the crash. But gradually, psychological safety erodes.</p>
<p>People stop voicing concerns because dissent is seen as disloyalty. Questioning Lottie's visions becomes taboo. Speaking up about hunger or fear marks you as weak. The team fractures into factions: believers and skeptics, hunters and gatherers, Lottie's followers and everyone else.</p>
<p>By season two, they're not a team anymore. They're a group of traumatized individuals trapped together, performing team-like behaviors while fundamentally operating from self-preservation.</p>
<p>The parallel to development teams is uncomfortable but real. I've seen teams where it became unsafe to say "I don't understand this architecture decision." Where asking for help was seen as incompetence. Where disagreeing with the tech lead meant being frozen out of code reviews.</p>
<p>Psychological safety doesn't just disappear overnight. It's eroded by small incidents: a sarcastic comment in standup, a dismissive response to a question, a blame-focused retrospective, a decision made without consultation. Each incident seems minor. Collectively, they poison the culture.</p>
<p>The Yellowjackets show what happens when you normalize small violations of safety. Jackie's death isn't a sudden act of violence — it's the culmination of increasing hostility, diminishing empathy, and eroding trust. She freezes to death outside because she can't be in the cabin with Shauna anymore. The team has become so toxic that literal death is preferable to being with them.</p>
<p>Your developers quitting without another job lined up? That's the equivalent warning sign. When people would rather face uncertainty than stay with your team, your culture has failed catastrophically.</p>
<p>Rebuilding psychological safety after it collapses is brutally hard. The adult Yellowjackets still can't trust each other 25 years later. Once you've normalized blame, secrets, and scapegoating, returning to genuine collaboration requires intentional, sustained effort that most teams never commit to.</p>
<p>Don't let it collapse in the first place. Protect psychological safety like your team's survival depends on it. Because it does.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-danger-of-magical-thinking-in-problem-solving">The Danger of Magical Thinking in Problem Solving<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#the-danger-of-magical-thinking-in-problem-solving" class="hash-link" aria-label="Direct link to The Danger of Magical Thinking in Problem Solving" title="Direct link to The Danger of Magical Thinking in Problem Solving" translate="no">​</a></h2>
<blockquote>
<p>The wilderness chose. — Lottie Matthews</p>
</blockquote>
<p>As the Yellowjackets' situation becomes more desperate, Lottie's mystical interpretations of events gain influence. The wilderness is a conscious entity. It provides and it takes away. It chooses who lives and dies. This magical thinking gives the team a framework for understanding their trauma, but it also absolves them of agency and responsibility.</p>
<p>They're not making terrible decisions — the wilderness is. They're not failing to plan effectively — they're following the wilderness's will. The framework becomes a substitute for actual problem-solving.</p>
<p>Tech teams do this with buzzwords and methodologies. "We're doing Agile now, so all our problems will be solved." "We'll just use microservices architecture." "AI will handle this." "We need to be more like [successful company]."</p>
<p>These aren't solutions — they're magical thinking. Rebranding your waterfall process as "Agile" doesn't make it Agile. Decomposing your monolith into microservices without addressing the underlying organizational dysfunction just gives you distributed dysfunction.</p>
<p>Lottie's visions are unfalsifiable. If something good happens, the wilderness provided. If something bad happens, the wilderness is testing them. This is how cargo cult Agile works too. Doing standups means you're Agile, even if nothing else changes. Having a Scrum Master means you're doing Scrum, even if you're still managing by Gantt chart.</p>
<p>The Yellowjackets needed practical wilderness survival skills: building shelter, preserving food, navigating terrain. Instead, they invested energy in interpreting signs and performing rituals. Your team needs practical engineering skills: writing tests, managing technical debt, documenting decisions. If you're spending more time on process theater than actual capability building, you're doing the wilderness chant.</p>
<p>Magical thinking is seductive because it's easier than actual problem-solving. It's easier to blame "the wilderness" than to acknowledge your team voted to eat seed stores instead of rationing properly. It's easier to say "we need to be more Agile" than to identify specific collaboration breakdowns and address them.</p>
<p>The wilderness didn't choose anything. The Yellowjackets made choices, and then invented a narrative to avoid accountability for those choices. Your team's failures aren't because you're "not Agile enough" or "need better tools." They're because of specific decisions and behaviors that you can identify and change.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="trust-is-easier-to-destroy-than-rebuild">Trust Is Easier to Destroy Than Rebuild<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#trust-is-easier-to-destroy-than-rebuild" class="hash-link" aria-label="Direct link to Trust Is Easier to Destroy Than Rebuild" title="Direct link to Trust Is Easier to Destroy Than Rebuild" translate="no">​</a></h2>
<blockquote>
<p>You're the only one who gets it. — Adult Shauna to adult Natalie</p>
</blockquote>
<p>In the present-day timeline, the adult survivors can barely function together. They're bound by trauma and shared secrets, but there's no trust. Every interaction is transactional. Every conversation could be a manipulation. They know each other intimately and trust each other not at all.</p>
<p>Misty and Natalie's relationship perfectly captures this. They survived the wilderness together. They went through unimaginable trauma as teammates. And 25 years later, Natalie still has to check whether Misty poisoned her drink. That's not paranoia — that's pattern recognition based on decades of evidence.</p>
<p>I've seen team dynamics like this, though less extreme. The developers who went through a brutal death march together and now can't stand being in the same room. The engineer and product manager who had one explosive conflict and have been professionally hostile ever since. The team members who collaborate on work but would never trust each other with anything personal.</p>
<p>Once trust breaks, it doesn't heal on its own. The Yellowjackets prove this. They've had 25 years to process, heal, and rebuild trust. They haven't. Because nobody did the work. Nobody acknowledged the harm. Nobody created space for genuine repair.</p>
<p>Your retrospective where everyone says "let's just move forward" without addressing the broken trust? That's not healing. That's sweeping trauma under the rug where it will fester.</p>
<p>The show suggests that maybe some trust can't be rebuilt. Maybe some teams are too broken. Maybe some relationships are permanently damaged by what happened under pressure. That's a sobering thought for anyone who believes every team can be saved with enough facilitation and sticky notes.</p>
<p>Sometimes the healthiest thing is to acknowledge that a team composition isn't working and make changes. Not as punishment, but as recognition that some dynamics can't be fixed by the same people who created them.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-aftermath-is-longer-than-the-crisis">The Aftermath Is Longer Than the Crisis<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#the-aftermath-is-longer-than-the-crisis" class="hash-link" aria-label="Direct link to The Aftermath Is Longer Than the Crisis" title="Direct link to The Aftermath Is Longer Than the Crisis" translate="no">​</a></h2>
<blockquote>
<p>We've been lying about it for 25 years. — Adult Taissa Turner</p>
</blockquote>
<p>Here's what Yellowjackets gets right that most team postmortems miss: the impact of trauma outlasts the crisis by decades.</p>
<p>The crash lasts a few seconds. The wilderness survival lasts 19 months. The psychological aftermath lasts the rest of their lives. Adult Shauna is still making terrible decisions based on survival instincts from 1996. Adult Taissa still can't let anyone see weakness. Adult Natalie still can't escape the guilt. Adult Misty still defines her worth by being needed.</p>
<p>Your team's death march ends. The product launches. The crisis resolves. And then what? The developers who burned out don't just bounce back. The relationships damaged by pressure don't automatically heal. The shortcuts taken under deadline don't magically refactor themselves.</p>
<p>I've watched talented people leave the industry entirely because one toxic project convinced them that all tech work is survival mode. I've seen teams that shipped something amazing and then imploded because they never processed the trauma of how they got there.</p>
<p>The Yellowjackets survivors need therapy. Serious, long-term, trauma-focused therapy. Most don't get it, or don't get enough of it, or don't get the right kind. They try to move on without processing. They try to pretend it didn't happen, or minimize it, or reframe it as "character building."</p>
<p>Your team needs the equivalent after a crisis. Real retrospectives that go beyond "what went wrong" to "how do we heal from this." Time to pay down technical debt. Space to rebuild relationships. Permission to acknowledge that what happened was traumatic and the team needs recovery time.</p>
<p>Companies want to declare victory and move immediately to the next thing. This is how you get the Yellowjackets pattern: traumatized people stumbling from crisis to crisis, never processing, never healing, just surviving.</p>
<p>Sustainable pace isn't just about hours worked per week. It's about having enough space between crises to actually recover. The Yellowjackets never got that space in the wilderness. They shouldn't have needed to create it in the aftermath, but they did.</p>
<p>Your team deserves recovery time built into the plan, not as a luxury but as a necessity.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-loyalty-becomes-complicity">When Loyalty Becomes Complicity<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#when-loyalty-becomes-complicity" class="hash-link" aria-label="Direct link to When Loyalty Becomes Complicity" title="Direct link to When Loyalty Becomes Complicity" translate="no">​</a></h2>
<blockquote>
<p>We didn't eat Jackie. We ate the wilderness. — Adult Shauna's rationalization</p>
</blockquote>
<p>The adult Yellowjackets don't turn each other in. They don't tell the truth. They maintain a collective lie about what happened in the wilderness. This loyalty to each other has kept them out of prison, but it's also kept them trapped in dysfunction.</p>
<p>Their silence is both protective and poisonous. They can't move forward because they can't acknowledge the truth. They can't build new, healthy relationships because they're still covering for each other's darkest moments.</p>
<p>I've seen team loyalty become complicity in smaller ways. The team that covers for the developer who doesn't pull their weight because "they're a good person going through stuff." The engineers who don't report the tech lead's intimidation because "that's just how they are." The Scrum Master who doesn't escalate the product owner's scope manipulation because "we don't want to cause problems."</p>
<p>Loyalty is important. But loyalty that requires you to compromise your principles or enable harmful behavior isn't loyalty — it's complicity.</p>
<p>The Yellowjackets think their silence protects each other. Really, it protects the secrets, and the secrets are destroying them. Adult Shauna's marriage is built on lies. Adult Taissa's career is built on hiding her true self. Adult Natalie can't maintain any relationship because she can't be honest about her past.</p>
<p>Your team's loyalty should never require dishonesty. If "being a team player" means staying quiet about problems, your team culture is toxic. If "having each other's backs" means covering up mistakes instead of learning from them, you're setting up failure.</p>
<p>True loyalty means being honest enough to name problems, even when it's uncomfortable. It means caring about each other's growth more than protecting each other's egos. It means wanting the team to be healthy more than wanting the team to look good.</p>
<p>The Yellowjackets needed someone brave enough to say "we have to tell the truth about what happened, for our own healing." Your team needs someone brave enough to say "we have to acknowledge this isn't working, for our own growth."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-the-wilderness-teaches-that-civilization-forgets">What the Wilderness Teaches That Civilization Forgets<a href="https://risadams.com/blog/2026/01/09/what-yellowjackets-taught-me-about-development-teams#what-the-wilderness-teaches-that-civilization-forgets" class="hash-link" aria-label="Direct link to What the Wilderness Teaches That Civilization Forgets" title="Direct link to What the Wilderness Teaches That Civilization Forgets" translate="no">​</a></h2>
<blockquote>
<p>Out there, we were free. — Adult Lottie Matthews</p>
</blockquote>
<p>Here's the disturbing part: some of the adult Yellowjackets miss the wilderness. For all its horror, it was simpler. The stakes were clear. The team had a shared purpose: survive. There was no ambiguity, no politics, no performance reviews. Just raw existence.</p>
<p>Adult Lottie creates a wellness cult that recreates wilderness dynamics. Adult Misty seeks out extreme situations where she can be needed. Adult Taissa runs for office because campaigning provides the same intensity. They're chasing the clarity of crisis because normal life feels meaningless by comparison.</p>
<p>I've seen engineers do this. The person who only comes alive during production incidents. The developer who needs the adrenaline of impossible deadlines. The tech lead who creates urgency where none exists because they're addicted to crisis mode.</p>
<p>This is the final, most insidious lesson from Yellowjackets: crisis can become comfortable. Survival mode can become identity. The team that bonds through trauma can struggle to bond through normal work.</p>
<p>Building something sustainable, with proper planning and healthy pace, can feel boring after you've experienced the intensity of a death march. Shipping features through systematic iteration can feel slow after you've experienced the rush of all-nighters and heroic debugging.</p>
<p>The wilderness isn't better. The crisis isn't preferable. But it's addictive.</p>
<p>Your job is to help your team find meaning and engagement in sustainable work. To make incremental progress feel satisfying. To celebrate small wins with the same energy as crisis resolution. To prove that healthy team dynamics can be as fulfilling as trauma bonding.</p>
<p>Otherwise, you'll have a team of people unconsciously sabotaging stability because chaos feels more real.</p>
<hr>
<p>Yellowjackets is horror, but it's also a mirror. The dynamics that lead to cannibalism in the wilderness exist in miniature in every team under pressure. Information hoarding. Scapegoating. Magical thinking. Loyalty becoming complicity. Survival mode becoming identity.</p>
<p>You won't end up hunting your coworkers in the Canadian wilderness. But you might end up on a team where psychological safety has collapsed, trust is gone, and everyone's just trying to survive until they can leave.</p>
<p>The good news: you're not actually stranded. You have options. You can address toxic dynamics before they metastasize. You can prioritize sustainability over survival mode. You can choose transparency over secrets. You can build trust instead of letting it erode.</p>
<p>The Yellowjackets couldn't leave the wilderness. You can leave (or fix) the toxic team.</p>
<p>Ted Lasso shows us what teams can be at their best. Yellowjackets shows us what teams become at their worst. Both lessons matter. Both are real.</p>
<p>Now if you'll excuse me, I need to go make sure my team's working agreements don't include any wilderness survival clauses. And maybe skip lunch.</p>]]></content:encoded>
            <category>agile</category>
            <category>team-dynamics</category>
            <category>leadership</category>
            <category>burnout</category>
            <category>psychological-safety</category>
        </item>
        <item>
            <title><![CDATA[What Ted Lasso taught me as a scrum master]]></title>
            <link>https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master</link>
            <guid>https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master</guid>
            <pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[It's no secret that I am not a sports person. I don't follow football, baseball, basketball, or any of the major leagues. My idea of athleticism is walking briskly to the coffee shop without getting winded. So when I first heard about Ted Lasso, I was skeptical. But, I gave it a shot. And when Ted Lasso first walked into that Richmond AFC locker room with his signature mustache and relentless optimism, I had no idea I was watching a masterclass in servant leadership. Sure, he knew nothing about football (nor did I), but he knew everything about people.]]></description>
            <content:encoded><![CDATA[<p>It's no secret that I am not a sports person. I don't follow football, baseball, basketball, or any of the major leagues. My idea of athleticism is walking briskly to the coffee shop without getting winded. So when I first heard about <em>Ted Lasso</em>, I was skeptical. But, I gave it a shot. And when Ted Lasso first walked into that Richmond AFC locker room with his signature mustache and relentless optimism, I had no idea I was watching a masterclass in servant leadership. Sure, he knew nothing about football (nor did I), but he knew everything about people.</p>
<p>I've just finished rewatching the series for the third time, and each viewing reveals another parallel between coaching a struggling team and facilitating a development team. Turns out, "Believe" isn't just a cute sign above a doorway — it's a whole leadership philosophy.</p>
<p>Beware: spoilers ahead for <em>Ted Lasso</em> seasons one through three.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="curiosity-over-competence">Curiosity Over Competence<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#curiosity-over-competence" class="hash-link" aria-label="Direct link to Curiosity Over Competence" title="Direct link to Curiosity Over Competence" translate="no">​</a></h2>
<blockquote>
<p>Be curious, not judgmental. —  Ted Lasso (via Walt Whitman)</p>
</blockquote>
<p>Ted drops this Walt Whitman quote during a pivotal dart game, and it might be the most Scrum Master thing ever said on television.</p>
<p>Ted arrives in England knowing absolutely nothing about soccer. He doesn't pretend otherwise. He doesn't bluff his way through tactical discussions or fake expertise he doesn't have. Instead, he asks questions. Lots of them. He's genuinely curious about the game, the culture, and most importantly, the people.</p>
<p>This resonates hard. How many times have you walked into a sprint planning session where the team is discussing technical architecture you don't fully understand? The temptation to nod along and pretend you get it is real. But Ted's approach is better; ask the "dumb" questions. "Help me understand why we're choosing this approach." "What problem does this solve for our users?" "Walk me through how this works."</p>
<p>Your job isn't to be the smartest person in the room about the technical work. It's to understand the people doing the work, remove their impediments, and help them work better together. Ted relies on assistants Beard and Nate on tactics. A good Scrum Master leans on their developers for technical guidance while focusing on team dynamics, process improvement, and organizational impediments.</p>
<p>The dart game scene demonstrates another crucial point — Ted had been observing and learning the whole time. He wasn't passively ignorant; he was actively curious. When Rupert assumes Ted knows nothing (classic judging, not curiosity), Ted's prepared. Similarly, even when you're not the technical expert, your observations about team patterns, communication breakdowns, or process inefficiencies are valuable precisely because you're paying attention to different things.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="psychological-safety-isnt-soft--its-essential">Psychological Safety Isn't Soft — It's Essential<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#psychological-safety-isnt-soft--its-essential" class="hash-link" aria-label="Direct link to Psychological Safety Isn't Soft — It's Essential" title="Direct link to Psychological Safety Isn't Soft — It's Essential" translate="no">​</a></h2>
<blockquote>
<p>I think that you might be so sure that you're one in a million, that sometimes you forget that out there, you're just one of eleven. — Ted to Jamie Tartt</p>
</blockquote>
<p>Ted builds psychological safety from day one. He learns everyone's names. He puts up that "Believe" sign. He brings biscuits to Rebecca. He creates an environment where it's safe to be yourself, make mistakes, and grow.</p>
<p>When Jamie Tartt is being a selfish glory-hound, Ted doesn't bench him or tear him down publicly. He has a private conversation. When Roy Kent is struggling with aging out of his career, Ted creates space for him to process those feelings. When Sam is dealing with personal and political issues, Ted listens without trying to fix everything immediately.</p>
<p>This is textbook Scrum Master behavior. Your daily standups should feel safe enough that people can say, "I'm blocked and I don't know how to solve this," without fear. Your retrospectives should allow genuine reflection, not just surface-level observations designed to avoid rocking the boat.</p>
<p>The episode where Ted has a panic attack during a match is powerful for multiple reasons. First, it shows that even Ted — the eternal optimist, the culture-builder, the guy who seems to have it all figured out — struggles. But here's what makes it really instructive: Ted initially resists therapy. Hard.</p>
<p>When Dr. Sharon Fieldstone arrives, Ted treats her with polite distance bordering on hostility. He makes jokes to deflect. He questions whether therapy is really necessary. This is toxic masculinity in its subtlest form — not aggressive or overt, but the quiet insistence that asking for help means you're not strong enough, that real leaders handle things on their own, that vulnerability is weakness dressed up as self-awareness.</p>
<p>Sound familiar? How many times have you seen talented developers burn out rather than admit they're overwhelmed? How often have you watched team members struggle in silence because asking for help feels like admitting failure? Ted's initial resistance to therapy mirrors the same pattern we see constantly in tech culture.</p>
<p>But Ted learns. Slowly, uncomfortably, he opens up to Dr. Sharon. He admits he's not okay. He does the work. And critically, he doesn't hide this journey from his team. When Nate later betrays him by leaking the panic attacks to the press, Ted doesn't spiral into shame or denial. He's already done the hard work of accepting his own humanity.</p>
<p>The team's response tells you everything about the culture Ted built. They rally around him. They already knew he was human — that's why they trusted him. His willingness to be vulnerable, to try something uncomfortable (therapy), to admit he doesn't have all the answers, actually strengthens his leadership.</p>
<p>This is the lesson: psychological safety starts with you. If you want your team to admit when they're blocked, you need to model asking for help. If you want them to try new approaches even when they're uncertain, you need to show them it's okay to be uncertain. Ted preaches curiosity and growth, but it's his willingness to actually be curious about his own struggles and grow from them that makes the difference.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-power-of-small-rituals">The Power of Small Rituals<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#the-power-of-small-rituals" class="hash-link" aria-label="Direct link to The Power of Small Rituals" title="Direct link to The Power of Small Rituals" translate="no">​</a></h2>
<blockquote>
<p>I do love a locker room. It smells like potential. — Ted Lasso</p>
</blockquote>
<p>Ted creates rituals everywhere. The biscuits for Rebecca. The team chant before matches. The movie nights. These aren't arbitrary team-building exercises — they're intentional culture-building moments.</p>
<p>Scrum is built on rituals: daily standups, sprint planning, retrospectives, reviews. But how many of us let these ceremonies become stale? How often does your standup feel like a status report to management instead of a genuine team sync?</p>
<p>Ted would never let that happen. Watch how he runs team meetings. There's always a purpose, always engagement, always something that brings the group together. When he has the team play "Total Football" without positions, it's not just a drill — it's a metaphor for collaboration and trust.</p>
<p>Your sprint ceremonies should feel meaningful. If your team is going through the motions, something's broken. Maybe your retrospectives need a format shake-up. Maybe your standups need to happen at a different time, or in a different way. Maybe you need to establish new rituals that actually resonate with your specific team culture.</p>
<p>The "Believe" sign works because Ted doesn't just hang it and forget it. He references it. He embodies it. He makes it mean something. Your team's working agreements shouldn't be a document that lives in Confluence gathering dust. They should be living principles that guide real decisions.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="coaching-the-individual-not-just-the-team">Coaching the Individual, Not Just the Team<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#coaching-the-individual-not-just-the-team" class="hash-link" aria-label="Direct link to Coaching the Individual, Not Just the Team" title="Direct link to Coaching the Individual, Not Just the Team" translate="no">​</a></h2>
<blockquote>
<p>All people are different people. — Ted Lasso</p>
</blockquote>
<p>Ted's greatest strength is seeing people as individuals. He doesn't have one coaching style he applies to everyone. His approach with Roy is different from his approach with Jamie, which is different from his approach with Sam, Isaac, or Dani Rojas.</p>
<p>Roy needs someone to give him permission to evolve beyond who he was. Jamie needs to learn he can be brilliant without being selfish. Sam needs space to find his voice on issues beyond football. Isaac needs confidence to step into leadership. Dani needs help processing trauma after his penalty kick injury.</p>
<p>Ted adjusts his coaching to each person's needs. He doesn't force Roy to be optimistic or Jamie to be humble through some one-size-fits-all leadership program. He meets each player where they are.</p>
<p>This is harder than it sounds in a Scrum context. You've got developers at different experience levels, with different communication styles, different career goals, and different challenges. The junior developer struggling with imposter syndrome needs different support than the senior developer dealing with burnout. The introverted engineer who does their best thinking alone needs different facilitation than the extrovert who thinks out loud in meetings.</p>
<p>Pay attention to the individuals. Not in a creepy surveillance way, but in a genuine "I see you as a person" way. Notice when someone's energy is off. Check in when someone's usually vocal but has gone quiet. Celebrate personal wins, not just sprint goals.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ego-is-the-enemy-of-progress">Ego Is the Enemy of Progress<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#ego-is-the-enemy-of-progress" class="hash-link" aria-label="Direct link to Ego Is the Enemy of Progress" title="Direct link to Ego Is the Enemy of Progress" translate="no">​</a></h2>
<blockquote>
<p>Taking on a challenge is a lot like riding a horse, isn't it? If you're comfortable while you're doing it, you're probably doing it wrong. — Ted Lasso</p>
</blockquote>
<p>Ted's ego never gets in the way of the team's success. When Beard has a better tactical idea, Ted listens. When Nate starts contributing strategy, Ted amplifies it and gives him credit. When Roy needs to take over as coach while Ted steps back, Ted doesn't cling to control.</p>
<p>Compare this to Rebecca's ex-husband Rupert, who needs to be the center of attention, or Jamie in season one, who plays for personal glory instead of team success. Their egos actively harm the people around them.</p>
<p>In Scrum Master terms: you're a servant leader, not a project manager. Your job is to make the team successful, not to be seen as the reason they're successful. If your team is self-organizing beautifully and you're barely needed in standups? That's a win, not a threat to your relevance.</p>
<p>I've seen Scrum Masters who need to be involved in every decision, who interrupt team problem-solving to insert their own solutions, who take credit for team successes. That's not servant leadership. That's ego.</p>
<p>Ted celebrates when Nathan's tactics work. He's genuinely thrilled when Roy becomes a better coach. He doesn't see their success as competition — he sees it as proof the culture is working. When your developers start facilitating their own technical discussions without needing you to moderate, that's not you becoming obsolete. That's you succeeding at building a self-organizing team.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="conflict-is-opportunity-in-disguise">Conflict Is Opportunity in Disguise<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#conflict-is-opportunity-in-disguise" class="hash-link" aria-label="Direct link to Conflict Is Opportunity in Disguise" title="Direct link to Conflict Is Opportunity in Disguise" translate="no">​</a></h2>
<blockquote>
<p>I shouldn't have done that. I'm sorry. — Roy Kent (after headbutting Jamie)</p>
</blockquote>
<p>Ted Lasso doesn't shy away from conflict — he walks directly into it with empathy and honesty. When Roy and Jamie have their explosive confrontation, Ted doesn't pretend it didn't happen or punish them into compliance. He creates space for resolution.</p>
<p>The episode where the team is "Anonymous Source" tattling to the press shows Ted at his best. Instead of going on a witch hunt, he addresses the root cause — lack of trust. He doesn't force fake harmony; he acknowledges the dysfunction and works through it.</p>
<p>In your retrospectives, are you avoiding the hard conversations? When there's tension between frontend and backend teams, or when someone's consistently missing commitments, or when architectural decisions are creating friction — do you facilitate those discussions or route around them?</p>
<p>Healthy conflict leads to better solutions. Ted knows this. When Roy and Jamie finally work through their issues, they both become better players and the team chemistry improves. When your team has genuine, respectful debates about technical approaches, that's not dysfunction — that's high-performing team behavior.</p>
<p>The key is creating the container where conflict can be productive. Ted does this through consistent culture-building. People trust that disagreement won't result in retaliation or exclusion. They know they can say, "I think this approach is wrong," without it becoming personal.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="patience-with-the-process">Patience With the Process<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#patience-with-the-process" class="hash-link" aria-label="Direct link to Patience With the Process" title="Direct link to Patience With the Process" translate="no">​</a></h2>
<blockquote>
<p>I believe in hope. I believe in belief. — Ted Lasso</p>
</blockquote>
<p>Ted gets relegated. He loses, badly, repeatedly. The press mocks him. The fans turn on him. Rebecca actively sabotages him (at first). And through it all, he maintains belief in the process and the people.</p>
<p>Season one ends with Richmond getting relegated to a lower league. Ted treats it as a learning opportunity, not a failure. Season two shows the patient work of rebuilding — not just winning, but building something sustainable.</p>
<p>This patience is critical for Scrum Masters. Your team isn't going to transform overnight. That first retrospective where you introduce new formats might feel awkward. The shift from doing agile to being agile takes time. Trust the process.</p>
<p>I've been on teams where leadership wanted immediate results from "implementing Scrum." They wanted velocity increases in the first sprint, seamless self-organization after one planning session, and flawless predictability right away. That's not how culture change works.</p>
<p>Ted would never expect Richmond to win the Premier League in their first season (though they make a good run at it in season three). He knows you build the culture, develop the players, refine the tactics, and trust that results follow. Similarly, you can't force team maturity. You create the conditions for growth and stay patient with the timeline.</p>
<p>When the team ties their first match after a long losing streak, Ted celebrates like they won the championship. Small wins matter. Sprint over sprint improvements matter. That retrospective where someone finally felt safe enough to raise a real issue? That's progress, even if the issue hasn't been solved yet.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="lead-with-kindness-not-niceness">Lead With Kindness, Not Niceness<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#lead-with-kindness-not-niceness" class="hash-link" aria-label="Direct link to Lead With Kindness, Not Niceness" title="Direct link to Lead With Kindness, Not Niceness" translate="no">​</a></h2>
<blockquote>
<p>Be a goldfish. — Ted Lasso</p>
</blockquote>
<p>There's a crucial distinction between Ted's kindness and simple niceness. He's not a pushover. He benches Jamie when Jamie won't play for the team. He lets Roy sit with his anger instead of forcing premature positivity. He fires Nate's replacement immediately when the guy shows his true colors.</p>
<p>Ted is kind, which means he does what's best for people even when it's uncomfortable. Nice people avoid conflict and difficult conversations. Kind people have those conversations because they care about growth.</p>
<p>When Nate betrays Ted and the team, Ted's response is heartbreaking but measured. He's hurt, but he still sees Nate as a person who's struggling, not as a villain. Later, when Nate wants to return, Ted doesn't make him grovel — but the reconciliation is earned, not automatic.</p>
<p>As a Scrum Master, you'll face situations where kindness means having hard conversations. That developer who dominates every meeting and talks over others? Kindness means private feedback, not letting it continue because confrontation feels mean. That product owner who keeps changing scope mid-sprint? Kindness to your team means enforcing boundaries.</p>
<p>"Be a goldfish" — Ted's advice to Sam about having a short memory after mistakes — isn't about ignoring problems. It's about not letting one mistake define you or derail progress. When your team misses a sprint commitment, you do a retrospective to understand why. But you don't carry that "failure" into the next sprint as baggage. You learn and move forward.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="trust-the-experts-around-you">Trust the Experts Around You<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#trust-the-experts-around-you" class="hash-link" aria-label="Direct link to Trust the Experts Around You" title="Direct link to Trust the Experts Around You" translate="no">​</a></h2>
<blockquote>
<p>I am a strong, independent woman — and I do not need you or anyone else fighting my battles for me. — Keeley Jones</p>
</blockquote>
<p>Ted surrounds himself with people who know more than he does and then — crucially — he listens to them. Beard knows tactics. Keeley knows PR and media. Rebecca knows business. Higgins knows organizational politics. Ted doesn't pretend to have all the answers. He builds a brain trust and trusts it.</p>
<p>When Ted needs help with his panic attacks, he goes to Sharon, the therapist. He doesn't try to power through alone. When Richmond needs better training methods, he brings in specialists. When the team needs tactical adjustments, he defers to Beard and Roy.</p>
<p>Your development team knows the code better than you do. Your product owner should know the market and users better than you do. Your stakeholders know the business context better than you do. Part of being an effective Scrum Master is orchestrating all that expertise, not trying to replace it.</p>
<p>I've made this mistake. Early in my Scrum Master journey, I thought I needed to have answers to everything. Someone asks about test coverage? I should know. Questions about deployment pipelines? Better have an opinion. Debates about architecture? Time to weigh in.</p>
<p>No. Ted's got it right. Ask the experts. Facilitate the conversation. Make sure all voices are heard. But don't pretend you're the source of all wisdom. The team is.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="make-the-tough-calls">Make the Tough Calls<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#make-the-tough-calls" class="hash-link" aria-label="Direct link to Make the Tough Calls" title="Direct link to Make the Tough Calls" translate="no">​</a></h2>
<blockquote>
<p>Fairytales do not start, nor do they end, in the dark forest. That’s something that only shows up smack dab in the middle of a story. But it will all work out. — Ted Lasso</p>
</blockquote>
<p>For all his optimism and kindness, Ted makes hard decisions when needed. He benches players who aren't performing. He has difficult conversations with Rebecca about her sabotage. He lets Roy Kent figure things out instead of rescuing him. He allows Jamie to leave when it's best for him and the team.</p>
<p>These aren't comfortable decisions. Ted doesn't enjoy conflict. But he doesn't avoid it when the team needs him to act.</p>
<p>As a Scrum Master, you'll face tough calls. Maybe someone isn't a good fit for the team and needs to move to a different project. Maybe a stakeholder relationship is toxic and you need to escalate. Maybe your sprint ceremonies have become so dysfunctional that you need to reset completely, which will be uncomfortable for everyone.</p>
<p>Ted's example shows you can make these decisions with empathy and still maintain relationships. When Jamie returns, Ted doesn't hold a grudge — the situation changed, Jamie grew, and now he fits. When Ted confronts Rebecca about trying to sabotage the team, he's honest but not cruel.</p>
<p>The comfortable path is rarely the right path when you're facilitating change. If every decision you make is easy and popular, you're probably not pushing hard enough on the real impediments.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="build-something-that-outlasts-you">Build Something That Outlasts You<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#build-something-that-outlasts-you" class="hash-link" aria-label="Direct link to Build Something That Outlasts You" title="Direct link to Build Something That Outlasts You" translate="no">​</a></h2>
<blockquote>
<p>Divorce is hard. It doesn't matter if you're the one who gets left, or the one who does the leaving. — Ted Lasso</p>
</blockquote>
<p>The final season shows Ted building something that can succeed without him. He develops Roy and Beard as coaches. He empowers the players to lead themselves. When Ted eventually returns to Kansas, Richmond doesn't collapse — because the culture he built wasn't dependent on him being there.</p>
<p>This is the ultimate goal of servant leadership. You're not building a team that needs you to function. You're building a team that's better because you were there, but can thrive when you're not.</p>
<p>In practical terms: are you the single point of failure for your team? If you took a three-week vacation, would everything fall apart? If you moved to a different project, would the team's Scrum practices regress immediately?</p>
<p>If yes, you've built dependency, not capability. Ted builds capability. He teaches people to coach themselves. He creates systems and culture that persist. The "Believe" sign stays up because the team believes it, not because Ted enforces it.</p>
<blockquote>
<p>A good mentor hopes you will move on. A great mentor knows you will - Leslie Higgans</p>
</blockquote>
<p>Work yourself out of a job. Not literally — though that might happen — but philosophically. Your success is measured by how little the team needs you to function day-to-day, not how indispensable you are.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-long-game-always-wins">The Long Game Always Wins<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#the-long-game-always-wins" class="hash-link" aria-label="Direct link to The Long Game Always Wins" title="Direct link to The Long Game Always Wins" translate="no">​</a></h2>
<blockquote>
<p>I haven't given up on us. I'm just waiting for us to be ready. — Mae (the pub owner)</p>
</blockquote>
<p>Ted plays the long game. He doesn't panic after losses. He doesn't make rash decisions under pressure. He trusts that consistent, values-driven leadership compounds over time.</p>
<p>The first season ends with relegation — arguably a disaster. But Ted sees it as the foundation for something better. Season two is about building that foundation properly. Season three shows the payoff. Richmond's success in the final season isn't luck or talent alone — it's the result of three years of culture-building, player development, and staying true to the process.</p>
<p>Sprint velocity matters less than sustainable pace. That feature you rushed out to hit an arbitrary deadline but created technical debt? That's short-term thinking. The refactoring effort that doesn't produce visible features but makes future development faster and more stable? That's long-term thinking.</p>
<p>Ted would rather have a cohesive team that improves steadily than a group of superstars who can't work together. He'd rather develop Dani Rojas and Sam Obisanya into better players than just buy expensive talent. He invests in people.</p>
<p>Your job is often to be the voice of sustainability when everyone else is optimizing for the current sprint. To protect team health when stakeholders want impossible commitments. To invest in practices that pay dividends later, even if they slow things down now.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="believe">Believe<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#believe" class="hash-link" aria-label="Direct link to Believe" title="Direct link to Believe" translate="no">​</a></h2>
<blockquote>
<p>Doing the right thing is never the wrong thing. — Ted Lasso</p>
</blockquote>
<p>"Believe" isn't just a sign. It's not toxic positivity or naive optimism. In Ted's hands, it's a philosophical stance: believe in people, believe in the process, believe that things can get better even when they're bad.</p>
<p>When everything's falling apart — and in both Ted Lasso and software development, everything falls apart regularly — belief is what keeps you moving forward. Not belief that everything will magically work out, but belief that the work you're doing matters and that incremental progress compounds.</p>
<p>Ted believes Rebecca can become a better owner. He believes Jamie can grow beyond his ego. He believes Nate can find his confidence. He believes Roy can evolve past his playing career. And because he believes in them, they start believing in themselves.</p>
<p>Your team is watching you in the same way Richmond watches Ted. When a sprint goes sideways, do you panic or do you facilitate a calm retrospective? When stakeholders are demanding the impossible, do you fold immediately or do you advocate for sustainable pace? When someone makes a mistake, do you create space for growth or assign blame?</p>
<p>You don't have to be relentlessly cheerful like Ted (and honestly, neither is he beneath the surface). But you do need to genuinely believe in the people you're serving. Believe they can self-organize. Believe they can solve complex problems. Believe they can grow and improve. Because if you don't believe in them, why should they believe in themselves?</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-biscuit-approach-to-servant-leadership">The Biscuit Approach to Servant Leadership<a href="https://risadams.com/blog/2025/11/25/what-ted-lasso-taught-me-as-a-scrum-master#the-biscuit-approach-to-servant-leadership" class="hash-link" aria-label="Direct link to The Biscuit Approach to Servant Leadership" title="Direct link to The Biscuit Approach to Servant Leadership" translate="no">​</a></h2>
<blockquote>
<p>Human beings are never gonna be perfect. The best we can do is to keep asking for help and accepting it when you can. And if you keep on doing that, you’ll always be moving towards better. — Leslie Higgans</p>
</blockquote>
<p>I can't write about Ted Lasso without mentioning the biscuits. Every morning, Ted brings Rebecca shortbread in a pink box. It's a small gesture, but it's consistent, thoughtful, and it eventually breaks through her walls.</p>
<p>The biscuits aren't about grand gestures or forced team-building. They're about showing up consistently with small acts of consideration. They're about noticing what someone values (Rebecca loves those biscuits) and making the effort.</p>
<p>What's your version of the biscuits? Maybe it's remembering that one developer takes their kids to school and scheduling standups later. Maybe it's noticing someone did great work and calling it out specifically. Maybe it's bringing documentation to a meeting because you know one team member processes information better in writing.</p>
<p>Servant leadership isn't about heroic interventions. It's about consistent, genuine care for the people you work with. It's showing up every day and doing small things that make their work lives better.</p>
<p>Ted never stops bringing those biscuits, even when Rebecca is actively trying to sabotage him. He doesn't make them transactional. He doesn't withhold them when he's frustrated. The consistency is the point.</p>
<p>Your team needs that same consistency. They need to know you'll be there at standup, that you'll follow up on impediments, that you'll create space for retrospective discussions, that you'll advocate for them when stakeholders are unreasonable. Not just when you feel like it, but every sprint, every day.</p>
<hr>
<p>Being a Scrum Master isn't comfortable. Servant leadership isn't comfortable. Building real team culture isn't comfortable.</p>
<p>But Ted shows us it's worth it. Not just for the wins — though Richmond does eventually succeed — but for the people you develop, the culture you build, and the lasting impact you create.</p>
<p>You don't need a folksy accent or an arsenal of dad jokes (though they don't hurt). You don't need to be relentlessly positive or pretend everything's fine when it's not. You just need to care genuinely about the people you serve, stay curious instead of judgmental, and believe that small, consistent actions compound into meaningful change.</p>]]></content:encoded>
            <category>agile</category>
            <category>scrum</category>
            <category>leadership</category>
            <category>team-dynamics</category>
            <category>coaching</category>
        </item>
        <item>
            <title><![CDATA[Stop Managing Projects with Scrum; Start Managing Conversations]]></title>
            <link>https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework</link>
            <guid>https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework</guid>
            <pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Scrum gets mislabeled as project management. Then we ask it to do budget tracking, dependency orchestration, and scope control. No wonder it feels clumsy. Scrum is not your project management framework. Scrum is your communication framework for complex work. It sets the cadence, topics, and decision rules so a team can learn fast and adapt even faster. If you treat it that way, delivery gets less brittle and leadership gets better signal with less theater.]]></description>
            <content:encoded><![CDATA[<p>Scrum gets mislabeled as project management. Then we ask it to do budget tracking, dependency orchestration, and scope control. No wonder it feels clumsy. Scrum is not your project management framework. Scrum is your communication framework for complex work. It sets the cadence, topics, and decision rules so a team can learn fast and adapt even faster. If you treat it that way, delivery gets less brittle and leadership gets better signal with less theater.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-main-point">The Main Point<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#the-main-point" class="hash-link" aria-label="Direct link to The Main Point" title="Direct link to The Main Point" translate="no">​</a></h2>
<p>Scrum is an operating system for team communication. It defines who talks to whom, when, and about what. The events, artifacts, and roles are communication contracts that produce decisions, not ceremony. Project management frameworks handle governance, scope, cost, schedule, and risk at the program or portfolio level. Scrum handles the conversation that turns uncertainty into value at the team level. Use Scrum alone when the work is bounded and the organization is lightweight. Pair it with a PM framework when you need formal controls. Either way, optimize the communication before you optimize the paperwork.</p>
<p>You have a few good options. You can run Scrum on its own for a product or platform team that can ship often. You can layer Scrum under PMBOK or PRINCE2 to satisfy governance without suffocating delivery. Or you can blend with Kanban to emphasize flow in service teams. Pick based on what matters most to you: learning speed, compliance, or flow predictability.</p>
<p>Below is a clear breakdown of what Scrum actually provides, what it does not, and how to combine it with the rest of your toolbox without creating meeting soup.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scrum-is-a-communication-framework">Scrum is a communication framework<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#scrum-is-a-communication-framework" class="hash-link" aria-label="Direct link to Scrum is a communication framework" title="Direct link to Scrum is a communication framework" translate="no">​</a></h2>
<p>Scrum’s core is empirical process control. You inspect meaningful slices of work on a tight cadence, and you adapt based on what reality tells you. That requires high‑quality communication. Every Scrum element exists to improve the signal quality of that communication:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Roles align communication responsibilities.<!-- -->
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Product Owner: prioritization and value narrative.</li>
<li>Developers: feasibility, slicing, and execution details.</li>
<li>Scrum Master: communication hygiene, facilitation, and flow.</li>
</ul>
</li>
<li>Events create intentional windows for decision making.<!-- -->
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Sprint Planning: synchronize goals, capacity, and the first slice of the plan.</li>
<li>Daily Scrum: short risk and flow calibration, not status theater.</li>
<li>Sprint Review: validate value with stakeholders.</li>
<li>Sprint Retrospective: improve the communication system itself.</li>
<li>Backlog Refinement: maintain shared understanding and ready work.</li>
</ul>
</li>
<li>Artifacts make the conversation inspectable.<!-- -->
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Product Backlog communicates intent and options.</li>
<li>Sprint Backlog communicates near‑term plan and tradeoffs.</li>
<li>Increment communicates what is actually done.</li>
<li>Definition of Done and Working Agreements communicate quality and behaviors.</li>
</ul>
</li>
</ul>
<p>If the communication is healthy, delivery follows. When Scrum “doesn’t work,” it is usually because the communication contracts are weak, not because the framework is missing a Gantt chart.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-scrum-is-not">What Scrum is not<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#what-scrum-is-not" class="hash-link" aria-label="Direct link to What Scrum is not" title="Direct link to What Scrum is not" translate="no">​</a></h2>
<p>Scrum does not provide the full project management stack. It does not manage:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Cost accounting and capitalization rules</li>
<li>Procurement, vendor management, and contract clauses</li>
<li>Program‑level dependency networks and critical paths</li>
<li>Stage‑gate approvals, compliance documentation, and audit trails</li>
<li>Organization‑wide risk registers or RAID logs</li>
</ul>
<p>You can bolt those on, but they are not Scrum. They are often necessary. Treat them as a governance layer that consumes signal generated by Scrum’s communication layer.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="using-scrum-independently">Using Scrum independently<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#using-scrum-independently" class="hash-link" aria-label="Direct link to Using Scrum independently" title="Direct link to Using Scrum independently" translate="no">​</a></h2>
<p>Scrum alone works well when:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>You own the roadmap and can release incrementally.</li>
<li>Risk is in the product and technology, not in complex external dependencies.</li>
<li>Leadership wants fast learning and real‑time visibility instead of detailed upfront plans.</li>
</ul>
<p>What this looks like in practice:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Product Owner measures outcomes and keeps the backlog thin and prioritized. Fewer big bets. More small slices with clear hypotheses.</li>
<li>Team uses a one‑page Working Agreement that defines how to swarm blockers, how to slice work, and how to decide when “good enough” beats “perfect.”</li>
<li>Daily Scrum is focused on flow. What is stuck. What decision do we need. What is the thinnest next slice.</li>
<li>Sprint Review includes the real users or proxies. They react to real increments, not slides.</li>
</ul>
<p>Results: tighter feedback loops, fewer surprises, and decisions made at the right level without waiting for a steering committee.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="pairing-scrum-with-project-management-frameworks">Pairing Scrum with project management frameworks<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#pairing-scrum-with-project-management-frameworks" class="hash-link" aria-label="Direct link to Pairing Scrum with project management frameworks" title="Direct link to Pairing Scrum with project management frameworks" translate="no">​</a></h2>
<p>Sometimes you need both. The trick is to keep the boundary clean. Scrum generates high‑quality signal. The PM framework consumes that signal to make portfolio decisions. Here are practical pairings that work.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scrum--pmbok-or-pmistyle-governance">Scrum + PMBOK (or PMI‑style governance)<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#scrum--pmbok-or-pmistyle-governance" class="hash-link" aria-label="Direct link to Scrum + PMBOK (or PMI‑style governance)" title="Direct link to Scrum + PMBOK (or PMI‑style governance)" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Use Scrum events to populate governance artifacts. Sprint Reviews surface benefits realization and emerging risks. Retrospectives feed continuous improvement into risk responses.</li>
<li>Keep RAID in the PM space, but link items to backlog issues for transparency.</li>
<li>Use Definition of Done to satisfy quality management plans. Make the audit trail a byproduct of the dev workflow, not an extra step.</li>
<li>Forecasting: use throughput, cycle time, and release burn‑up to inform schedule projections rather than locking scope at sprint start.</li>
</ul>
<p>Where it goes wrong: teams are forced to treat sprint commitments as fixed contractual scope. Fix by shifting conversations to probabilistic forecasts and capacity‑based planning.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scrum--prince2">Scrum + PRINCE2<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#scrum--prince2" class="hash-link" aria-label="Direct link to Scrum + PRINCE2" title="Direct link to Scrum + PRINCE2" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Align stage boundaries with release reviews. Let Product Owner act as the voice of Senior User within team cadence while project board handles tolerances.</li>
<li>Use Scrum artifacts to provide management by exception. When tolerances are exceeded, raise it in Review and adapt the stage plan.</li>
</ul>
<p>Where it goes wrong: duplicating documentation for both PRINCE2 and Scrum. Fix by mapping artifacts directly and generating documents from the backlog and code repository.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scrum--kanban-scrumban">Scrum + Kanban (Scrumban)<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#scrum--kanban-scrumban" class="hash-link" aria-label="Direct link to Scrum + Kanban (Scrumban)" title="Direct link to Scrum + Kanban (Scrumban)" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Keep Scrum’s cadence for alignment and learning. Add Kanban’s flow practices: WIP limits, service level expectations, and explicit policies.</li>
<li>Measure flow metrics: cycle time, blocker age, arrival rate, and throughput. Use them in Planning and the Daily Scrum.</li>
</ul>
<p>Where it goes wrong: too many events plus too many columns. Fix by simplifying the board and using metrics to drive smaller batch sizes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scrum--safe-or-scaled-governance">Scrum + SAFe or scaled governance<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#scrum--safe-or-scaled-governance" class="hash-link" aria-label="Direct link to Scrum + SAFe or scaled governance" title="Direct link to Scrum + SAFe or scaled governance" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Let Scrum events remain sacred at the team level. Use Program Increment planning for cross‑team alignment, but keep Daily Scrums local and lightweight.</li>
<li>Use integration demos as Sprint Reviews at the program layer. Avoid duplicating ceremonies.</li>
</ul>
<p>Where it goes wrong: ceremony bloat and status reporting masquerading as alignment. Fix by declaring the purpose of each event and killing anything without a decision outcome.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="antipatterns-when-scrum-pretends-to-be-project-management">Anti‑patterns when Scrum pretends to be project management<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#antipatterns-when-scrum-pretends-to-be-project-management" class="hash-link" aria-label="Direct link to Anti‑patterns when Scrum pretends to be project management" title="Direct link to Anti‑patterns when Scrum pretends to be project management" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Scrum Master as Project Manager. Outcome: command‑and‑control creep and learned helplessness. Fix: Scrum Master coaches communication hygiene and flow, not scope control.</li>
<li>Sprint commitment treated as a contract. Outcome: sandbagging and hidden work. Fix: commit to a Sprint Goal and use flexible scope to support it.</li>
<li>Story points as performance metrics. Outcome: gaming, velocity theater, and poor estimates. Fix: use flow metrics and outcomes, not points for comparisons.</li>
<li>Daily Scrum as status meeting. Outcome: boredom and no decisions. Fix: ask, What is blocking flow. What is our next decision. What do we stop doing today.</li>
<li>Backlog refinement as design review for everything. Outcome: analysis paralysis. Fix: slice thinner and learn in the increment.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="measure-communication-not-just-output">Measure communication, not just output<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#measure-communication-not-just-output" class="hash-link" aria-label="Direct link to Measure communication, not just output" title="Direct link to Measure communication, not just output" translate="no">​</a></h2>
<p>We can optimize this by measuring the quality of Scrum’s conversations. Practical signals:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Decision latency: time from a blocked signal to a decision.</li>
<li>Blocker age: how long work stays stuck.</li>
<li>Cycle time: start to finish for a slice of value.</li>
<li>Talk time balance in events: is one role dominating.</li>
<li>Action follow‑through from Retrospectives: completed within two sprints.</li>
</ul>
<p>None of these require heavyweight tooling. Most can be derived from your issue tracker and a simple log of blockers and decisions.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="how-to-implement-without-adding-meetings">How to implement without adding meetings<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#how-to-implement-without-adding-meetings" class="hash-link" aria-label="Direct link to How to implement without adding meetings" title="Direct link to How to implement without adding meetings" translate="no">​</a></h2>
<p>Here is a quick way to streamline your communication system in two weeks:</p>
<p>Week 1</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Write or refresh the team Working Agreement. Include when we swarm, how we slice, and how we call decisions.</li>
<li>Refactor the Daily Scrum. Cap at 15 minutes. Focus on flow and risks. No status reporting.</li>
<li>Define a clear Sprint Goal. Target one or two measurable outcomes.</li>
</ul>
<p>Week 2</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Run a Retrospective that inspects communication. Ask what signals were missing and what decisions took too long.</li>
<li>Trim your backlog to the next two sprints of ready slices. Everything else is an option, not a promise.</li>
<li>Create a simple decision log and review it briefly in Sprint Review.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="daily-scrum-microagenda-15-min-max">Daily Scrum micro‑agenda (15 min max)<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#daily-scrum-microagenda-15-min-max" class="hash-link" aria-label="Direct link to Daily Scrum micro‑agenda (15 min max)" title="Direct link to Daily Scrum micro‑agenda (15 min max)" translate="no">​</a></h3>
<ol>
<li>Flow check (3 min): What is blocked. What got older than 1 day.</li>
<li>Goal alignment (5 min): Are we still on track for the Sprint Goal. What do we drop.</li>
<li>Thin slice planning (5 min): What is the next smallest step to move value.</li>
<li>Decision callouts (2 min): What decision do we need today. Who owns it.</li>
</ol>
<p>Working Agreements reminders:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Cameras optional, participation required</li>
<li>Swarm first, escalate fast</li>
<li>No status recaps; the board is the status</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways">Key Takeaways<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Scrum is a communication framework. Use it to create high‑quality signal and fast decisions.</li>
<li>Project management is governance. Pair it with Scrum when you need cost, schedule, and risk controls.</li>
<li>Keep boundaries clean. Scrum generates signal. Governance consumes it.</li>
<li>Measure decision latency and blocker age. They tell you if communication is working.</li>
<li>Favor small slices, explicit goals, and brief, purposeful events.</li>
<li>You have options. Run pure Scrum for product teams, or combine it with PMBOK, PRINCE2, or Kanban without adding ceremony.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="conclusion">Conclusion<a href="https://risadams.com/blog/2025/10/17/scrum-as-a-communication-framework#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Scrum works best when you treat it as the team’s communication system, not the company’s project management office. Let it do what it is good at. Create clarity, accelerate decisions, and expose risks early. Pair it with the right governance layer when needed, but protect the purpose of the events and artifacts. If your Scrum feels heavy or unhelpful, do not add more forms. Fix the conversation. Then watch the delivery follow.</p>]]></content:encoded>
            <category>scrum</category>
            <category>communication</category>
            <category>leadership</category>
            <category>facilitation</category>
            <category>decision-making</category>
            <category>methodology</category>
        </item>
        <item>
            <title><![CDATA[The Sprint Planning Boss Battle: Why Every Story Point Estimate Is a Dice Roll]]></title>
            <link>https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll</link>
            <guid>https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll</guid>
            <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[You know that moment in sprint planning when everyone reveals their story point estimates simultaneously, and the numbers range from 2 to 13? That's not a planning failure—that's collaborative dice rolling at its finest. Just like a D&D party assessing whether they can take on a dragon, your development team is essentially asking "What are the odds we can pull this off?" The answer, as any seasoned dungeon crawler knows, depends on your party composition, available equipment, and whether anyone remembered to bring healing potions.]]></description>
            <content:encoded><![CDATA[<p>You know that moment in sprint planning when everyone reveals their story point estimates simultaneously, and the numbers range from 2 to 13? That's not a planning failure—that's collaborative dice rolling at its finest. Just like a D&amp;D party assessing whether they can take on a dragon, your development team is essentially asking "What are the odds we can pull this off?" The answer, as any seasoned dungeon crawler knows, depends on your party composition, available equipment, and whether anyone remembered to bring healing potions.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="session-zero-setting-up-the-campaign">Session Zero: Setting Up the Campaign<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#session-zero-setting-up-the-campaign" class="hash-link" aria-label="Direct link to Session Zero: Setting Up the Campaign" title="Direct link to Session Zero: Setting Up the Campaign" translate="no">​</a></h2>
<img src="https://img.risadams.com/session-zero-planning@320w.webp" alt="Session Zero Planning" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>Every great D&amp;D campaign starts with Session Zero—that crucial planning meeting where everyone discusses expectations, sets boundaries, and figures out what kind of story they want to tell together. Sprint planning serves the exact same function for development teams, just with fewer character sheets and more acceptance criteria.</p>
<p>In Session Zero, the Dungeon Master describes the world, establishes the tone, and makes sure everyone understands the rules they're playing by. In sprint planning, the Product Owner paints the vision, clarifies business objectives, and ensures the team understands what success looks like. Both sessions answer the fundamental question: "What are we actually trying to accomplish here?"</p>
<p>The magic happens when everyone gets aligned on scope and constraints before diving into tactical decisions. You wouldn't start a D&amp;D campaign without knowing if you're playing a gritty survival story or a heroic fantasy romp. Similarly, you shouldn't start a sprint without understanding whether you're optimizing for speed, quality, or learning.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-pre-game-ritual">The Pre-Game Ritual<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-pre-game-ritual" class="hash-link" aria-label="Direct link to The Pre-Game Ritual" title="Direct link to The Pre-Game Ritual" translate="no">​</a></h3>
<p>Just like experienced D&amp;D groups have their pre-session rituals—snacks, music, recap of last session—successful development teams establish their own sprint planning ceremonies. Some teams start with a quick team health check. Others review the previous sprint's velocity. The ritual matters less than the shared understanding it creates.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="character-sheets-developer-skills-as-stats">Character Sheets: Developer Skills as Stats<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#character-sheets-developer-skills-as-stats" class="hash-link" aria-label="Direct link to Character Sheets: Developer Skills as Stats" title="Direct link to Character Sheets: Developer Skills as Stats" translate="no">​</a></h2>
<img src="https://img.risadams.com/developer-character-sheets@320w.webp" alt="Developer Character Sheets" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>In D&amp;D, your character sheet tells you everything about your capabilities. Strength 18? You're carrying the heavy equipment. Dexterity 8? Maybe stay away from the lockpicking. Development teams have their own version of character sheets, though we rarely make them explicit.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-hidden-stats-system">The Hidden Stats System<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-hidden-stats-system" class="hash-link" aria-label="Direct link to The Hidden Stats System" title="Direct link to The Hidden Stats System" translate="no">​</a></h3>
<p>Every developer on your team has invisible stats that directly impact story point estimates:</p>
<p><strong>Frontend Expertise (CHA)</strong>: How well they handle user-facing features and the inevitable "can you make this pop more?" requests. High CHA developers navigate stakeholder feedback like diplomatic bards.</p>
<p><strong>Backend Systems Knowledge (INT)</strong>: Database optimization, API design, and the arcane arts of microservices architecture. These are your wizards—powerful, but they need time to prepare their spells.</p>
<p><strong>DevOps Proficiency (WIS)</strong>: Understanding of CI/CD, infrastructure, and deployment pipelines. The clerics of your party, keeping everyone alive and systems running.</p>
<p><strong>Domain Experience (CON)</strong>: How long they've worked in your specific business context. High CON means they can power through complex business logic without getting confused or burnt out.</p>
<p><strong>Availability This Sprint (DEX)</strong>: Vacation days, conference attendance, other project commitments. Even the most skilled developer can't contribute much if they're only available 10 hours this sprint.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rolling-character-stats">Rolling Character Stats<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#rolling-character-stats" class="hash-link" aria-label="Direct link to Rolling Character Stats" title="Direct link to Rolling Character Stats" translate="no">​</a></h3>
<p>The problem is we rarely acknowledge these stats explicitly during planning. We estimate stories as if every developer has identical capabilities, then wonder why our estimates vary wildly. It's like assuming every D&amp;D character can pick locks equally well just because they all have hands.</p>
<p>Smart Scrum Masters learn to read their team's character sheets. They know Sarah's backend expertise makes API stories trivial for her but that frontend tasks require more effort. They understand that Mike's domain knowledge means he can navigate complex business logic quickly, but new team members might need support.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-adventure-hooks-user-stories-as-quest-objectives">The Adventure Hooks: User Stories as Quest Objectives<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-adventure-hooks-user-stories-as-quest-objectives" class="hash-link" aria-label="Direct link to The Adventure Hooks: User Stories as Quest Objectives" title="Direct link to The Adventure Hooks: User Stories as Quest Objectives" translate="no">​</a></h2>
<p>"A mysterious stranger approaches you in the tavern with a quest..." Sound familiar? User stories serve the same narrative function in sprint planning. They're your adventure hooks—compelling objectives that give your team direction and purpose.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="writing-better-quest-hooks">Writing Better Quest Hooks<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#writing-better-quest-hooks" class="hash-link" aria-label="Direct link to Writing Better Quest Hooks" title="Direct link to Writing Better Quest Hooks" translate="no">​</a></h3>
<p>Just like a good D&amp;D quest hook, effective user stories need three elements:</p>
<p><strong>Clear Motivation</strong>: Why does this matter to the user/character? "As a user, I want to reset my password" is functional but uninspiring. "As a frustrated user locked out of my account, I want to quickly reset my password so I can access my important data without calling support" tells a story worth caring about.</p>
<p><strong>Obvious Stakes</strong>: What happens if this quest fails? The best D&amp;D adventures have clear consequences for failure. Similarly, the best user stories explain what happens if this feature doesn't work properly.</p>
<p><strong>Multiple Solution Paths</strong>: Great quest hooks allow creative problem-solving. User stories should focus on outcomes, not implementation details. "Defeat the dragon" is better than "Use a sword to attack the dragon exactly three times."</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-quest-board-approach">The Quest Board Approach<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-quest-board-approach" class="hash-link" aria-label="Direct link to The Quest Board Approach" title="Direct link to The Quest Board Approach" translate="no">​</a></h3>
<p>Some teams treat their product backlog like a tavern quest board—full of available adventures ranked by difficulty and reward. Developers can see what's available, understand the challenges, and volunteer for quests that match their interests and skills. This self-selection often leads to better estimates because people naturally gravitate toward challenges they understand.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rolling-for-initiative-planning-poker-as-collaborative-dice-rolling">Rolling for Initiative: Planning Poker as Collaborative Dice Rolling<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#rolling-for-initiative-planning-poker-as-collaborative-dice-rolling" class="hash-link" aria-label="Direct link to Rolling for Initiative: Planning Poker as Collaborative Dice Rolling" title="Direct link to Rolling for Initiative: Planning Poker as Collaborative Dice Rolling" translate="no">​</a></h2>
<img src="https://img.risadams.com/planning-poker-dice@320w.webp" alt="Planning Poker as Dice Rolling" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>Planning poker is essentially collaborative dice rolling with extra steps. Instead of rolling a d20 and hoping for the best, your team "rolls" story point estimates and discusses the results. The magic isn't in the numbers—it's in the conversation that happens when someone rolls a 2 and someone else rolls a 13 for the same story.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-dice-mechanics-of-estimation">The Dice Mechanics of Estimation<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-dice-mechanics-of-estimation" class="hash-link" aria-label="Direct link to The Dice Mechanics of Estimation" title="Direct link to The Dice Mechanics of Estimation" translate="no">​</a></h3>
<p>Different estimation scales work like different dice in D&amp;D:</p>
<p><strong>Fibonacci (1, 2, 3, 5, 8, 13)</strong>: Like using a d6 for simple checks and a d20 for complex ones. The bigger the number, the less precise your estimate becomes.</p>
<p><strong>T-Shirt Sizes (XS, S, M, L, XL)</strong>: Like advantage/disadvantage in D&amp;D 5e—simpler, faster, but less granular.</p>
<p><strong>Powers of 2 (1, 2, 4, 8, 16)</strong>: Like doubling damage dice for critical hits—each step represents a significant complexity increase.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-group-check-dynamic">The Group Check Dynamic<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-group-check-dynamic" class="hash-link" aria-label="Direct link to The Group Check Dynamic" title="Direct link to The Group Check Dynamic" translate="no">​</a></h3>
<p>When D&amp;D parties make group checks, everyone rolls individually, but success depends on the collective result. Planning poker works the same way. Individual estimates matter, but the team's shared understanding is what determines success.</p>
<p>The most valuable estimates happen when team members have wildly different perspectives. That's not estimation failure—that's the system working. Just like when the rogue rolls a 20 for stealth while the paladin in full plate armor rolls a 3, diverse estimates reveal different assumptions about the challenge ahead.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="equipment-check-technical-dependencies-and-tooling">Equipment Check: Technical Dependencies and Tooling<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#equipment-check-technical-dependencies-and-tooling" class="hash-link" aria-label="Direct link to Equipment Check: Technical Dependencies and Tooling" title="Direct link to Equipment Check: Technical Dependencies and Tooling" translate="no">​</a></h2>
<p>No experienced D&amp;D party attempts a dragon fight without checking their equipment first. Similarly, no smart development team commits to a story without understanding their technical dependencies. Yet somehow, sprint after sprint, we discover mid-implementation that we need equipment we don't have.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-adventuring-gear-inventory">The Adventuring Gear Inventory<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-adventuring-gear-inventory" class="hash-link" aria-label="Direct link to The Adventuring Gear Inventory" title="Direct link to The Adventuring Gear Inventory" translate="no">​</a></h3>
<p>Before tackling any significant story, your team should do an equipment check:</p>
<p><strong>Weapons (Development Tools)</strong>: Do we have the right IDEs, frameworks, and libraries? Is everyone running the same versions?</p>
<p><strong>Armor (Infrastructure)</strong>: Are our development, staging, and production environments ready? Do we have proper monitoring and logging?</p>
<p><strong>Healing Potions (Support Systems)</strong>: Are the right SMEs available? Do we have access to necessary third-party APIs? Are our testing frameworks working?</p>
<p><strong>Rope and Grappling Hooks (Utilities)</strong>: Database access, deployment scripts, debugging tools—the unglamorous stuff that saves your life when things go wrong.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-missing-component-trap">The Missing Component Trap<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-missing-component-trap" class="hash-link" aria-label="Direct link to The Missing Component Trap" title="Direct link to The Missing Component Trap" translate="no">​</a></h3>
<p>Just like forgetting to bring rope to a dungeon crawl, missing technical dependencies can turn simple stories into epic quests. The 3-point "add a new field to the user profile" becomes a 13-point odyssey when you discover the user service is owned by another team, requires a database migration, and needs security review.</p>
<p>This is why experienced teams spend more time on dependency identification than on the actual estimation numbers. The story point is less important than understanding what could go wrong.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-dungeon-masters-screen-what-the-scrum-master-knows">The Dungeon Master's Screen: What the Scrum Master Knows<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-dungeon-masters-screen-what-the-scrum-master-knows" class="hash-link" aria-label="Direct link to The Dungeon Master's Screen: What the Scrum Master Knows" title="Direct link to The Dungeon Master's Screen: What the Scrum Master Knows" translate="no">​</a></h2>
<p>Every DM has secrets behind their screen—monster stats, plot twists, and contingency plans the players can't see. Scrum Masters have their own version of hidden information that shapes how they guide sprint planning without directly influencing estimates.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-hidden-information">The Hidden Information<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-hidden-information" class="hash-link" aria-label="Direct link to The Hidden Information" title="Direct link to The Hidden Information" translate="no">​</a></h3>
<p><strong>Stakeholder Pressure</strong>: The PM mentioned this feature needs to be ready for a demo next week, but the team doesn't know that yet.</p>
<p><strong>Technical Debt Bombs</strong>: There's a known issue in the authentication service that will probably explode during this sprint, but it hasn't surfaced yet.</p>
<p><strong>Team Dynamics</strong>: Sarah and Mike worked poorly together on the last story involving the payment system, so pairing them again might add complexity.</p>
<p><strong>External Dependencies</strong>: The third-party API integration looks straightforward, but you know from experience it always takes longer than expected.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-art-of-gentle-nudging">The Art of Gentle Nudging<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-art-of-gentle-nudging" class="hash-link" aria-label="Direct link to The Art of Gentle Nudging" title="Direct link to The Art of Gentle Nudging" translate="no">​</a></h3>
<p>Good DMs guide without railroading. When the party is about to walk into an obvious trap, a skilled DM might describe the suspicious-looking floor tiles more dramatically or ask "Are you sure you want to step there?"</p>
<p>Good Scrum Masters use similar techniques during estimation:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>"That sounds reasonable. Have you considered the database migration aspect?"</li>
<li>"The last time we worked on the notification system, we ran into some complexity around email deliverability. Worth thinking about."</li>
<li>"Just checking—do we need design review for this story?"</li>
</ul>
<p>The goal isn't to provide the answers, but to help the team ask the right questions.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="boss-battles-epic-stories-that-require-the-whole-party">Boss Battles: Epic Stories That Require the Whole Party<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#boss-battles-epic-stories-that-require-the-whole-party" class="hash-link" aria-label="Direct link to Boss Battles: Epic Stories That Require the Whole Party" title="Direct link to Boss Battles: Epic Stories That Require the Whole Party" translate="no">​</a></h2>
<img src="https://img.risadams.com/boss-battle-epic-story@320w.webp" alt="Boss Battle Epic Story" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>Every sprint has them—those epic-sized stories that make everyone shift uncomfortably in their chairs. These are your boss battles: complex features that require coordination, careful strategy, and the full attention of your development party.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="recognizing-a-boss-battle">Recognizing a Boss Battle<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#recognizing-a-boss-battle" class="hash-link" aria-label="Direct link to Recognizing a Boss Battle" title="Direct link to Recognizing a Boss Battle" translate="no">​</a></h3>
<p>Boss battle stories share certain characteristics:</p>
<p><strong>Multiple Systems</strong>: They touch authentication, payments, notifications, and the admin dashboard. Like fighting a hydra, attacking one part affects everything else.</p>
<p><strong>Cross-Team Dependencies</strong>: Success requires coordination with other teams, external vendors, or legacy systems that haven't been touched since 2019.</p>
<p><strong>Unknown Unknowns</strong>: The acceptance criteria seem clear, but everyone suspects there are hidden complexities waiting to emerge.</p>
<p><strong>High Stakes</strong>: If this fails, it impacts customer experience, revenue, or regulatory compliance.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="boss-battle-strategy">Boss Battle Strategy<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#boss-battle-strategy" class="hash-link" aria-label="Direct link to Boss Battle Strategy" title="Direct link to Boss Battle Strategy" translate="no">​</a></h3>
<p>You don't fight dragons with basic attacks. Similarly, epic stories need special treatment:</p>
<p><strong>Reconnaissance Phase</strong>: Spend time understanding the challenge before committing. Spikes, proof-of-concepts, and architecture reviews are your scouting missions.</p>
<p><strong>Party Composition</strong>: Make sure you have the right mix of skills. Boss battles often need that rare combination of domain expertise, technical depth, and stakeholder communication.</p>
<p><strong>Preparation Time</strong>: Epic stories benefit from prep work—design documents, technical spikes, stakeholder alignment. Just like preparing spells and coordinating tactics before the big fight.</p>
<p><strong>Contingency Planning</strong>: What happens if this takes longer than expected? What's the minimum viable version? How do we retreat gracefully if things go wrong?</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="critical-failures-when-estimates-go-spectacularly-wrong">Critical Failures: When Estimates Go Spectacularly Wrong<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#critical-failures-when-estimates-go-spectacularly-wrong" class="hash-link" aria-label="Direct link to Critical Failures: When Estimates Go Spectacularly Wrong" title="Direct link to Critical Failures: When Estimates Go Spectacularly Wrong" translate="no">​</a></h2>
<img src="https://img.risadams.com/critical-failure-estimation@320w.webp" alt="Critical Failure in Estimation" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>Every D&amp;D player has rolled a natural 1 at the worst possible moment. Every development team has seen a "simple 2-point bug fix" turn into a week-long debugging odyssey that requires refactoring three different services. These critical failures aren't bugs in the system—they're features that force you to confront underlying problems you've been avoiding.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-anatomy-of-a-critical-failure">The Anatomy of a Critical Failure<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-anatomy-of-a-critical-failure" class="hash-link" aria-label="Direct link to The Anatomy of a Critical Failure" title="Direct link to The Anatomy of a Critical Failure" translate="no">​</a></h3>
<p>Critical estimation failures usually follow predictable patterns:</p>
<p><strong>The Rabbit Hole</strong>: What started as "just change this validation message" becomes "wait, why is user validation handled in seventeen different places?"</p>
<p><strong>The Assumption Explosion</strong>: "This should be easy, it's just like the feature we built last month" meets the reality that last month's feature was built by someone who no longer works here and documented nothing.</p>
<p><strong>The Integration Nightmare</strong>: Your code works perfectly in isolation, but integrating with the existing system reveals architectural decisions that seemed reasonable in 2018 but feel cursed today.</p>
<p><strong>The Stakeholder Surprise</strong>: "Oh, by the way, this also needs to work with our legacy admin system that I forgot to mention."</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="learning-from-critical-failures">Learning from Critical Failures<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#learning-from-critical-failures" class="hash-link" aria-label="Direct link to Learning from Critical Failures" title="Direct link to Learning from Critical Failures" translate="no">​</a></h3>
<p>In D&amp;D, rolling a 1 doesn't make you a bad player—it makes the story more interesting. Similarly, estimation failures aren't team failures—they're learning opportunities disguised as frustration.</p>
<p>The best teams treat critical failures like post-mortem analysis:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>What assumptions did we make that proved false?</li>
<li>What information could we have gathered earlier?</li>
<li>How do we update our "character sheets" (team knowledge) based on this experience?</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="leveling-up-how-teams-improve-estimation-over-time">Leveling Up: How Teams Improve Estimation Over Time<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#leveling-up-how-teams-improve-estimation-over-time" class="hash-link" aria-label="Direct link to Leveling Up: How Teams Improve Estimation Over Time" title="Direct link to Leveling Up: How Teams Improve Estimation Over Time" translate="no">​</a></h2>
<img src="https://img.risadams.com/team-leveling-up@320w.webp" alt="Team Leveling Up Through Experience" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>D&amp;D characters start weak and become powerful through experience. Development teams follow the same progression—their estimation accuracy improves as they gain experience with their codebase, their domain, and each other.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="experience-points-in-estimation">Experience Points in Estimation<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#experience-points-in-estimation" class="hash-link" aria-label="Direct link to Experience Points in Estimation" title="Direct link to Experience Points in Estimation" translate="no">​</a></h3>
<p>Teams gain estimation experience points through:</p>
<p><strong>Domain Knowledge</strong>: Understanding the business context makes complexity more predictable. The team that's built five reporting features can estimate the sixth one more accurately.</p>
<p><strong>Technical Familiarity</strong>: Knowing your codebase's quirks and patterns helps identify hidden complexity. "Oh, this touches the user service? That always takes longer than expected."</p>
<p><strong>Team Dynamics</strong>: Understanding how your teammates work changes how you estimate collaborative efforts. Pairing Sarah with Mike on frontend stories works better than either working alone.</p>
<p><strong>Historical Pattern Recognition</strong>: Tracking estimation accuracy over time reveals systematic biases. "We always underestimate stories involving the notification system by 50%."</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-level-progression">The Level Progression<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-level-progression" class="hash-link" aria-label="Direct link to The Level Progression" title="Direct link to The Level Progression" translate="no">​</a></h3>
<p><strong>Level 1 Teams</strong>: Estimates vary wildly. Everything seems to take longer than expected. Stories frequently spill over between sprints.</p>
<p><strong>Level 5 Teams</strong>: Estimates are reasonably consistent within a sprint. The team understands their velocity and can plan accordingly.</p>
<p><strong>Level 10 Teams</strong>: The team can accurately estimate complexity across different types of work. They recognize patterns and can adjust estimates based on context.</p>
<p><strong>Level 15 Teams</strong>: Estimation becomes a secondary concern because the team focuses on reducing uncertainty rather than predicting it. They break down epics effectively, identify dependencies early, and design systems for predictability.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-expertise-trap">The Expertise Trap<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-expertise-trap" class="hash-link" aria-label="Direct link to The Expertise Trap" title="Direct link to The Expertise Trap" translate="no">​</a></h3>
<p>Paradoxically, very experienced teams sometimes become worse at estimation—not because they're less skilled, but because they optimize for different things. Just like high-level D&amp;D parties stop worrying about basic encounters, senior teams might underestimate stories that would challenge junior developers.</p>
<p>This is why diverse teams often estimate more accurately than homogeneous ones. The senior developer thinks it's trivial, the junior developer sees hidden complexity, and the discussion reveals the truth somewhere in between.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="campaign-arcs-release-planning-as-multi-session-adventures">Campaign Arcs: Release Planning as Multi-Session Adventures<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#campaign-arcs-release-planning-as-multi-session-adventures" class="hash-link" aria-label="Direct link to Campaign Arcs: Release Planning as Multi-Session Adventures" title="Direct link to Campaign Arcs: Release Planning as Multi-Session Adventures" translate="no">​</a></h2>
<p>Individual sprints are like single D&amp;D sessions—focused, contained adventures that contribute to a larger story. Release planning is campaign arc design—weaving multiple sessions into a coherent narrative that builds toward a satisfying conclusion.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-campaign-planning-session">The Campaign Planning Session<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-campaign-planning-session" class="hash-link" aria-label="Direct link to The Campaign Planning Session" title="Direct link to The Campaign Planning Session" translate="no">​</a></h3>
<p>Release planning meetings feel like campaign planning sessions. The Product Owner (lead DM) describes the overarching story they want to tell. The team discusses what's possible given their resources and timeline. Everyone contributes ideas about how different features could connect to create a compelling user experience.</p>
<p>Just like D&amp;D campaigns need a mix of combat, exploration, and social encounters, releases need a balance of new features, bug fixes, and technical improvements. Too much of any one element creates an unbalanced experience.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="managing-the-narrative-arc">Managing the Narrative Arc<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#managing-the-narrative-arc" class="hash-link" aria-label="Direct link to Managing the Narrative Arc" title="Direct link to Managing the Narrative Arc" translate="no">​</a></h3>
<p>Good campaign arcs have rhythm—periods of intense action followed by quieter character development moments. Good release planning creates similar rhythm in development work:</p>
<p><strong>High-Intensity Sprints</strong>: Major feature launches that require all hands and careful coordination.</p>
<p><strong>Consolidation Sprints</strong>: Bug fixes, technical debt reduction, and team skill development.</p>
<p><strong>Exploration Sprints</strong>: Experimental features, proof-of-concepts, and research into new possibilities.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-series-bible">The Series Bible<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-series-bible" class="hash-link" aria-label="Direct link to The Series Bible" title="Direct link to The Series Bible" translate="no">​</a></h3>
<p>D&amp;D campaigns maintain continuity through detailed notes about characters, locations, and ongoing plot threads. Development teams need similar documentation—architectural decisions, user research insights, and technical debt tracking that help maintain consistency across multiple releases.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-dice-dont-lie-but-they-dont-tell-the-whole-truth">The Dice Don't Lie (But They Don't Tell the Whole Truth)<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#the-dice-dont-lie-but-they-dont-tell-the-whole-truth" class="hash-link" aria-label="Direct link to The Dice Don't Lie (But They Don't Tell the Whole Truth)" title="Direct link to The Dice Don't Lie (But They Don't Tell the Whole Truth)" translate="no">​</a></h2>
<img src="https://img.risadams.com/dice-uncertainty-truth@320w.webp" alt="The Truth About Dice and Uncertainty" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>Story point estimates, like dice rolls, contain uncertainty by design. A 5-point story might take two days or two weeks, just like rolling 1d8+2 for damage could result in 3 points or 10 points. That variability isn't a flaw—it's an acknowledgment that software development, like dungeon crawling, involves unknown challenges that can only be discovered through exploration.</p>
<p>The goal isn't perfect prediction. The goal is shared understanding, risk awareness, and adaptive planning. When your team estimates a story at 8 points, they're not making a commitment—they're expressing collective uncertainty about complexity while agreeing to tackle the challenge together.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="embracing-the-uncertainty">Embracing the Uncertainty<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#embracing-the-uncertainty" class="hash-link" aria-label="Direct link to Embracing the Uncertainty" title="Direct link to Embracing the Uncertainty" translate="no">​</a></h3>
<p>The best D&amp;D sessions happen when players lean into uncertainty rather than trying to eliminate it. Similarly, the best sprints happen when teams use estimates as starting points for conversation rather than binding contracts.</p>
<p>Story points are communication tools disguised as measurement tools. They help teams discuss complexity, identify risks, and make collective decisions about what to attempt next. The numbers matter less than the shared understanding they create.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways">Key Takeaways<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>
<p><strong>Estimation is collaborative uncertainty assessment</strong>, not individual prediction. Like group checks in D&amp;D, success depends on the collective result.</p>
</li>
<li>
<p><strong>Team "character sheets" matter more than story complexity</strong>. Understanding your team's skills, availability, and working relationships improves estimation accuracy.</p>
</li>
<li>
<p><strong>Boss battle stories need special treatment</strong>. Epic-sized features require reconnaissance, preparation, and contingency planning.</p>
</li>
<li>
<p><strong>Critical failures are learning opportunities</strong>. When estimates go wrong, focus on updating your team's knowledge rather than assigning blame.</p>
</li>
<li>
<p><strong>Experience improves estimation accuracy over time</strong>, but diverse perspectives prevent expertise blind spots.</p>
</li>
<li>
<p><strong>Release planning is campaign arc design</strong>—balancing different types of work to create sustainable development rhythm.</p>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ready-to-roll">Ready to Roll<a href="https://risadams.com/blog/2025/09/24/the-sprint-planning-boss-battle-why-every-story-point-estimate-is-a-dice-roll#ready-to-roll" class="hash-link" aria-label="Direct link to Ready to Roll" title="Direct link to Ready to Roll" translate="no">​</a></h2>
<p>Next time your team gathers for sprint planning, remember you're not just estimating work—you're collaboratively assessing an adventure. Embrace the uncertainty, leverage your diverse skills, and remember that the best stories often emerge from the most unexpected dice rolls.</p>
<p>After all, if D&amp;D has taught us anything, it's that the most memorable adventures happen when the dice don't go according to plan. The same principle applies to software development. Sometimes the best features emerge from what initially looked like estimation failures.</p>
<p>So grab your dice (planning poker cards), check your character sheets (team skills and availability), and get ready to tackle your next quest (user story). The dungeon (codebase) awaits, and your party (team) is ready for whatever complexity emerges.</p>]]></content:encoded>
            <category>agile</category>
            <category>scrum</category>
            <category>sprint-planning</category>
            <category>estimation</category>
            <category>dungeons-and-dragons</category>
            <category>story-points</category>
            <category>metaphor</category>
            <category>humor</category>
        </item>
        <item>
            <title><![CDATA[The 14 Personality Types Every Scrum Master Encounters (And How to Work With Each One)]]></title>
            <link>https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team</link>
            <guid>https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team</guid>
            <pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Ever walked into a retrospective and immediately spotted the person frantically scribbling diagrams in the corner while someone else dominates the conversation? Or noticed how one team member always finds the potential pitfalls while another sees nothing but opportunity? Welcome to the beautiful chaos of agile team dynamics. Understanding these personality types isn't just helpful—it's essential for any Scrum Master who wants to facilitate effectively and unlock their team's full potential.]]></description>
            <content:encoded><![CDATA[<p>Ever walked into a retrospective and immediately spotted the person frantically scribbling diagrams in the corner while someone else dominates the conversation? Or noticed how one team member always finds the potential pitfalls while another sees nothing but opportunity? Welcome to the beautiful chaos of agile team dynamics. Understanding these personality types isn't just helpful—it's essential for any Scrum Master who wants to facilitate effectively and unlock their team's full potential.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-personality-awareness-matters-in-agile">Why Personality Awareness Matters in Agile<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#why-personality-awareness-matters-in-agile" class="hash-link" aria-label="Direct link to Why Personality Awareness Matters in Agile" title="Direct link to Why Personality Awareness Matters in Agile" translate="no">​</a></h2>
<p>Every personality trait is a gift. The challenge isn't changing people—it's learning when and how to leverage each unique perspective. As a Scrum Master, your job isn't to eliminate these differences but to orchestrate them like a conductor with a diverse symphony.</p>
<p>I've facilitated hundreds of Scrum events, and these 14 personality types show up consistently across teams, industries, and experience levels. Here's how to identify them, work with them, and turn their natural tendencies into team superpowers.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-14-personality-types-in-detail">The 14 Personality Types in Detail<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#the-14-personality-types-in-detail" class="hash-link" aria-label="Direct link to The 14 Personality Types in Detail" title="Direct link to The 14 Personality Types in Detail" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-the-watcher">1. The Watcher<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#1-the-watcher" class="hash-link" aria-label="Direct link to 1. The Watcher" title="Direct link to 1. The Watcher" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-watcher@320w.webp" alt="The Watcher" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> During sprint planning, they sit quietly taking everything in. They nod thoughtfully but rarely speak up unless directly asked.</p>
<p><strong>What it's like to work with them:</strong> Watchers are your hidden gems. They process information deeply and often have the most insightful observations—once you get them talking. They're excellent listeners who pick up on team dynamics others miss.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Deep processing and thoughtful insights</td><td>May withhold valuable perspectives</td></tr><tr><td>Excellent listeners and observers</td><td>Can appear disengaged to vocal team members</td></tr><tr><td>Notice subtle team dynamics</td><td>Might not speak up about important issues</td></tr><tr><td>Rarely contribute to meeting noise</td><td>May feel overlooked or undervalued</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Direct engagement:</strong> "Sarah, I'd love to hear your thoughts on this user story."</li>
<li><strong>Safe spaces:</strong> Create small breakout sessions where they're more comfortable speaking</li>
<li><strong>Written input:</strong> Use anonymous feedback tools or written exercises</li>
<li><strong>Pre-meeting prep:</strong> Give them the agenda ahead of time so they can formulate thoughts</li>
<li><strong>Acknowledge contributions:</strong> When they do speak, highlight the value of their input</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-the-energizer">2. The Energizer<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#2-the-energizer" class="hash-link" aria-label="Direct link to 2. The Energizer" title="Direct link to 2. The Energizer" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-energizer@320w.webp" alt="The Energizer" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> They have opinions on everything and aren't shy about sharing them. In daily standups, their updates somehow become team-wide discussions.</p>
<p><strong>What it's like to work with them:</strong> Energizers bring energy and aren't afraid to tackle difficult topics. They can jumpstart stalled conversations and often voice what others are thinking. The challenge is ensuring everyone gets heard.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>High energy and engagement</td><td>Can dominate conversations</td></tr><tr><td>Willing to address difficult topics</td><td>May inadvertently silence quieter members</td></tr><tr><td>Often voice shared concerns</td><td>Can derail focused discussions</td></tr><tr><td>Natural discussion starters</td><td>Might not notice others want to contribute</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Time boxing:</strong> "Great point, John. Let's get two more perspectives and then move forward."</li>
<li><strong>Redirect energy:</strong> Channel their enthusiasm into facilitating discussions for others</li>
<li><strong>Visual cues:</strong> Use hand signals or timers to manage speaking time</li>
<li><strong>Round-robin techniques:</strong> Structured approaches that ensure everyone speaks</li>
<li><strong>Private coaching:</strong> Help them recognize their impact on team dynamics</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-the-skeptic">3. The Skeptic<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#3-the-skeptic" class="hash-link" aria-label="Direct link to 3. The Skeptic" title="Direct link to 3. The Skeptic" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-skeptic@320w.webp" alt="The Skeptic" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> When the team gets excited about a new process or tool, they're the first to ask, "But what if this doesn't work?" They question assumptions and challenge decisions.</p>
<p><strong>What it's like to work with them:</strong> Skeptics are your quality assurance for ideas. They prevent groupthink and ensure decisions are thoroughly vetted. While they can slow things down, they save teams from costly mistakes.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Critical thinking and risk identification</td><td>Can appear negative or resistant</td></tr><tr><td>Prevents groupthink and bad decisions</td><td>May slow down decision-making</td></tr><tr><td>Asks important "what if" questions</td><td>Can demoralize optimistic team members</td></tr><tr><td>Ensures thorough consideration of options</td><td>Might resist necessary changes</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Reframe contributions:</strong> "Great catch, Mike. You're helping us identify risks early."</li>
<li><strong>Dedicated time:</strong> Allocate specific time for risk analysis and concerns</li>
<li><strong>Evidence-based responses:</strong> Address their concerns with data and examples</li>
<li><strong>Balance perspective:</strong> Pair them with optimists for comprehensive planning</li>
<li><strong>Channel skepticism:</strong> Direct their questioning toward process improvement</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-the-interruptor">4. The Interruptor<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#4-the-interruptor" class="hash-link" aria-label="Direct link to 4. The Interruptor" title="Direct link to 4. The Interruptor" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-interrupter@320w.webp" alt="The Interruptor" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> Someone's mid-sentence explaining a technical challenge when they jump in with, "Oh, I had that same issue last week!" The original speaker never finishes their thought.</p>
<p><strong>What it's like to work with them:</strong> Interruptors are usually enthusiastic and want to help immediately. Their eagerness to contribute is valuable, but their timing disrupts flow and can frustrate team members.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Enthusiastic and eager to help</td><td>Disrupts others' thought processes</td></tr><tr><td>Quick to make connections</td><td>Can appear disrespectful or impatient</td></tr><tr><td>High engagement in discussions</td><td>May miss important details by jumping ahead</td></tr><tr><td>Often has relevant experiences to share</td><td>Creates fragmented conversations</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Speaking tokens:</strong> Physical objects that indicate who has the floor</li>
<li><strong>Parking lot technique:</strong> "Hold that thought, we'll come back to it"</li>
<li><strong>Clear facilitation rules:</strong> Establish and enforce speaking protocols</li>
<li><strong>Channel enthusiasm:</strong> Give them specific roles like timekeeper or note-taker</li>
<li><strong>Private feedback:</strong> Help them understand the impact of interrupting</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-the-realist">5. The Realist<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#5-the-realist" class="hash-link" aria-label="Direct link to 5. The Realist" title="Direct link to 5. The Realist" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-realist@320w.webp" alt="The Realist" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> During sprint planning, while others are estimating a complex feature, they're already listing all the ways it could fail. "This is going to be a disaster," they mutter.</p>
<p><strong>What it's like to work with them:</strong> Realists are your early warning system. They see problems before they happen and force teams to plan for reality instead of best-case scenarios. The challenge is maintaining team morale.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Realistic risk assessment</td><td>Can demoralize team and stakeholders</td></tr><tr><td>Prevents over-optimistic planning</td><td>May create self-fulfilling prophecies</td></tr><tr><td>Identifies potential blockers early</td><td>Can resist trying new approaches</td></tr><tr><td>Grounds team in reality</td><td>Might focus too much on what won't work</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Structured risk analysis:</strong> Give them formal roles in risk identification</li>
<li><strong>Balance with solutions:</strong> "What would need to be true for this to succeed?"</li>
<li><strong>Acknowledge value:</strong> "Thanks for helping us plan more realistically"</li>
<li><strong>Pair strategically:</strong> Team them with optimists for balanced perspectives</li>
<li><strong>Focus on mitigation:</strong> Channel their concerns into contingency planning</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-the-storyteller">6. The Storyteller<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#6-the-storyteller" class="hash-link" aria-label="Direct link to 6. The Storyteller" title="Direct link to 6. The Storyteller" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-storyteller@320w.webp" alt="The Storyteller" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> You ask about yesterday's deployment issue, and suddenly you're hearing about their college internship, a similar bug from 2019, and their grandmother's advice about persistence.</p>
<p><strong>What it's like to work with them:</strong> Storytellers bring context and human connection to technical discussions. Their stories often contain valuable lessons and help team bonding. The trick is keeping sessions on track.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Brings context and historical perspective</td><td>Can derail focused discussions</td></tr><tr><td>Excellent at team bonding and rapport</td><td>May consume too much meeting time</td></tr><tr><td>Makes abstract concepts relatable</td><td>Stories might not always be relevant</td></tr><tr><td>Helps with knowledge sharing</td><td>Can lose audience attention</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Time boundaries:</strong> "That's a great story. Can you give us the two-minute version?"</li>
<li><strong>Relevance check:</strong> "How does this connect to our current challenge?"</li>
<li><strong>Designated story time:</strong> Create specific opportunities for sharing experiences</li>
<li><strong>Extract lessons:</strong> "What's the key takeaway from that experience?"</li>
<li><strong>Use their gift:</strong> Have them share stories during team building or retrospectives</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="7-the-optimist">7. The Optimist<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#7-the-optimist" class="hash-link" aria-label="Direct link to 7. The Optimist" title="Direct link to 7. The Optimist" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-optimist@320w.webp" alt="The Optimist" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> The deployment failed, the client is unhappy, and the deadline moved up. They cheerfully announce, "Well, at least now we know what doesn't work! This is a great learning opportunity!"</p>
<p><strong>What it's like to work with them:</strong> Optimists are the team's emotional stabilizers. They maintain morale during difficult times and help teams see possibilities instead of just problems. They might miss legitimate concerns in their enthusiasm.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Maintains positive team morale</td><td>May overlook serious problems</td></tr><tr><td>Sees opportunities in challenges</td><td>Can appear out of touch with reality</td></tr><tr><td>Encourages innovation and risk-taking</td><td>Might not adequately plan for obstacles</td></tr><tr><td>Helps team recover from setbacks</td><td>Can minimize others' legitimate concerns</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Reality checks:</strong> Pair them with skeptics for balanced assessment</li>
<li><strong>Acknowledge emotions:</strong> "I love your positive energy. Let's also address these concerns."</li>
<li><strong>Channel optimism:</strong> Have them lead recovery efforts after setbacks</li>
<li><strong>Balance perspectives:</strong> Ensure problems are fully explored before moving to solutions</li>
<li><strong>Leverage for change:</strong> Use their enthusiasm to drive adoption of new practices</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="8-the-analyst">8. The Analyst<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#8-the-analyst" class="hash-link" aria-label="Direct link to 8. The Analyst" title="Direct link to 8. The Analyst" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-analyst@320w.webp" alt="The Analyst" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> During retrospective, instead of discussing feelings about the sprint, they present a detailed spreadsheet showing velocity trends, defect rates, and correlation analysis.</p>
<p><strong>What it's like to work with them:</strong> Analysts bring rigor and evidence to decision-making. They prevent teams from making emotional choices and ensure improvements are measurable. They can slow down fast-moving discussions with their need for data.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Evidence-based decision making</td><td>Can slow down time-sensitive decisions</td></tr><tr><td>Identifies trends and patterns</td><td>May miss emotional/human factors</td></tr><tr><td>Ensures accountability with metrics</td><td>Can overwhelm team with too much data</td></tr><tr><td>Brings objectivity to discussions</td><td>Might delay action while gathering data</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Prepare data in advance:</strong> Give them metrics to analyze before meetings</li>
<li><strong>Time-box analysis:</strong> "Let's spend 10 minutes on the data, then decide"</li>
<li><strong>Balance with intuition:</strong> "What does the data tell us, and what does our gut say?"</li>
<li><strong>Leverage their skills:</strong> Have them track team improvement metrics</li>
<li><strong>Simplify presentations:</strong> Help them distill data into actionable insights</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="9-the-dreamer">9. The Dreamer<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#9-the-dreamer" class="hash-link" aria-label="Direct link to 9. The Dreamer" title="Direct link to 9. The Dreamer" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-dreamer@320w.webp" alt="The Dreamer" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> During backlog refinement, while others are focused on the next sprint's user stories, they're sketching out a revolutionary feature that could transform the entire product—in about two years.</p>
<p><strong>What it's like to work with them:</strong> Dreamers bring vision and innovation. They see beyond current constraints and inspire teams to think bigger. The challenge is grounding their ideas in current realities and timelines.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Innovative thinking and vision</td><td>Ideas may be impractical or unrealistic</td></tr><tr><td>Inspires team with possibilities</td><td>Can lose focus on immediate priorities</td></tr><tr><td>Excellent for brainstorming sessions</td><td>May not consider technical constraints</td></tr><tr><td>Brings creativity to problem-solving</td><td>Can frustrate practical team members</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Dedicated brainstorming time:</strong> Create specific spaces for big-picture thinking</li>
<li><strong>Ground in reality:</strong> "That's an amazing vision. What would the first step look like?"</li>
<li><strong>Capture ideas:</strong> Keep an "idea parking lot" for future consideration</li>
<li><strong>Pair with implementers:</strong> Team them with detail-oriented members</li>
<li><strong>Use for long-term planning:</strong> Include them in product roadmap discussions</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="10-the-timekeeper">10. The Timekeeper<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#10-the-timekeeper" class="hash-link" aria-label="Direct link to 10. The Timekeeper" title="Direct link to 10. The Timekeeper" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-timekeeper@320w.webp" alt="The Timekeeper" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> Three minutes into daily standup, they're tapping their watch. "We've got 12 more people to go and only 7 minutes left," they announce, checking their phone for the third time.</p>
<p><strong>What it's like to work with them:</strong> Timekeepers are essential for maintaining meeting discipline and respecting everyone's schedule. They prevent discussions from wandering endlessly but might rush important conversations.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Keeps meetings on track</td><td>May rush important discussions</td></tr><tr><td>Respects team members' time</td><td>Can appear impatient or inflexible</td></tr><tr><td>Ensures agenda completion</td><td>Might interrupt natural flow of conversation</td></tr><tr><td>Helps with meeting discipline</td><td>Could prioritize time over outcomes</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Official timekeeper role:</strong> Formalize their natural tendency</li>
<li><strong>Flexible time boxes:</strong> "We're running over. Should we extend or table this?"</li>
<li><strong>Balance efficiency with effectiveness:</strong> Sometimes important discussions need time</li>
<li><strong>Prepare alternatives:</strong> Have backup plans for when discussions run long</li>
<li><strong>Acknowledge their value:</strong> "Thanks for keeping us disciplined. Let's invest 5 more minutes here."</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="11-the-doodler">11. The Doodler<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#11-the-doodler" class="hash-link" aria-label="Direct link to 11. The Doodler" title="Direct link to 11. The Doodler" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-doodler@320w.webp" alt="The Doodler" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> While everyone else is taking notes in text, they're creating elaborate diagrams, mind maps, and visual representations of the discussion. Their notebook looks like an art project.</p>
<p><strong>What it's like to work with them:</strong> Doodlers process and express information visually. They often see connections and patterns others miss and can make complex concepts accessible through drawings.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Visual processing reveals new insights</td><td>May appear distracted or disengaged</td></tr><tr><td>Makes complex concepts accessible</td><td>Visual style might not resonate with all team members</td></tr><tr><td>Creates engaging meeting artifacts</td><td>Can take time to create polished visuals</td></tr><tr><td>Sees patterns and connections</td><td>Might focus on format over content</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Provide visual tools:</strong> Whiteboards, sticky notes, digital drawing tools</li>
<li><strong>Encourage sharing:</strong> "Can you show us how you're visualizing this?"</li>
<li><strong>Use their outputs:</strong> Digital copies of their diagrams for team reference</li>
<li><strong>Pair with verbalists:</strong> Combine visual and verbal communication styles</li>
<li><strong>Create visual spaces:</strong> Use tools like Miro or Mural for collaborative drawing</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="12-the-innovator">12. The Innovator<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#12-the-innovator" class="hash-link" aria-label="Direct link to 12. The Innovator" title="Direct link to 12. The Innovator" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-innovater@320w.webp" alt="The Innovator" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> Every problem has a technological solution. "We should try this new AI tool for sprint planning!" or "I found this automation script that could optimize our workflow."</p>
<p><strong>What it's like to work with them:</strong> Innovators bring innovation and efficiency through tools. They're often early adopters who can streamline processes and solve technical challenges. They might focus too much on tools over outcomes.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Brings innovation and efficiency</td><td>May prioritize tools over goals</td></tr><tr><td>Excellent problem-solving with technology</td><td>Can overwhelm team with too many new tools</td></tr><tr><td>Often early adopter of useful solutions</td><td>Might neglect human/process factors</td></tr><tr><td>Can automate repetitive tasks</td><td>Could create tool complexity without clear benefit</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Evaluate impact:</strong> "How would this tool improve our team outcomes?"</li>
<li><strong>Pilot before adoption:</strong> Test new tools with small experiments</li>
<li><strong>Focus on problems first:</strong> "What problem are we trying to solve?"</li>
<li><strong>Include the team:</strong> Get buy-in before implementing new tools</li>
<li><strong>Leverage their expertise:</strong> Have them research and recommend tools for specific challenges</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="13-the-devils-advocate">13. The Devil's Advocate<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#13-the-devils-advocate" class="hash-link" aria-label="Direct link to 13. The Devil's Advocate" title="Direct link to 13. The Devil's Advocate" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-devils-advocate@320w.webp" alt="The Devil's Advocate" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> The team reaches consensus on an approach, and they immediately say, "Well, what if we're completely wrong about this?" They argue the opposite position just to test the decision.</p>
<p><strong>What it's like to work with them:</strong> Devil's advocates ensure thorough exploration of decisions. They prevent groupthink and strengthen arguments by challenging them. They can be exhausting if overused.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Prevents groupthink and weak decisions</td><td>Can be exhausting and frustrating</td></tr><tr><td>Ensures thorough exploration of options</td><td>May delay decisions unnecessarily</td></tr><tr><td>Strengthens arguments through challenge</td><td>Can appear argumentative or negative</td></tr><tr><td>Identifies blind spots in reasoning</td><td>Might challenge for the sake of challenging</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Use strategically:</strong> "Let's have someone argue the opposite position"</li>
<li><strong>Time-box challenges:</strong> Limit devil's advocate time to prevent exhaustion</li>
<li><strong>Rotate the role:</strong> Don't let one person always be the contrarian</li>
<li><strong>Focus on strengthening:</strong> "How does this challenge make our decision better?"</li>
<li><strong>Acknowledge value:</strong> "Thanks for helping us stress-test this idea"</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="14-the-mediator">14. The Mediator<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#14-the-mediator" class="hash-link" aria-label="Direct link to 14. The Mediator" title="Direct link to 14. The Mediator" translate="no">​</a></h3>
<img src="https://img.risadams.com/personality-the-mediator@320w.webp" alt="The Mediator" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p><strong>The Scenario:</strong> When tensions rise between team members or disagreements get heated, they naturally step in with, "I think I see both perspectives here..." They help find common ground and de-escalate conflicts.</p>
<p><strong>What it's like to work with them:</strong> Mediators are your secret weapon for team harmony. They sense emotional undercurrents, build bridges between opposing viewpoints, and help maintain psychological safety. They're absolutely invaluable.</p>
<table><thead><tr><th>Strengths</th><th>Weaknesses</th></tr></thead><tbody><tr><td>Maintains team harmony and psychological safety</td><td>May avoid necessary conflicts</td></tr><tr><td>Excellent at finding common ground</td><td>Could suppress important disagreements</td></tr><tr><td>Reads emotional undercurrents well</td><td>Might take on too much emotional burden</td></tr><tr><td>Helps de-escalate tensions</td><td>Can be overwhelmed by team conflicts</td></tr></tbody></table>
<p><strong>Scrum Master Strategy:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Partner with them:</strong> Work together on team dynamics</li>
<li><strong>Recognize their contributions:</strong> "Thank you for helping us find common ground"</li>
<li><strong>Support their wellbeing:</strong> Check that they're not carrying too much emotional load</li>
<li><strong>Develop their skills:</strong> Help them learn when conflict is productive</li>
<li><strong>Share the load:</strong> Don't let them become the only emotional caretaker</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="working-with-mixed-personality-teams">Working with Mixed Personality Teams<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#working-with-mixed-personality-teams" class="hash-link" aria-label="Direct link to Working with Mixed Personality Teams" title="Direct link to Working with Mixed Personality Teams" translate="no">​</a></h2>
<p>The real magic happens when you understand how these personalities interact:</p>
<p><strong>Powerful Combinations:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Analyst + Dreamer:</strong> Data-driven innovation</li>
<li><strong>Skeptic + Optimist:</strong> Realistic planning with positive outlook</li>
<li><strong>Vocal + Watcher:</strong> Natural mentoring relationships</li>
<li><strong>Timekeeper + Storyteller:</strong> Efficient meetings with rich context</li>
</ul>
<p><strong>Potential Conflicts:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Interruptor + Watcher:</strong> The quiet ones get silenced</li>
<li><strong>Realist + Optimist:</strong> Constant tension over outlook</li>
<li><strong>Innovator + Analyst:</strong> Tool paralysis from over-analysis</li>
<li><strong>Devil's Advocate + Everyone:</strong> Exhaustion from constant challenge</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="practical-facilitation-strategies">Practical Facilitation Strategies<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#practical-facilitation-strategies" class="hash-link" aria-label="Direct link to Practical Facilitation Strategies" title="Direct link to Practical Facilitation Strategies" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="meeting-design">Meeting Design<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#meeting-design" class="hash-link" aria-label="Direct link to Meeting Design" title="Direct link to Meeting Design" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Opening rounds:</strong> Get input from Watchers before Vocals dominate</li>
<li><strong>Time boxes:</strong> Satisfy Timekeepers while allowing for deep discussion</li>
<li><strong>Visual elements:</strong> Engage Doodlers and make concepts accessible</li>
<li><strong>Data preparation:</strong> Have metrics ready for Analysts</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="conflict-resolution">Conflict Resolution<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#conflict-resolution" class="hash-link" aria-label="Direct link to Conflict Resolution" title="Direct link to Conflict Resolution" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Use Mediators:</strong> Let them help find common ground</li>
<li><strong>Separate exploration from decision:</strong> Satisfy Devil's Advocates without endless debate</li>
<li><strong>Address Realist concerns:</strong> Create space for risk discussion</li>
<li><strong>Channel Optimist energy:</strong> Use them to maintain morale during difficult conversations</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="decision-making">Decision Making<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#decision-making" class="hash-link" aria-label="Direct link to Decision Making" title="Direct link to Decision Making" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Gather input systematically:</strong> Ensure Watchers contribute</li>
<li><strong>Provide data:</strong> Support Analysts' need for evidence</li>
<li><strong>Test assumptions:</strong> Use Skeptics and Devil's Advocates strategically</li>
<li><strong>Visualize options:</strong> Help Doodlers and visual thinkers participate</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="building-your-personality-radar">Building Your Personality Radar<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#building-your-personality-radar" class="hash-link" aria-label="Direct link to Building Your Personality Radar" title="Direct link to Building Your Personality Radar" translate="no">​</a></h2>
<p>As a Scrum Master, developing your ability to quickly identify these personality types becomes a superpower. Here's what to watch for:</p>
<p><strong>In the first week:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Who speaks first, last, or not at all?</li>
<li>Who asks questions vs. who provides answers?</li>
<li>Who looks at their phone/watch during meetings?</li>
<li>Who takes notes visually vs. textually?</li>
</ul>
<p><strong>Over the first month:</strong></p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>What patterns emerge in their contributions?</li>
<li>How do they respond to conflict or disagreement?</li>
<li>What energizes vs. drains each person?</li>
<li>Who naturally gravitates toward which roles?</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways-for-scrum-masters">Key Takeaways for Scrum Masters<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#key-takeaways-for-scrum-masters" class="hash-link" aria-label="Direct link to Key Takeaways for Scrum Masters" title="Direct link to Key Takeaways for Scrum Masters" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Every personality is a gift:</strong> The goal isn't to change people but to orchestrate their natural tendencies</li>
<li><strong>Diversity drives innovation:</strong> Teams with varied personality types make better decisions and solve problems more creatively</li>
<li><strong>Facilitation is orchestration:</strong> Your job is conducting the symphony, not playing every instrument</li>
<li><strong>Context matters:</strong> The same personality trait can be a strength or weakness depending on the situation</li>
<li><strong>Adapt your style:</strong> Great Scrum Masters adjust their facilitation approach based on team composition</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-bottom-line">The Bottom Line<a href="https://risadams.com/blog/2025/09/07/personaity-types-on-an-agile-team#the-bottom-line" class="hash-link" aria-label="Direct link to The Bottom Line" title="Direct link to The Bottom Line" translate="no">​</a></h2>
<p>Understanding these 14 personality types isn't about putting people in boxes—it's about unlocking the unique value each person brings to your team. The Watcher's insights, the Energizer's energy, the Skeptic's risk awareness, and the Mediator's harmony all contribute to a stronger, more effective agile team.</p>
<p>Your role as Scrum Master isn't to eliminate these differences but to create an environment where each personality type can contribute their best work. When you master this, you'll find that your "difficult" team members become your most valuable assets.</p>
<p>Every personality trait is indeed a gift. Great Scrum Masters know when and how to unwrap each one.</p>]]></content:encoded>
            <category>scrum-master</category>
            <category>team-dynamics</category>
            <category>facilitation</category>
            <category>personality</category>
            <category>leadership</category>
        </item>
        <item>
            <title><![CDATA[Scrumgeons & Dragons: Why Your Development Team Is Just a Really Organized D&D Party]]></title>
            <link>https://risadams.com/blog/2025/08/28/scrumgeons-dragons</link>
            <guid>https://risadams.com/blog/2025/08/28/scrumgeons-dragons</guid>
            <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Ever notice how a well-run Scrum team feels suspiciously like a D&D campaign? The Scrum Master guides the narrative, developers bring specialized skills to overcome challenges, and everyone rolls dice (story points) to see how badly they've underestimated the complexity of "simple" tasks. After years of facilitating sprints and rolling d20s, I've realized these frameworks aren't just similar—they're practically the same game with different terminology.]]></description>
            <content:encoded><![CDATA[<p>Ever notice how a well-run Scrum team feels suspiciously like a D&amp;D campaign? The Scrum Master guides the narrative, developers bring specialized skills to overcome challenges, and everyone rolls dice (story points) to see how badly they've underestimated the complexity of "simple" tasks. After years of facilitating sprints and rolling d20s, I've realized these frameworks aren't just similar—they're practically the same game with different terminology.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="welcome-to-the-party">Welcome to the Party<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#welcome-to-the-party" class="hash-link" aria-label="Direct link to Welcome to the Party" title="Direct link to Welcome to the Party" translate="no">​</a></h2>
<p>Picture this: You're sitting around a table with your closest colleagues, armed with nothing but your wits, some collaborative planning, and an unhealthy obsession with numerical estimates. Sound familiar? Whether you're planning a sprint or plotting to defeat a dragon, the fundamentals remain the same—teamwork, clear communication, and the occasional spectacular failure that somehow makes the victory sweeter.</p>
<p>The parallels between Scrum and D&amp;D run deeper than you might think. Both frameworks emphasize collaborative storytelling, where the outcome depends on everyone contributing their unique skills toward a common goal. Both require a facilitator who keeps things moving without dictating every action. And both involve a lot more improvisation than anyone wants to admit.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-scrum-master-as-dungeon-master">The Scrum Master as Dungeon Master<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-scrum-master-as-dungeon-master" class="hash-link" aria-label="Direct link to The Scrum Master as Dungeon Master" title="Direct link to The Scrum Master as Dungeon Master" translate="no">​</a></h2>
<p>Let's start with the most obvious parallel: the Scrum Master is absolutely the Dungeon Master of your development team; you're not there to tell people what to do or solve their problems for them. Instead, you set the stage, facilitate the experience, and occasionally throw curveballs to keep things interesting.</p>
<p>A good DM doesn't railroad the party into predetermined solutions. They present challenges, provide context, and let the players figure out creative approaches. Similarly, a good Scrum Master doesn't micromanage the team's technical decisions. You facilitate conversations, remove impediments, and trust your party—er, team—to find the best path forward.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-art-of-gentle-nudging">The Art of Gentle Nudging<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-art-of-gentle-nudging" class="hash-link" aria-label="Direct link to The Art of Gentle Nudging" title="Direct link to The Art of Gentle Nudging" translate="no">​</a></h3>
<p>Both roles require the same delicate balance of guidance and freedom. When your D&amp;D party is about to walk into an obvious trap, you might describe the suspicious-looking floor tiles a bit more dramatically. When your dev team is heading toward a technical dead end, you ask probing questions during standup or suggest a quick spike to validate assumptions.</p>
<p>The key is knowing when to intervene and when to let people learn from experience. Sometimes the rogue needs to trigger that trap to understand why perception checks matter. Sometimes the team needs to burn a sprint on technical debt to realize why refactoring estimates aren't padding—they're essential.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="managing-the-unexpected">Managing the Unexpected<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#managing-the-unexpected" class="hash-link" aria-label="Direct link to Managing the Unexpected" title="Direct link to Managing the Unexpected" translate="no">​</a></h3>
<p>Every DM has stories about players doing something completely unexpected that derails the entire session plan. Sound familiar? How many times have you watched a team discover a critical dependency during sprint planning that nobody saw coming?</p>
<p>The best DMs and Scrum Masters share the same superpower: they can adapt on the fly without making the experience feel chaotic. When your carefully planned dungeon gets bypassed by a creative use of misty step, you don't panic—you roll with it and adjust the next encounter. When your sprint goal gets threatened by an urgent production bug, you don't abandon Scrum principles—you facilitate a quick team discussion about priorities and trade-offs.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="character-classes-in-development">Character Classes in Development<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#character-classes-in-development" class="hash-link" aria-label="Direct link to Character Classes in Development" title="Direct link to Character Classes in Development" translate="no">​</a></h2>
<p>Every effective D&amp;D party needs diverse skills, and every effective development team needs specialized roles. The parallels are almost too perfect:</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-frontend-developer-bard">The Frontend Developer (Bard)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-frontend-developer-bard" class="hash-link" aria-label="Direct link to The Frontend Developer (Bard)" title="Direct link to The Frontend Developer (Bard)" translate="no">​</a></h3>
<img src="https://img.risadams.com/frontend-bard@320w.webp" alt="Frontend Bard" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>Charismatic, creative, and somehow manages to make everything look effortless even when it's held together by CSS flexbox and prayer. Frontend developers, like bards, are the face of the party. They're the ones users actually interact with, and they have this magical ability to make complex interactions feel intuitive.</p>
<p>Both roles require a unique blend of technical skill and empathy. A good bard reads the room and adjusts their performance accordingly. A good frontend developer understands user psychology and crafts experiences that feel natural. They're also usually the ones who have to deal with the most unpredictable external factors—whether that's a hostile crowd or a browser update that breaks everything.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-backend-developer-wizard">The Backend Developer (Wizard)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-backend-developer-wizard" class="hash-link" aria-label="Direct link to The Backend Developer (Wizard)" title="Direct link to The Backend Developer (Wizard)" translate="no">​</a></h3>
<img src="https://img.risadams.com/backend-wizard@320w.webp" alt="Backend Wizard" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>Methodical, powerful, and slightly obsessed with understanding the underlying mechanics of everything. Backend developers approach problems like wizards approach spellcasting—with careful preparation, deep understanding of the rules, and occasionally devastating results when things go wrong.</p>
<p>Both roles involve a lot of behind-the-scenes complexity that others don't see. The wizard's spell preparation is like database optimization—crucial for success, but not particularly glamorous. When done well, it looks effortless. When done poorly, everyone notices immediately.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-devops-engineer-cleric">The DevOps Engineer (Cleric)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-devops-engineer-cleric" class="hash-link" aria-label="Direct link to The DevOps Engineer (Cleric)" title="Direct link to The DevOps Engineer (Cleric)" translate="no">​</a></h3>
<img src="https://img.risadams.com/devops-cleric@320w.webp" alt="DevOps Cleric" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>The unsung hero who keeps everyone alive and functioning. DevOps engineers, like clerics, spend most of their time on essential but unglamorous tasks—maintaining CI/CD pipelines, monitoring system health, and swooping in with healing spells (hotfixes) when everything goes sideways.</p>
<p>Both roles require a service mindset and the ability to stay calm under pressure. When the production environment is on fire, you want someone who's prepared, methodical, and has a few resurrection spells in their back pocket.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-qa-engineer-ranger">The QA Engineer (Ranger)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-qa-engineer-ranger" class="hash-link" aria-label="Direct link to The QA Engineer (Ranger)" title="Direct link to The QA Engineer (Ranger)" translate="no">​</a></h3>
<img src="https://img.risadams.com/qa-ranger@320w.webp" alt="QA Ranger" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>Alert, detail-oriented, and surprisingly good at finding things other people miss. QA engineers approach testing like rangers approach tracking—they notice the small details that reveal bigger problems. That edge case everyone else missed? They spotted it immediately.</p>
<p>Both roles require patience, persistence, and the ability to think like an adversary. Rangers track monsters by understanding their behavior patterns. QA engineers find bugs by understanding how users actually interact with systems (spoiler: it's never how developers expect).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-tech-lead-paladin">The Tech Lead (Paladin)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-tech-lead-paladin" class="hash-link" aria-label="Direct link to The Tech Lead (Paladin)" title="Direct link to The Tech Lead (Paladin)" translate="no">​</a></h3>
<img src="https://img.risadams.com/tech-lead-paladin@320w.webp" alt="Tech Lead Paladin" style="float:right;margin-left:1rem;width:220px" decoding="async" loading="lazy">
<p>The moral compass of the team, combining technical expertise with leadership responsibility. Tech leads, like paladins, are expected to uphold standards while also charging into the most dangerous situations. They're the ones who volunteer to refactor the legacy codebase because someone has to do it.</p>
<p>Both roles involve making tough decisions about resource allocation and priorities. When do you take on technical debt to meet a deadline? When do you insist on proper testing despite time pressure? These are fundamentally ethical decisions that require both expertise and judgment.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-product-owner-warlock">The Product Owner (Warlock)<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-product-owner-warlock" class="hash-link" aria-label="Direct link to The Product Owner (Warlock)" title="Direct link to The Product Owner (Warlock)" translate="no">​</a></h3>
<img src="https://img.risadams.com/po-warlock@320w.webp" alt="Product Owner Warlock" style="float:left;margin-right:1rem;width:220px" decoding="async" loading="lazy">
<p>Charismatic and influential, but their power comes from serving a higher authority—their patron. Product owners, like warlocks, must balance the demands of their stakeholders (the patron) with the needs of their party. They make deals and compromises that others don't always understand, wielding authority that sometimes feels mysterious to the development team.</p>
<p>Both roles involve managing competing interests and translating abstract demands into concrete action. The warlock channels their patron's power to support the party's success. The product owner channels stakeholder vision and user needs to guide the team's efforts. When things go wrong, both face the uncomfortable reality that their power depends on maintaining relationships with entities that don't always have the team's best interests at heart.</p>
<p>The best product owners, like the best warlocks, find ways to use their patron relationship to empower their team rather than constrain them. They negotiate for resources, shield the team from conflicting demands, and translate business objectives into clear, achievable goals.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="story-points-the-ultimate-d20-system">Story Points: The Ultimate D20 System<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#story-points-the-ultimate-d20-system" class="hash-link" aria-label="Direct link to Story Points: The Ultimate D20 System" title="Direct link to Story Points: The Ultimate D20 System" translate="no">​</a></h2>
<p>Here's where the metaphor gets really fun. Story points are basically dice rolls in disguise. Think about it—you're estimating uncertainty using a limited set of numbers, and everyone knows the actual outcome will involve some random factors you can't predict.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-fibonacci-sequence-vs-polyhedral-dice">The Fibonacci Sequence vs. Polyhedral Dice<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-fibonacci-sequence-vs-polyhedral-dice" class="hash-link" aria-label="Direct link to The Fibonacci Sequence vs. Polyhedral Dice" title="Direct link to The Fibonacci Sequence vs. Polyhedral Dice" translate="no">​</a></h3>
<p>Scrum teams typically use Fibonacci numbers (1, 2, 3, 5, 8, 13) for story points, while D&amp;D uses various dice (d4, d6, d8, d10, d12, d20). Both systems acknowledge that precision decreases as numbers get larger. You can reasonably estimate the difference between a 1-point and 2-point story, just like you can predict a d4 roll better than a d20.</p>
<p>The key insight is that both systems force you to think in ranges rather than false precision. No experienced DM asks "How exactly much damage does 1d8+3 do?" They know it's somewhere between 4 and 11, and that range is the useful information. Similarly, a 5-point story isn't exactly 2.5 times bigger than a 2-point story—it's just meaningfully more complex.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="planning-poker-as-collaborative-dice-rolling">Planning Poker as Collaborative Dice Rolling<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#planning-poker-as-collaborative-dice-rolling" class="hash-link" aria-label="Direct link to Planning Poker as Collaborative Dice Rolling" title="Direct link to Planning Poker as Collaborative Dice Rolling" translate="no">​</a></h3>
<p>Planning poker sessions are essentially collaborative dice rolling. Everyone reveals their estimate simultaneously, just like everyone rolls dice at the same time for group checks. When estimates diverge significantly, you discuss different perspectives—just like when one player rolls a natural 20 while another rolls a 1 on the same perception check.</p>
<p>The magic happens in the discussion, not the numbers. When the senior developer estimates 2 points and the junior developer estimates 8, that conversation reveals assumptions, hidden complexity, and knowledge gaps that matter more than the final estimate.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="critical-failures-and-technical-debt">Critical Failures and Technical Debt<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#critical-failures-and-technical-debt" class="hash-link" aria-label="Direct link to Critical Failures and Technical Debt" title="Direct link to Critical Failures and Technical Debt" translate="no">​</a></h3>
<p>Every D&amp;D player knows the dread of rolling a natural 1 at the worst possible moment. Development teams know the same feeling when a "simple" feature change breaks the entire authentication system. These critical failures aren't bugs in the system—they're features that force you to deal with underlying problems you've been avoiding.</p>
<p>Technical debt is like accumulating injuries in a long campaign. You can power through for a while, but eventually those -2 penalties to all rolls start adding up. The smart play is to take time for healing and equipment maintenance before attempting the boss fight.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sprint-planning-as-session-zero">Sprint Planning as Session Zero<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#sprint-planning-as-session-zero" class="hash-link" aria-label="Direct link to Sprint Planning as Session Zero" title="Direct link to Sprint Planning as Session Zero" translate="no">​</a></h2>
<p>Every good D&amp;D campaign starts with Session Zero—a planning meeting where everyone discusses expectations, boundaries, and the type of story they want to tell together. Sprint planning serves the same function for development teams.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="setting-the-scene">Setting the Scene<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#setting-the-scene" class="hash-link" aria-label="Direct link to Setting the Scene" title="Direct link to Setting the Scene" translate="no">​</a></h3>
<p>In Session Zero, the DM describes the campaign setting and tone. In sprint planning, the product owner provides context about business goals and user needs. Both sessions establish the framework for collaborative decision-making.</p>
<p>The key is getting everyone aligned on priorities and constraints before diving into specifics. What does "done" look like? What risks are we willing to accept? What happens if we encounter unexpected complications?</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="character-creation-vs-capacity-planning">Character Creation vs. Capacity Planning<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#character-creation-vs-capacity-planning" class="hash-link" aria-label="Direct link to Character Creation vs. Capacity Planning" title="Direct link to Character Creation vs. Capacity Planning" translate="no">​</a></h3>
<p>Session Zero includes character creation, where players choose abilities and discuss how their characters will work together. Sprint planning includes capacity discussions, where team members consider their availability and how they'll collaborate on complex features.</p>
<p>Both processes require honest assessment of strengths, weaknesses, and dependencies. The wizard shouldn't plan to be the party's primary damage dealer, and the frontend developer shouldn't take on database optimization tasks just because they're curious about it.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="daily-standups-as-quick-check-ins">Daily Standups as Quick Check-ins<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#daily-standups-as-quick-check-ins" class="hash-link" aria-label="Direct link to Daily Standups as Quick Check-ins" title="Direct link to Daily Standups as Quick Check-ins" translate="no">​</a></h2>
<p>D&amp;D parties do quick check-ins constantly: "What's your AC again?" "How many spell slots do you have left?" "Can you see the entrance from where you're standing?" Daily standups serve the same function—quick status updates that help everyone coordinate effectively.</p>
<p>The format even maps perfectly:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>What did you do yesterday?</strong> → What happened since our last check-in?</li>
<li><strong>What will you do today?</strong> → What's your plan for this turn/session?</li>
<li><strong>Any blockers?</strong> → Are you stunned, paralyzed, or otherwise unable to act effectively?</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="keeping-it-quick-and-relevant">Keeping It Quick and Relevant<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#keeping-it-quick-and-relevant" class="hash-link" aria-label="Direct link to Keeping It Quick and Relevant" title="Direct link to Keeping It Quick and Relevant" translate="no">​</a></h3>
<p>Good standups, like good check-ins during combat, focus on information that affects team coordination. You don't need a detailed recap of every action—just the stuff that impacts what others are doing.</p>
<p>The anti-pattern is the same in both contexts: one person dominating the conversation with irrelevant details while everyone else mentally checks out. Whether it's describing every dice roll in excruciating detail or giving a complete technical breakdown of a simple bug fix, the solution is the same—keep it brief and relevant.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="retrospectives-as-campaign-debriefs">Retrospectives as Campaign Debriefs<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#retrospectives-as-campaign-debriefs" class="hash-link" aria-label="Direct link to Retrospectives as Campaign Debriefs" title="Direct link to Retrospectives as Campaign Debriefs" translate="no">​</a></h2>
<p>After every major campaign arc, good DMs facilitate a debrief session. What worked well? What felt frustrating? How can we make the next arc even better? Sound familiar?</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="creating-safe-spaces-for-honest-feedback">Creating Safe Spaces for Honest Feedback<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#creating-safe-spaces-for-honest-feedback" class="hash-link" aria-label="Direct link to Creating Safe Spaces for Honest Feedback" title="Direct link to Creating Safe Spaces for Honest Feedback" translate="no">​</a></h3>
<p>Both retrospectives and campaign debriefs require psychological safety. Players need to feel comfortable saying "That puzzle was too obscure" or "I felt like my character wasn't useful in that encounter." Team members need to feel safe saying "That deployment process is too manual" or "I don't understand how this feature is supposed to work."</p>
<p>The facilitator's job is to create an environment where constructive criticism feels supportive rather than personal. Focus on systems and processes, not individual performance. The goal is improving the experience for everyone, not assigning blame.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="actionable-improvements">Actionable Improvements<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#actionable-improvements" class="hash-link" aria-label="Direct link to Actionable Improvements" title="Direct link to Actionable Improvements" translate="no">​</a></h3>
<p>The best retrospectives, like the best campaign debriefs, generate specific, actionable changes. "Communicate better" is as useless as "make encounters more balanced." Instead, you want concrete commitments: "Let's add a 5-minute technical discussion to our sprint planning" or "I'll prepare backup characters in case someone gets permanently killed."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="dealing-with-scope-creep-and-feature-creep">Dealing with Scope Creep and Feature Creep<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#dealing-with-scope-creep-and-feature-creep" class="hash-link" aria-label="Direct link to Dealing with Scope Creep and Feature Creep" title="Direct link to Dealing with Scope Creep and Feature Creep" translate="no">​</a></h2>
<p>Every DM has dealt with players who want to do everything: "Can I also search for traps while I'm picking the lock? And maybe listen at the door? Oh, and I want to cast guidance on myself first." Every Scrum Master has dealt with stakeholders who want to expand story scope: "While we're updating the login screen, can we also redesign the dashboard? And maybe add that reporting feature we discussed last month?"</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-art-of-creative-constraint">The Art of Creative Constraint<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-art-of-creative-constraint" class="hash-link" aria-label="Direct link to The Art of Creative Constraint" title="Direct link to The Art of Creative Constraint" translate="no">​</a></h3>
<p>The solution in both cases involves creative constraint. Good DMs establish clear boundaries about what can be accomplished in a single turn, then help players find creative ways to achieve their goals within those limits. Good Scrum Masters help stakeholders understand sprint capacity, then facilitate discussions about priorities and trade-offs.</p>
<p>The key is reframing limitations as creative challenges rather than arbitrary restrictions. "You can't do everything this turn, but here's how you could set up an awesome combo for next turn" feels very different from "No, you can't do that."</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="technical-spikes-as-side-quests">Technical Spikes as Side Quests<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#technical-spikes-as-side-quests" class="hash-link" aria-label="Direct link to Technical Spikes as Side Quests" title="Direct link to Technical Spikes as Side Quests" translate="no">​</a></h2>
<p>Sometimes your team needs to take a sprint to investigate a technology, validate an approach, or reduce uncertainty about a complex feature. These technical spikes are like side quests—they don't directly advance the main story, but they provide valuable knowledge and resources for future challenges.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="managing-side-quest-syndrome">Managing Side Quest Syndrome<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#managing-side-quest-syndrome" class="hash-link" aria-label="Direct link to Managing Side Quest Syndrome" title="Direct link to Managing Side Quest Syndrome" translate="no">​</a></h3>
<p>The danger with side quests is the same as the danger with technical spikes—they can become procrastination disguised as productive work. Players might spend three sessions exploring an interesting but irrelevant dungeon. Teams might spend two sprints "researching" a technology decision that could be validated with a half-day proof of concept.</p>
<p>The key is setting clear objectives and timeboxes. What specific questions are we trying to answer? What will we do with the information we gather? How will we know when we've learned enough to make a decision?</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="production-incidents-as-boss-fights">Production Incidents as Boss Fights<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#production-incidents-as-boss-fights" class="hash-link" aria-label="Direct link to Production Incidents as Boss Fights" title="Direct link to Production Incidents as Boss Fights" translate="no">​</a></h2>
<p>When everything goes sideways and the production environment is on fire, your team transforms into a coordinated crisis response unit. Everyone brings their specialized skills to bear on a complex, high-stakes challenge. The frontend developer investigates user-facing symptoms, the backend developer digs into server logs, the DevOps engineer checks infrastructure metrics, and the Scrum Master coordinates communication with stakeholders.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="initiative-order-and-incident-response">Initiative Order and Incident Response<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#initiative-order-and-incident-response" class="hash-link" aria-label="Direct link to Initiative Order and Incident Response" title="Direct link to Initiative Order and Incident Response" translate="no">​</a></h3>
<p>D&amp;D combat uses initiative order to manage complex situations where everyone wants to act simultaneously. Incident response benefits from similar coordination—clear communication about who's investigating what, regular status updates, and a single person coordinating the overall response.</p>
<p>The goal isn't rigid hierarchy—it's preventing duplicate effort and ensuring critical tasks don't fall through the cracks. The person with the best context for a particular system should take point on investigating that area, regardless of their official title.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="learning-from-near-death-experiences">Learning from Near-Death Experiences<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#learning-from-near-death-experiences" class="hash-link" aria-label="Direct link to Learning from Near-Death Experiences" title="Direct link to Learning from Near-Death Experiences" translate="no">​</a></h3>
<p>Both boss fights and production incidents provide valuable learning opportunities. After defeating a difficult encounter, good parties debrief what worked, what didn't, and how they can improve their coordination. After resolving a major incident, good teams conduct blameless postmortems to understand root causes and prevent similar issues.</p>
<p>The key insight is that close calls often reveal system weaknesses better than complete failures. When you barely survive a encounter or barely avoid a complete outage, you've found the edge of your capabilities—and that's valuable information for improving your defenses.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="building-team-culture-through-shared-experience">Building Team Culture Through Shared Experience<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#building-team-culture-through-shared-experience" class="hash-link" aria-label="Direct link to Building Team Culture Through Shared Experience" title="Direct link to Building Team Culture Through Shared Experience" translate="no">​</a></h2>
<p>Both D&amp;D campaigns and development teams create strong cultures through shared experiences—especially shared challenges. The stories you tell afterward ("Remember when we spent three hours debugging that CSS issue that turned out to be a missing semicolon?") become part of the team's identity.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="inside-jokes-and-shared-vocabulary">Inside Jokes and Shared Vocabulary<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#inside-jokes-and-shared-vocabulary" class="hash-link" aria-label="Direct link to Inside Jokes and Shared Vocabulary" title="Direct link to Inside Jokes and Shared Vocabulary" translate="no">​</a></h3>
<p>Every long-running D&amp;D group develops inside jokes and references that reinforce group identity. Development teams do the same thing—whether it's naming servers after fantasy characters, using specific emoji in Slack channels, or referring to particularly notorious bugs by memorable names.</p>
<p>This shared vocabulary serves an important function beyond just team bonding. It creates efficient communication shortcuts that help the team coordinate more effectively. When someone says "This feels like another widget scenario," everyone immediately understands the type of complexity they're dealing with.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="celebrating-victories-and-learning-from-defeats">Celebrating Victories and Learning from Defeats<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#celebrating-victories-and-learning-from-defeats" class="hash-link" aria-label="Direct link to Celebrating Victories and Learning from Defeats" title="Direct link to Celebrating Victories and Learning from Defeats" translate="no">​</a></h3>
<p>Both contexts benefit from explicit celebration of successes and thoughtful analysis of failures. When your party finally defeats the recurring villain, you take time to appreciate the victory. When your team successfully launches a challenging feature, you should do the same.</p>
<p>The key is making these celebrations and retrospectives feel authentic rather than forced. Focus on specific achievements and learnings rather than generic praise. "We really nailed the performance optimization on this feature" feels better than "Good job, everyone!"</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="advanced-techniques-for-both-games">Advanced Techniques for Both Games<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#advanced-techniques-for-both-games" class="hash-link" aria-label="Direct link to Advanced Techniques for Both Games" title="Direct link to Advanced Techniques for Both Games" translate="no">​</a></h2>
<p>Once your team (or party) develops basic competency, you can introduce more sophisticated techniques that leverage everyone's growing expertise.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="parallel-processing-and-split-parties">Parallel Processing and Split Parties<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#parallel-processing-and-split-parties" class="hash-link" aria-label="Direct link to Parallel Processing and Split Parties" title="Direct link to Parallel Processing and Split Parties" translate="no">​</a></h3>
<p>Experienced D&amp;D groups can handle split parties—different characters pursuing different objectives simultaneously. Mature development teams can handle parallel workstreams—different developers working on related features that need to integrate cleanly.</p>
<p>Both techniques require strong communication and coordination. Everyone needs to understand how their work affects others, and the facilitator needs to manage dependencies carefully. Done well, it dramatically increases what you can accomplish. Done poorly, it creates chaos and conflict.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="meta-gaming-and-architecture-discussions">Meta-gaming and Architecture Discussions<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#meta-gaming-and-architecture-discussions" class="hash-link" aria-label="Direct link to Meta-gaming and Architecture Discussions" title="Direct link to Meta-gaming and Architecture Discussions" translate="no">​</a></h3>
<p>There's healthy meta-gaming in D&amp;D—discussing strategy and coordination using knowledge that your characters share. Similarly, there are healthy architecture discussions in development—stepping back from immediate implementation details to discuss patterns, principles, and long-term maintainability.</p>
<p>The key is distinguishing between productive meta-discussion and counterproductive overthinking. Spending five minutes coordinating a complex team attack is valuable. Spending an hour debating the theoretical optimization of a strategy you're not sure you'll even use is procrastination.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-things-go-wrong-handling-team-conflicts">When Things Go Wrong: Handling Team Conflicts<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#when-things-go-wrong-handling-team-conflicts" class="hash-link" aria-label="Direct link to When Things Go Wrong: Handling Team Conflicts" title="Direct link to When Things Go Wrong: Handling Team Conflicts" translate="no">​</a></h2>
<p>Both D&amp;D groups and development teams face similar interpersonal challenges. Someone dominates discussions, someone else checks out mentally, personalities clash, or people have fundamentally different ideas about priorities and approaches.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-spotlight-problem">The Spotlight Problem<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-spotlight-problem" class="hash-link" aria-label="Direct link to The Spotlight Problem" title="Direct link to The Spotlight Problem" translate="no">​</a></h3>
<p>In D&amp;D, some players naturally grab more spotlight time—whether through personality, character choice, or game mechanics. In development teams, some voices dominate technical discussions for similar reasons. The facilitator's job is ensuring everyone gets opportunities to contribute meaningfully.</p>
<p>This doesn't mean forcing equal talk time—it means creating space for different types of contributions. The quiet developer might not speak up in large group discussions but might have brilliant insights during pair programming sessions. The shy player might not drive roleplay scenes but might excel at tactical combat planning.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="managing-different-play-styles">Managing Different Play Styles<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#managing-different-play-styles" class="hash-link" aria-label="Direct link to Managing Different Play Styles" title="Direct link to Managing Different Play Styles" translate="no">​</a></h3>
<p>D&amp;D accommodates different play styles—some players love tactical combat, others prefer roleplay, others focus on exploration and puzzle-solving. Development teams have similar diversity—some developers love architecting elegant solutions, others prefer shipping quickly and iterating, others get energized by learning new technologies.</p>
<p>The key is designing experiences that give everyone opportunities to engage with what they find rewarding while still working toward shared goals. Not every sprint needs to accommodate every preference, but over time, everyone should feel like their strengths are valued and utilized.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="leveling-up-growing-skills-and-advancing-careers">Leveling Up: Growing Skills and Advancing Careers<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#leveling-up-growing-skills-and-advancing-careers" class="hash-link" aria-label="Direct link to Leveling Up: Growing Skills and Advancing Careers" title="Direct link to Leveling Up: Growing Skills and Advancing Careers" translate="no">​</a></h2>
<p>Both D&amp;D characters and developers grow stronger through experience, learning new abilities and taking on greater challenges. The progression systems have interesting parallels worth exploring.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="experience-points-and-professional-development">Experience Points and Professional Development<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#experience-points-and-professional-development" class="hash-link" aria-label="Direct link to Experience Points and Professional Development" title="Direct link to Experience Points and Professional Development" translate="no">​</a></h3>
<p>D&amp;D characters gain experience points by overcoming challenges and achieving objectives. Developers gain experience by solving problems, learning new technologies, and contributing to successful projects. In both cases, the most meaningful growth comes from stretching beyond your current comfort zone.</p>
<p>The anti-pattern is grinding—doing the same easy tasks repeatedly hoping to accumulate enough experience to level up. Whether it's fighting weak monsters for XP or taking on simple bug fixes to pad your story points, repetitive work without meaningful challenge doesn't drive real growth.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="multiclassing-and-full-stack-development">Multiclassing and Full-Stack Development<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#multiclassing-and-full-stack-development" class="hash-link" aria-label="Direct link to Multiclassing and Full-Stack Development" title="Direct link to Multiclassing and Full-Stack Development" translate="no">​</a></h3>
<p>Advanced D&amp;D characters sometimes multiclass—combining abilities from different character classes to create unique combinations. Senior developers often become full-stack, developing competency across multiple technical domains to increase their versatility and effectiveness.</p>
<p>Both paths require careful planning and significant investment. You can't just dabble—effective multiclassing or full-stack development requires deep enough knowledge in each area to make meaningful contributions. The payoff is increased flexibility and the ability to bridge different domains effectively.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="tools-equipment-and-development-environment">Tools, Equipment, and Development Environment<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#tools-equipment-and-development-environment" class="hash-link" aria-label="Direct link to Tools, Equipment, and Development Environment" title="Direct link to Tools, Equipment, and Development Environment" translate="no">​</a></h2>
<p>Every adventuring party obsesses over their equipment—spell components, weapons, armor, and magical items that enhance their capabilities. Development teams show the same attention to their tools—IDEs, frameworks, deployment pipelines, and automation scripts that amplify their productivity.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-right-tool-for-the-job">The Right Tool for the Job<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-right-tool-for-the-job" class="hash-link" aria-label="Direct link to The Right Tool for the Job" title="Direct link to The Right Tool for the Job" translate="no">​</a></h3>
<p>Experienced D&amp;D players understand that tool selection depends on context. The weapon that's perfect for fighting undead might be useless against constructs. Similarly, experienced developers know that technology choices depend on requirements—the framework that's perfect for rapid prototyping might be wrong for high-performance systems.</p>
<p>The key insight is that there's no universally "best" tool—only tools that are better or worse for specific situations. The meta-skill is learning to evaluate context and choose appropriately rather than defaulting to familiar options.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="maintenance-and-technical-debt">Maintenance and Technical Debt<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#maintenance-and-technical-debt" class="hash-link" aria-label="Direct link to Maintenance and Technical Debt" title="Direct link to Maintenance and Technical Debt" translate="no">​</a></h3>
<p>D&amp;D equipment requires maintenance—sharpening weapons, repairing armor, restocking spell components. Development tools require similar attention—updating dependencies, refactoring code, optimizing build processes. Both types of maintenance feel less rewarding than acquiring new capabilities, but neglecting them leads to serious problems.</p>
<p>The smart approach is building maintenance into your regular routine rather than waiting for crisis. Schedule time for equipment maintenance between adventures. Schedule time for technical debt cleanup between major features.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-campaign-arc-long-term-planning-and-vision">The Campaign Arc: Long-term Planning and Vision<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-campaign-arc-long-term-planning-and-vision" class="hash-link" aria-label="Direct link to The Campaign Arc: Long-term Planning and Vision" title="Direct link to The Campaign Arc: Long-term Planning and Vision" translate="no">​</a></h2>
<p>Successful D&amp;D campaigns balance episodic adventures with overarching storylines that develop over months or years. Successful products balance sprint-by-sprint delivery with long-term vision and architecture that evolves over multiple releases.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="planting-seeds-and-paying-off-setup">Planting Seeds and Paying Off Setup<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#planting-seeds-and-paying-off-setup" class="hash-link" aria-label="Direct link to Planting Seeds and Paying Off Setup" title="Direct link to Planting Seeds and Paying Off Setup" translate="no">​</a></h3>
<p>Good DMs plant story seeds early—mysterious NPCs, unresolved conflicts, hints about larger threats—then pay them off in satisfying ways later in the campaign. Good product teams set up architectural foundations and user experience patterns that enable future capabilities.</p>
<p>The key is balancing immediate value with long-term setup. Every session should provide immediate entertainment value, but the best sessions also advance longer-term storylines. Every sprint should deliver immediate user value, but the best sprints also position the team for future success.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="adapting-to-player-agency">Adapting to Player Agency<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#adapting-to-player-agency" class="hash-link" aria-label="Direct link to Adapting to Player Agency" title="Direct link to Adapting to Player Agency" translate="no">​</a></h3>
<p>D&amp;D campaigns need enough structure to provide direction but enough flexibility to accommodate player choices. Product roadmaps need similar balance—clear enough vision to guide decisions but flexible enough to respond to user feedback and market changes.</p>
<p>The anti-pattern in both cases is rigid adherence to predetermined plans when circumstances change. If your players consistently make choices that undermine your planned storyline, maybe your storyline isn't as compelling as you thought. If your users consistently use your product differently than you expected, maybe your assumptions need updating.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="wrapping-up-the-session">Wrapping Up the Session<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#wrapping-up-the-session" class="hash-link" aria-label="Direct link to Wrapping Up the Session" title="Direct link to Wrapping Up the Session" translate="no">​</a></h2>
<p>Whether you're ending a D&amp;D session or closing a sprint, the transition ritual matters. Good facilitators help everyone process what happened, celebrate achievements, and prepare mentally for what's next.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-two-minute-reflection">The Two-Minute Reflection<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#the-two-minute-reflection" class="hash-link" aria-label="Direct link to The Two-Minute Reflection" title="Direct link to The Two-Minute Reflection" translate="no">​</a></h3>
<p>End each session or sprint with a quick reflection: What went really well? What surprised us? What are we excited about next time? This doesn't need to be a formal retrospective—just a moment of shared acknowledgment that helps everyone transition from intense focus back to normal life.</p>
<p>The goal is emotional closure and positive anticipation. You want people leaving the session feeling satisfied with what they accomplished and energized about future possibilities.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways-for-scrum-masters">Key Takeaways for Scrum Masters<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#key-takeaways-for-scrum-masters" class="hash-link" aria-label="Direct link to Key Takeaways for Scrum Masters" title="Direct link to Key Takeaways for Scrum Masters" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Embrace the facilitator mindset</strong>: Like a good DM, your job is creating conditions for others to succeed, not controlling their choices</li>
<li><strong>Leverage team diversity</strong>: Different roles bring different strengths—design experiences that let everyone contribute meaningfully</li>
<li><strong>Focus on shared narrative</strong>: Help your team develop a common understanding of goals, challenges, and success criteria</li>
<li><strong>Balance structure with flexibility</strong>: Provide enough framework to prevent chaos, but enough freedom for creativity and adaptation</li>
<li><strong>Celebrate the journey</strong>: Acknowledge both successes and interesting failures as part of the team's growing expertise</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rolling-for-initiative-on-your-next-sprint">Rolling for Initiative on Your Next Sprint<a href="https://risadams.com/blog/2025/08/28/scrumgeons-dragons#rolling-for-initiative-on-your-next-sprint" class="hash-link" aria-label="Direct link to Rolling for Initiative on Your Next Sprint" title="Direct link to Rolling for Initiative on Your Next Sprint" translate="no">​</a></h2>
<p>The next time you're facilitating sprint planning, try thinking like a DM preparing for a session. You're not there to solve every problem or make every decision—you're there to create an environment where smart, capable people can collaborate effectively to overcome interesting challenges.</p>
<p>Set the scene, provide the right amount of information, and trust your party to find creative solutions you never would have imagined. After all, the best adventures—whether in code or in fantasy—come from teams that know how to support each other through uncertainty, complexity, and the occasional critical failure.</p>
<p>Now roll for initiative, and let's see what this sprint brings.</p>]]></content:encoded>
            <category>agile</category>
            <category>scrum</category>
            <category>scrum-master</category>
            <category>development</category>
            <category>leadership</category>
            <category>team-dynamics</category>
            <category>gaming</category>
            <category>dungeons-and-dragons</category>
            <category>humor</category>
            <category>collaboration</category>
            <category>product-owner</category>
            <category>retrospectives</category>
            <category>sprint-planning</category>
        </item>
        <item>
            <title><![CDATA[When Team Members Check Out: A Scrum Master's Guide to Re-engagement]]></title>
            <link>https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member</link>
            <guid>https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member</guid>
            <pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[You know the signs: minimal participation in standup, delayed deliverables, and that thousand-yard stare during retrospectives.]]></description>
            <content:encoded><![CDATA[<p>You know the signs: minimal participation in standup, delayed deliverables, and that thousand-yard stare during retrospectives.
A disengaged team member can derail sprint momentum faster than a production bug on Friday afternoon.
But before you escalate to management or start documenting performance issues, remember that disengagement is often a symptom, not the disease.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="start-with-curiosity-not-judgment">Start with Curiosity, Not Judgment<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#start-with-curiosity-not-judgment" class="hash-link" aria-label="Direct link to Start with Curiosity, Not Judgment" title="Direct link to Start with Curiosity, Not Judgment" translate="no">​</a></h2>
<p>The first instinct when facing disengagement is often frustration. Stories start spinning in our heads: "They don't care," "They're checked out," or "They're just riding the bench." These narratives rarely help and almost never reflect the full picture.</p>
<p>Instead, approach disengagement with genuine curiosity. What changed? When did you first notice the shift? Are there patterns—specific types of work, certain team members, particular times of day or sprint cycles?</p>
<p>I once worked with a developer who went from being one of our most vocal contributors to barely speaking during ceremonies. My initial reaction was to address the behavior directly. Fortunately, I caught myself and asked a simple question during our next one-on-one: "How are things going for you lately?"</p>
<p>Turns out, they'd been dealing with a family health crisis for weeks and were barely keeping their head above water. The disengagement wasn't about work—it was about survival.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="create-safe-spaces-for-real-conversation">Create Safe Spaces for Real Conversation<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#create-safe-spaces-for-real-conversation" class="hash-link" aria-label="Direct link to Create Safe Spaces for Real Conversation" title="Direct link to Create Safe Spaces for Real Conversation" translate="no">​</a></h2>
<p>One-on-ones are your secret weapon, but only if they're actually safe. This means:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Schedule them consistently</strong> - Not just when problems arise</li>
<li><strong>Meet outside the team workspace</strong> - Coffee shops, walking meetings, or even virtual backgrounds that signal "this is different"</li>
<li><strong>Start with check-ins</strong> - "How are you doing?" before "How's the sprint going?"</li>
<li><strong>Listen more than you talk</strong> - Your job is to understand, not to solve immediately</li>
</ul>
<p>During these conversations, resist the urge to jump straight to solutions. People need to feel heard before they're ready to hear advice. Sometimes the act of being truly listened to is the first step toward re-engagement.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="address-the-environment-not-just-the-individual">Address the Environment, Not Just the Individual<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#address-the-environment-not-just-the-individual" class="hash-link" aria-label="Direct link to Address the Environment, Not Just the Individual" title="Direct link to Address the Environment, Not Just the Individual" translate="no">​</a></h2>
<p>Disengagement doesn't happen in a vacuum. Look at the team dynamics, workload distribution, and psychological safety levels. Ask yourself:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Is this person being heard in team discussions?</li>
<li>Are they getting challenging, meaningful work?</li>
<li>Is the work they are getting too difficult for their current skill set?</li>
<li>Do they have growth opportunities?</li>
<li>Is the team culture inclusive and supportive?</li>
</ul>
<p>I've seen disengagement stem from being consistently assigned "grunt work" while others got the interesting problems. I've also seen it result from team members who dominate discussions, leaving others feeling like their contributions don't matter.</p>
<p>Sometimes the fix isn't individual coaching—it's adjusting team practices or having conversations with other team members about inclusive collaboration.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="practical-re-engagement-strategies">Practical Re-engagement Strategies<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#practical-re-engagement-strategies" class="hash-link" aria-label="Direct link to Practical Re-engagement Strategies" title="Direct link to Practical Re-engagement Strategies" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-gradual-re-entry-approach">The Gradual Re-entry Approach<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-gradual-re-entry-approach" class="hash-link" aria-label="Direct link to The Gradual Re-entry Approach" title="Direct link to The Gradual Re-entry Approach" translate="no">​</a></h3>
<p>Don't expect someone to go from disengaged to fully invested overnight. Instead, create small wins:</p>
<ol>
<li><strong>Assign a manageable, meaningful task</strong> - Something they can complete successfully that contributes real value</li>
<li><strong>Pair them with an engaged team member</strong> - Collaboration can be contagious</li>
<li><strong>Acknowledge their contributions publicly</strong> - But authentically, not with participation trophies</li>
<li><strong>Gradually increase responsibility</strong> as engagement returns</li>
</ol>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-skill-development-path">The Skill Development Path<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-skill-development-path" class="hash-link" aria-label="Direct link to The Skill Development Path" title="Direct link to The Skill Development Path" translate="no">​</a></h3>
<p>Sometimes disengagement masks impostor syndrome or skill gaps. Consider:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Identifying knowledge gaps</strong> without making them feel inadequate</li>
<li><strong>Pairing them with mentors</strong> for specific technologies or practices</li>
<li><strong>Creating learning time</strong> within sprint capacity</li>
<li><strong>Celebrating learning progress</strong> alongside delivery progress</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-autonomy-experiment">The Autonomy Experiment<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-autonomy-experiment" class="hash-link" aria-label="Direct link to The Autonomy Experiment" title="Direct link to The Autonomy Experiment" translate="no">​</a></h3>
<p>Micromanagement kills engagement faster than almost anything else. Try giving disengaged team members more control over how they work:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Let them choose which story to tackle next</li>
<li>Ask for their input on technical approaches</li>
<li>Involve them in estimation discussions</li>
<li>Give them ownership of specific areas or features</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-individual-issues-require-different-approaches">When Individual Issues Require Different Approaches<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#when-individual-issues-require-different-approaches" class="hash-link" aria-label="Direct link to When Individual Issues Require Different Approaches" title="Direct link to When Individual Issues Require Different Approaches" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-overwhelmed-performer">The Overwhelmed Performer<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-overwhelmed-performer" class="hash-link" aria-label="Direct link to The Overwhelmed Performer" title="Direct link to The Overwhelmed Performer" translate="no">​</a></h3>
<p>High performers sometimes disengage when they're drowning. Signs include:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Taking on too much work</li>
<li>Working long hours with declining quality</li>
<li>Becoming irritable or defensive</li>
</ul>
<p><strong>Response</strong>: Work together to right-size their commitments. Sometimes saying "no" to stakeholders protects your team's sustainability.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-underutilized-expert">The Underutilized Expert<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-underutilized-expert" class="hash-link" aria-label="Direct link to The Underutilized Expert" title="Direct link to The Underutilized Expert" translate="no">​</a></h3>
<p>Experienced team members can disengage when they feel their expertise isn't valued. Signs include:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Minimal participation in technical discussions</li>
<li>Going through the motions without bringing insights</li>
<li>Seeming bored or distracted</li>
</ul>
<p><strong>Response</strong>: Explicitly ask for their input on architecture decisions, code reviews, or mentoring newer team members.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-burned-out-veteran">The Burned-Out Veteran<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-burned-out-veteran" class="hash-link" aria-label="Direct link to The Burned-Out Veteran" title="Direct link to The Burned-Out Veteran" translate="no">​</a></h3>
<p>Long-term team members sometimes hit walls after periods of high engagement. Signs include:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Nostalgia for "how things used to be"</li>
<li>Resistance to new processes or tools</li>
<li>Gradual withdrawal from team activities</li>
</ul>
<p><strong>Response</strong>: Acknowledge their contributions explicitly and explore what would make work meaningful again. Sometimes a role shift or new challenges can reignite passion.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="setting-boundaries-and-expectations">Setting Boundaries and Expectations<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#setting-boundaries-and-expectations" class="hash-link" aria-label="Direct link to Setting Boundaries and Expectations" title="Direct link to Setting Boundaries and Expectations" translate="no">​</a></h2>
<p>Compassionate leadership doesn't mean accepting indefinite poor performance. Be clear about:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Minimum participation expectations</strong> - What does "engaged enough" look like?</li>
<li><strong>Timeline for improvement</strong> - How long is reasonable for re-engagement?</li>
<li><strong>Support available</strong> - What resources can you provide?</li>
<li><strong>Consequences</strong> - What happens if engagement doesn't improve?</li>
</ul>
<p>Document these conversations and agreements. This protects both the individual and the team while showing that you're invested in their success.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="red-flags-that-require-escalation">Red Flags That Require Escalation<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#red-flags-that-require-escalation" class="hash-link" aria-label="Direct link to Red Flags That Require Escalation" title="Direct link to Red Flags That Require Escalation" translate="no">​</a></h2>
<p>Sometimes disengagement reflects deeper issues that need HR or management involvement:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Attendance problems that affect team commitments</li>
<li>Interpersonal conflicts that create hostile environments</li>
<li>Performance issues that consistently impact deliverables</li>
<li>Signs of harassment, discrimination, or ethical violations</li>
</ul>
<p>Know when your role as Scrum Master transitions to employee advocate, and don't hesitate to involve appropriate resources.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="building-engagement-resistant-teams">Building Engagement-Resistant Teams<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#building-engagement-resistant-teams" class="hash-link" aria-label="Direct link to Building Engagement-Resistant Teams" title="Direct link to Building Engagement-Resistant Teams" translate="no">​</a></h2>
<p>Prevention beats intervention. Foster team cultures where disengagement is less likely:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Rotate challenging work</strong> so everyone gets growth opportunities</li>
<li><strong>Practice radical candor</strong> in feedback and decision-making</li>
<li><strong>Celebrate different types of contributions</strong> - not just code output</li>
<li><strong>Maintain sustainable pace</strong> to prevent burnout</li>
<li><strong>Create psychological safety</strong> where people can voice concerns early</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-long-game">The Long Game<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#the-long-game" class="hash-link" aria-label="Direct link to The Long Game" title="Direct link to The Long Game" translate="no">​</a></h2>
<p>Re-engaging a team member isn't a sprint—it's more like refactoring legacy code. It takes patience, multiple iterations, and sometimes you have to accept that the outcome might not be what you hoped.</p>
<p>I've had team members who re-engaged and became some of our strongest contributors. I've also had situations where, despite genuine effort from everyone involved, the fit just wasn't right anymore. Both outcomes are okay if you approach the situation with integrity and compassion.</p>
<p>The goal isn't to save everyone. It's to give everyone a genuine opportunity to thrive while protecting the team's overall health and productivity.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways">Key Takeaways<a href="https://risadams.com/blog/2025/08/19/scrum-mastershow-to-deal-with-a-disengaged-team-member#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><strong>Lead with curiosity</strong> - Understand the "why" before addressing the "what"</li>
<li><strong>Create genuine safety</strong> - One-on-ones only work if they're actually safe spaces</li>
<li><strong>Address systems, not just symptoms</strong> - Sometimes the team environment needs adjustment</li>
<li><strong>Provide gradual re-entry paths</strong> - Small wins build momentum toward larger engagement</li>
<li><strong>Set clear expectations</strong> - Compassion includes boundaries and accountability</li>
<li><strong>Know when to escalate</strong> - Some situations require resources beyond your role</li>
</ul>
<p>Remember: every disengaged team member was once engaged. Your job isn't to fix people—it's to create conditions where they can re-discover what made them care in the first place.</p>]]></content:encoded>
            <category>scrum</category>
            <category>leadership</category>
            <category>team-dynamics</category>
            <category>engagement</category>
            <category>motivation</category>
            <category>mental-health</category>
            <category>burnout</category>
            <category>one-on-ones</category>
            <category>psychological-safety</category>
            <category>coaching</category>
        </item>
        <item>
            <title><![CDATA[working with git: archive]]></title>
            <link>https://risadams.com/blog/2025/08/05/working-with-git-archive</link>
            <guid>https://risadams.com/blog/2025/08/05/working-with-git-archive</guid>
            <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[You're about to deploy to production and your PM asks for "just a clean copy of the code without all that Git history stuff." Or maybe you need to package a specific release for a client who shouldn't see your development branches. Enter git archive — the Git command that's criminally underused despite solving these exact problems elegantly.]]></description>
            <content:encoded><![CDATA[<p>You're about to deploy to production and your PM asks for "just a clean copy of the code without all that Git history stuff." Or maybe you need to package a specific release for a client who shouldn't see your development branches. Enter <code>git archive</code> — the Git command that's criminally underused despite solving these exact problems elegantly.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-git-archive-actually-does">What Git Archive Actually Does<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#what-git-archive-actually-does" class="hash-link" aria-label="Direct link to What Git Archive Actually Does" title="Direct link to What Git Archive Actually Does" translate="no">​</a></h2>
<p>Think of <code>git archive</code> as Git's built-in export tool. It creates a clean snapshot of your repository at any commit, tag, or branch — without the <code>.git</code> directory, without the history, without any of the Git metadata. Just the files, exactly as they existed at that point in time.</p>
<p>Unlike cloning or downloading a zip from GitHub, <code>git archive</code> gives you surgical precision over what gets exported and how it's packaged. You can target specific commits, exclude certain paths, and output in multiple formats.</p>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Basic syntax</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">release.zip HEAD</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>That's it. You now have a clean zip file of your current branch without any Git baggage.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-youd-want-this-over-alternatives">Why You'd Want This Over Alternatives<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#why-youd-want-this-over-alternatives" class="hash-link" aria-label="Direct link to Why You'd Want This Over Alternatives" title="Direct link to Why You'd Want This Over Alternatives" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="clean-deployments">Clean Deployments<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#clean-deployments" class="hash-link" aria-label="Direct link to Clean Deployments" title="Direct link to Clean Deployments" translate="no">​</a></h3>
<p>Your production server doesn't need your commit history, branch information, or that embarrassing commit message from 3am. <code>git archive</code> gives you just the code.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="client-deliverables">Client Deliverables<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#client-deliverables" class="hash-link" aria-label="Direct link to Client Deliverables" title="Direct link to Client Deliverables" translate="no">​</a></h3>
<p>When delivering source code to clients, you often want to provide a clean package without exposing your development process, internal comments, or proprietary Git hooks.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="release-packaging">Release Packaging<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#release-packaging" class="hash-link" aria-label="Direct link to Release Packaging" title="Direct link to Release Packaging" translate="no">​</a></h3>
<p>Creating official releases becomes trivial. No more manual file copying or worrying about accidentally including development files.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="compliance-and-auditing">Compliance and Auditing<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#compliance-and-auditing" class="hash-link" aria-label="Direct link to Compliance and Auditing" title="Direct link to Compliance and Auditing" translate="no">​</a></h3>
<p>Some organizations require clean, traceable code packages for compliance. <code>git archive</code> provides reproducible exports tied to specific commits.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="practical-examples">Practical Examples<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#practical-examples" class="hash-link" aria-label="Direct link to Practical Examples" title="Direct link to Practical Examples" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="basic-archive-creation">Basic Archive Creation<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#basic-archive-creation" class="hash-link" aria-label="Direct link to Basic Archive Creation" title="Direct link to Basic Archive Creation" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Create a zip archive of the current branch</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">myproject-latest.zip HEAD</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Create a tar.gz archive of a specific tag</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar.gz </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">v2.1.0.tar.gz v2.1.0</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Archive a specific commit</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">hotfix.zip a1b2c3d</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="targeting-specific-paths">Targeting Specific Paths<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#targeting-specific-paths" class="hash-link" aria-label="Direct link to Targeting Specific Paths" title="Direct link to Targeting Specific Paths" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Only archive the src directory</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">source-only.zip HEAD:src/</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Exclude certain directories</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">no-tests.tar HEAD </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">myproject/ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"tests/*"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"*.test.js"</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="archive-workflow-visualization">Archive Workflow Visualization<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#archive-workflow-visualization" class="hash-link" aria-label="Direct link to Archive Workflow Visualization" title="Direct link to Archive Workflow Visualization" translate="no">​</a></h3>
<div class="mermaid-wrapper"><div class="mermaid"></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="advanced-archive-strategies">Advanced Archive Strategies<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#advanced-archive-strategies" class="hash-link" aria-label="Direct link to Advanced Archive Strategies" title="Direct link to Advanced Archive Strategies" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Archive with a directory prefix (useful for releases)</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar.gz </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">myproject-v1.2.0/ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">myproject-v1.2.0.tar.gz </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  v1.2.0</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Archive directly to stdout and pipe to remote server</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar HEAD </span><span class="token operator" style="color:hsl(221, 87%, 60%)">|</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">ssh</span><span class="token plain"> user@server </span><span class="token string" style="color:hsl(119, 34%, 47%)">'cd /var/www &amp;&amp; tar -xf -'</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Create archives for multiple formats simultaneously</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">release.zip v1.0.0</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar.gz </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">release.tar.gz v1.0.0</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="real-world-scenarios">Real-World Scenarios<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#real-world-scenarios" class="hash-link" aria-label="Direct link to Real-World Scenarios" title="Direct link to Real-World Scenarios" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scenario-1-production-deployment">Scenario 1: Production Deployment<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#scenario-1-production-deployment" class="hash-link" aria-label="Direct link to Scenario 1: Production Deployment" title="Direct link to Scenario 1: Production Deployment" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token shebang important" style="color:hsl(230, 8%, 24%);font-weight:bold">#!/bin/bash</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># deploy.sh - Clean deployment script</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token assign-left variable" style="color:hsl(221, 87%, 60%)">VERSION</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token variable" style="color:hsl(221, 87%, 60%)">$(</span><span class="token variable function" style="color:hsl(221, 87%, 60%)">git</span><span class="token variable" style="color:hsl(221, 87%, 60%)"> describe </span><span class="token variable parameter variable" style="color:hsl(221, 87%, 60%)">--tags</span><span class="token variable" style="color:hsl(221, 87%, 60%)"> </span><span class="token variable parameter variable" style="color:hsl(221, 87%, 60%)">--abbrev</span><span class="token variable operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token variable number" style="color:hsl(35, 99%, 36%)">0</span><span class="token variable" style="color:hsl(221, 87%, 60%)">)</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar.gz </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">app/ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">deploy-</span><span class="token variable" style="color:hsl(221, 87%, 60%)">${VERSION}</span><span class="token plain">.tar.gz </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token variable" style="color:hsl(221, 87%, 60%)">${VERSION}</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Upload and extract on production server</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">scp</span><span class="token plain"> deploy-</span><span class="token variable" style="color:hsl(221, 87%, 60%)">${VERSION}</span><span class="token plain">.tar.gz prod-server:/tmp/</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">ssh</span><span class="token plain"> prod-server </span><span class="token string" style="color:hsl(119, 34%, 47%)">"cd /var/www &amp;&amp; tar -xzf /tmp/deploy-</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">${VERSION}</span><span class="token string" style="color:hsl(119, 34%, 47%)">.tar.gz"</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scenario-2-client-code-delivery">Scenario 2: Client Code Delivery<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#scenario-2-client-code-delivery" class="hash-link" aria-label="Direct link to Scenario 2: Client Code Delivery" title="Direct link to Scenario 2: Client Code Delivery" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token comment" style="color:hsl(230, 4%, 64%)"># Create a clean client package excluding internal files</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">client-delivery-</span><span class="token variable" style="color:hsl(221, 87%, 60%)">$(</span><span class="token variable function" style="color:hsl(221, 87%, 60%)">date</span><span class="token variable" style="color:hsl(221, 87%, 60%)"> +%Y%m%d</span><span class="token variable" style="color:hsl(221, 87%, 60%)">)</span><span class="token plain">.zip </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">project-source/ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  HEAD </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"*.internal.*"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"docs/internal/*"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">\</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">  </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">".env*"</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="archive-vs-alternative-approaches">Archive vs. Alternative Approaches<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#archive-vs-alternative-approaches" class="hash-link" aria-label="Direct link to Archive vs. Alternative Approaches" title="Direct link to Archive vs. Alternative Approaches" translate="no">​</a></h3>
<div class="mermaid-wrapper"><div class="mermaid"></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="alternative-approaches-and-when-to-use-them">Alternative Approaches and When to Use Them<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#alternative-approaches-and-when-to-use-them" class="hash-link" aria-label="Direct link to Alternative Approaches and When to Use Them" title="Direct link to Alternative Approaches and When to Use Them" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="git-clone-with-cleanup">Git Clone with Cleanup<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#git-clone-with-cleanup" class="hash-link" aria-label="Direct link to Git Clone with Cleanup" title="Direct link to Git Clone with Cleanup" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--depth</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--branch</span><span class="token plain"> v1.0.0 repo.git</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">rm</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-rf</span><span class="token plain"> repo/.git</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Pros</strong>: Familiar workflow, works with any Git repository<br>
<strong>Cons</strong>: Slower, requires cleanup, less precise control</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="github-release-downloads">GitHub Release Downloads<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#github-release-downloads" class="hash-link" aria-label="Direct link to GitHub Release Downloads" title="Direct link to GitHub Release Downloads" translate="no">​</a></h3>
<p><strong>Pros</strong>: Easy for public repositories, automatic via GitHub<br>
<strong>Cons</strong>: No custom exclusions, limited to tagged releases, platform dependent</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="manual-file-copying">Manual File Copying<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#manual-file-copying" class="hash-link" aria-label="Direct link to Manual File Copying" title="Direct link to Manual File Copying" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token function" style="color:hsl(221, 87%, 60%)">cp</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-r</span><span class="token plain"> src/ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/clean-copy/</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Pros</strong>: Simple, obvious<br>
<strong>Cons</strong>: Error-prone, misses hidden files, inconsistent results</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rsync-with-exclusions">Rsync with Exclusions<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#rsync-with-exclusions" class="hash-link" aria-label="Direct link to Rsync with Exclusions" title="Direct link to Rsync with Exclusions" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token function" style="color:hsl(221, 87%, 60%)">rsync</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-av</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">'.git'</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--exclude</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">'node_modules'</span><span class="token plain"> ./ </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/clean-copy/</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Pros</strong>: Powerful exclusion patterns, works with any directory<br>
<strong>Cons</strong>: Not Git-aware, doesn't handle specific commits</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-git-archive-shines">When Git Archive Shines<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#when-git-archive-shines" class="hash-link" aria-label="Direct link to When Git Archive Shines" title="Direct link to When Git Archive Shines" translate="no">​</a></h2>
<p><strong>Perfect for</strong>:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Production deployments requiring clean code</li>
<li>Client deliverables without development history</li>
<li>Creating reproducible release packages</li>
<li>Compliance scenarios requiring clean exports</li>
<li>CI/CD pipelines needing specific commit snapshots</li>
</ul>
<p><strong>Skip it when</strong>:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>You need the full Git history</li>
<li>Working with local development copies</li>
<li>The recipient needs to contribute back to the repository</li>
<li>You're just moving code between development machines</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="advanced-tips">Advanced Tips<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#advanced-tips" class="hash-link" aria-label="Direct link to Advanced Tips" title="Direct link to Advanced Tips" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="combining-with-git-attributes">Combining with Git Attributes<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#combining-with-git-attributes" class="hash-link" aria-label="Direct link to Combining with Git Attributes" title="Direct link to Combining with Git Attributes" translate="no">​</a></h3>
<p>Create a <code>.gitattributes</code> file to control archive behavior:</p>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-gitattributes code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-gitattributes thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"># Exclude development files from archives</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">*.development.* export-ignore</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">tests/ export-ignore</span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">docs/internal/ export-ignore</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Now <code>git archive</code> automatically excludes these paths without explicit <code>--exclude</code> flags.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scripted-release-process">Scripted Release Process<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#scripted-release-process" class="hash-link" aria-label="Direct link to Scripted Release Process" title="Direct link to Scripted Release Process" translate="no">​</a></h3>
<style data-jsx="true" data-global="true">html:not([data-theme=dark]) .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#7a67eeb3,#8e7bf166);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0}html:not([data-theme=dark]) .code-block-container:hover:before{opacity:1}html[data-theme=dark] .code-block-container:before{content:"";opacity:.6;z-index:1;background:linear-gradient(#6f4cffcc,#a594ff80);width:4px;height:100%;transition:opacity .3s;position:absolute;top:0;left:0;box-shadow:0 0 10px #6f4cff4d}html[data-theme=dark] .code-block-container:hover:before{opacity:1}</style><div class="language-bash code-block-container bg-[var(--prism-background-color)] text-[var(--prism-color)] rounded-[var(--ifm-code-border-radius)] relative transition-all duration-300 overflow-hidden light:shadow-[0_4px_12px_rgba(122,103,238,0.08),0_1px_4px_rgba(0,0,0,0.05)] light:border light:border-[rgba(191,179,247,0.1)] light:hover:shadow-[0_6px_16px_rgba(122,103,238,0.12),0_2px_6px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_rgba(0,0,0,0.3),0_1px_4px_rgba(111,76,255,0.15)] dark:border dark:border-[rgba(111,76,255,0.15)] dark:hover:shadow-[0_6px_16px_rgba(0,0,0,0.4),0_2px_6px_rgba(111,76,255,0.2)] theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="relative [direction:ltr] rounded-[inherit]"><pre class="prism-code language-bash thin-scrollbar p-0 [--ifm-pre-background:var(--prism-background-color)]" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="font-['MonaspaceNeon','monaspace',monospace] [float:left] min-w-full table p-[var(--ifm-pre-padding)_0] print:whitespace-pre-wrap"><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token shebang important" style="color:hsl(230, 8%, 24%);font-weight:bold">#!/bin/bash</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># release.sh - Complete release packaging</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token assign-left variable" style="color:hsl(221, 87%, 60%)">TAG</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token variable" style="color:hsl(221, 87%, 60%)">$1</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-z</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(301, 63%, 40%)">then</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">    </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">echo</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Usage: ./release.sh &lt;tag&gt;"</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">    </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">exit</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">fi</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Verify tag exists</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> rev-parse </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--verify</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">&gt;</span><span class="token plain">/dev/null </span><span class="token operator file-descriptor important" style="color:hsl(230, 8%, 24%);font-weight:bold">2</span><span class="token operator" style="color:hsl(221, 87%, 60%)">&gt;</span><span class="token file-descriptor important" style="color:hsl(230, 8%, 24%);font-weight:bold">&amp;1</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">||</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">    </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">echo</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Tag </span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)"> does not exist"</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain">    </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">exit</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># Create multiple archive formats</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">zip </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"project-</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">/"</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"project-</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">.zip"</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> archive </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--format</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">tar.gz </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--prefix</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"project-</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">/"</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--output</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"project-</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">.tar.gz"</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain" style="display:inline-block"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">echo</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Release packages created for </span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token plain"></span></span><br></span><style>:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);margin:0 calc(-1*var(--ifm-pre-padding));padding:0 var(--ifm-pre-padding);display:block}.theme-code-block-highlighted-line .code-line-number:before{opacity:.8}</style><span class="token-line table-row [counter-increment:line-count]" style="color:hsl(230, 8%, 24%)"><span class="table-cell text-right w-[1%] sticky left-0 px-[var(--ifm-pre-padding)] bg-[var(--ifm-pre-background)] overflow-wrap-normal code-line-number before:content-[counter(line-count)] before:opacity-40"></span><span class="pr-[var(--ifm-pre-padding)]"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-la</span><span class="token plain"> project-</span><span class="token variable" style="color:hsl(221, 87%, 60%)">$TAG</span><span class="token plain">.*</span></span><br></span></code></pre><div class="flex gap-[0.2rem] absolute right-[calc(var(--ifm-pre-padding)/2)] top-[calc(var(--ifm-pre-padding)/2)]"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn flex items-center bg-[var(--prism-background-color)] text-[var(--prism-color)] border border-[var(--ifm-color-emphasis-300)] rounded-[var(--ifm-global-radius)] p-[0.4rem] leading-none transition-opacity duration-fast opacity-0 hover:opacity-100 focus-visible:opacity-100 theme-code-block:hover:opacity-100"><span class="relative w-[1.125rem] h-[1.125rem]" aria-hidden="true"><svg viewBox="0 0 24 24" class="absolute top-0 left-0 fill-current w-full h-full transition-all duration-fast ease-in-out"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 scale-[0.33] fill-current w-full h-full transition-all duration-fast ease-in-out opacity-0 text-[#00d600]"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways">Key Takeaways<a href="https://risadams.com/blog/2025/08/05/working-with-git-archive#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li><code>git archive</code> creates clean snapshots without Git metadata — perfect for deployments and deliverables</li>
<li>It offers surgical precision over what gets exported, unlike crude alternatives like manual copying</li>
<li>Use <code>.gitattributes</code> with <code>export-ignore</code> to automatically exclude development files from archives</li>
<li>Combine with tags and scripting for powerful, reproducible release processes</li>
<li>It's faster and more reliable than cloning and cleaning up repositories</li>
</ul>
<p>Next time someone asks for "just the code files," you'll know exactly which Git command was built for that job. <code>git archive</code> isn't flashy, but it's the kind of utility that makes you wonder how you managed deployments and code delivery before you knew it existed.</p>]]></content:encoded>
            <category>git</category>
            <category>deployment</category>
            <category>devops</category>
            <category>automation</category>
            <category>best-practices</category>
            <category>advanced-git</category>
            <category>version-control</category>
        </item>
        <item>
            <title><![CDATA[The Scrum Master's Paradox: Leading Without Authority While Battling Self-Doubt]]></title>
            <link>https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt</link>
            <guid>https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt</guid>
            <pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[There I was, facilitating a retrospective for a team of brilliant engineers, when someone asked a technical question that made my stomach drop. I nodded thoughtfully, buying time, while my inner voice screamed: "You have no idea what they're talking about, do you?" Welcome to the Scrum Master's paradox — leading teams through complex technical challenges while secretly wondering if you belong in the room at all.]]></description>
            <content:encoded><![CDATA[<p>There I was, facilitating a retrospective for a team of brilliant engineers, when someone asked a technical question that made my stomach drop. I nodded thoughtfully, buying time, while my inner voice screamed: "You have no idea what they're talking about, do you?" Welcome to the Scrum Master's paradox — leading teams through complex technical challenges while secretly wondering if you belong in the room at all.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-uncomfortable-truth-about-leading-without-authority">The Uncomfortable Truth About Leading Without Authority<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#the-uncomfortable-truth-about-leading-without-authority" class="hash-link" aria-label="Direct link to The Uncomfortable Truth About Leading Without Authority" title="Direct link to The Uncomfortable Truth About Leading Without Authority" translate="no">​</a></h2>
<p>Here's the thing nobody warns you about when you become a Scrum Master: you'll spend most of your time trying to influence people who don't report to you, solving problems you didn't create, and defending processes to stakeholders who think Agile is just "meetings about meetings."</p>
<p>You know that moment when a senior developer pushes back on sprint planning because "this story is way too big" and you can't just say "because I said so"? Yeah, that's Tuesday for us. You have to convince, cajole, and coach your way through every decision while everyone in the room probably knows more about the technical details than you do.</p>
<p>The impostor syndrome hits differently in this role. Developers get to point to working code and say "I built that." Product managers get to point to features and say "I shipped that." We get to point to... what exactly? A team that's slightly less dysfunctional than last month? A retrospective where people actually talked about real problems instead of just complaining about the coffee?</p>
<p>I've sat in countless meetings where I felt like a fraud. Sprint reviews where the demo breaks and I'm frantically thinking about how to salvage the conversation. Daily standups where someone mentions a critical production issue and I'm nodding along while internally screaming "I have no idea how any of this infrastructure works."</p>
<p>But here's what I've learned after years of feeling like I'm constantly one technical question away from being exposed: the authority we think we're missing was never supposed to come from our title or our technical knowledge. It comes from something much harder to fake and much more valuable to the team.</p>
<p><strong>We're not supposed to be the smartest person in the room. We're supposed to be the person who helps the smart people in the room work together effectively.</strong> That's a completely different skill set, and it took me way too long to figure that out.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-technical-intimidation-factor">The Technical Intimidation Factor<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#the-technical-intimidation-factor" class="hash-link" aria-label="Direct link to The Technical Intimidation Factor" title="Direct link to The Technical Intimidation Factor" translate="no">​</a></h2>
<p>Here's what nobody tells you about being a Scrum Master for technical teams: you don't need to understand every line of code, but you absolutely need to understand the flow of work, the relationships between components, and the human dynamics at play.</p>
<p>I've facilitated retrospectives for teams working on everything from Kubernetes clusters to React applications to PowerShell automation scripts. Some days I felt confident; other days I felt like I was drowning in acronyms and architecture diagrams.</p>
<p>The breakthrough came when I realized something crucial: <strong>the team doesn't need another technical expert — they need someone who can see the forest while they're focused on the trees.</strong></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-power-of-strategic-ignorance">The Power of Strategic Ignorance<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#the-power-of-strategic-ignorance" class="hash-link" aria-label="Direct link to The Power of Strategic Ignorance" title="Direct link to The Power of Strategic Ignorance" translate="no">​</a></h2>
<p>There's something liberating about admitting you don't know the technical details. It forces you to ask different questions:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>"Walk me through what happens when this breaks in production."</li>
<li>"Help me understand why this task keeps getting blocked."</li>
<li>"What would need to be true for this to be simpler?"</li>
<li>"Who else should be in this conversation?"</li>
</ul>
<p>These questions often lead to insights that pure technical knowledge might miss. You become the person who notices patterns across sprints, who spots communication gaps, who asks "Why are we doing this?" when everyone else is focused on "How do we do this?"</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="when-self-doubt-becomes-a-superpower">When Self-Doubt Becomes a Superpower<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#when-self-doubt-becomes-a-superpower" class="hash-link" aria-label="Direct link to When Self-Doubt Becomes a Superpower" title="Direct link to When Self-Doubt Becomes a Superpower" translate="no">​</a></h2>
<p>The irony is that those moments of self-doubt, the ones that make you question whether you belong, often make you a better Scrum Master. They keep you curious, humble, and focused on serving the team rather than proving your own worth.</p>
<p>I remember a particularly challenging retrospective where the team was frustrated with deployment issues. My first instinct was to apologize for not understanding their technical pain points. Instead, I leaned into my ignorance: "I need to understand this better. Can you draw the deployment process on the board and show me where things typically break?"</p>
<p>What followed was the most productive conversation that team had in months. By admitting I didn't understand, I created space for them to explain not just the technical process, but the frustrations, workarounds, and hidden assumptions that were actually causing their problems.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="practical-strategies-for-technical-confidence">Practical Strategies for Technical Confidence<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#practical-strategies-for-technical-confidence" class="hash-link" aria-label="Direct link to Practical Strategies for Technical Confidence" title="Direct link to Practical Strategies for Technical Confidence" translate="no">​</a></h2>
<p>Here's how to build confidence when leading technical teams without becoming a technical expert:</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="learn-the-language-not-the-implementation">Learn the Language, Not the Implementation<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#learn-the-language-not-the-implementation" class="hash-link" aria-label="Direct link to Learn the Language, Not the Implementation" title="Direct link to Learn the Language, Not the Implementation" translate="no">​</a></h3>
<p>You don't need to write unit tests, but you should understand why they matter. You don't need to architect microservices, but you should grasp how service dependencies affect delivery timelines.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="focus-on-flow-not-details">Focus on Flow, Not Details<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#focus-on-flow-not-details" class="hash-link" aria-label="Direct link to Focus on Flow, Not Details" title="Direct link to Focus on Flow, Not Details" translate="no">​</a></h3>
<p>Your job is to notice when work gets stuck, when handoffs break down, when the definition of done gets fuzzy. These are process problems, not technical problems.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ask-for-translations">Ask for Translations<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#ask-for-translations" class="hash-link" aria-label="Direct link to Ask for Translations" title="Direct link to Ask for Translations" translate="no">​</a></h3>
<p>"Help me understand this in business terms" is a powerful phrase. It forces the team to think about impact, not just implementation.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="become-an-expert-in-team-dynamics">Become an Expert in Team Dynamics<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#become-an-expert-in-team-dynamics" class="hash-link" aria-label="Direct link to Become an Expert in Team Dynamics" title="Direct link to Become an Expert in Team Dynamics" translate="no">​</a></h3>
<p>While they're optimizing algorithms, you're optimizing collaboration. Study facilitation techniques, conflict resolution, and group psychology.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-contradiction-that-actually-works">The Contradiction That Actually Works<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#the-contradiction-that-actually-works" class="hash-link" aria-label="Direct link to The Contradiction That Actually Works" title="Direct link to The Contradiction That Actually Works" translate="no">​</a></h2>
<p>The beautiful paradox of being a Scrum Master is that your effectiveness often comes from embracing what you don't know rather than pretending to know everything. The moment you try to be the smartest person in the room is the moment you stop being useful to the team.</p>
<p>Your authority doesn't come from technical expertise; it comes from your ability to create psychological safety, facilitate difficult conversations, and help the team see their own blind spots.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breakthrough-realizations-from-the-trenches">Breakthrough Realizations from the Trenches<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#breakthrough-realizations-from-the-trenches" class="hash-link" aria-label="Direct link to Breakthrough Realizations from the Trenches" title="Direct link to Breakthrough Realizations from the Trenches" translate="no">​</a></h2>
<p>After talking with other Scrum Masters, a few key insights emerged:</p>
<p><strong>The impostor feeling never fully goes away</strong> — it just becomes a signal that you're still growing and challenging yourself.</p>
<p><strong>Teams don't need you to solve their technical problems</strong> — they need you to help them solve their collaboration, communication, and process problems.</p>
<p><strong>Your questions are often more valuable than your answers</strong> — especially when those questions come from genuine curiosity rather than pretended expertise.</p>
<p><strong>The best Scrum Masters are translators</strong> — between business and technology, between individual concerns and team goals, between current state and desired outcomes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="making-peace-with-the-paradox">Making Peace with the Paradox<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#making-peace-with-the-paradox" class="hash-link" aria-label="Direct link to Making Peace with the Paradox" title="Direct link to Making Peace with the Paradox" translate="no">​</a></h2>
<p>Leading without authority while battling self-doubt isn't a bug in the Scrum Master role — it's a feature. It keeps you humble, curious, and focused on what really matters: helping teams deliver value while growing as individuals.</p>
<p>The next time you're in a sprint planning session and the conversation dives deep into technical architecture, remember: you're not there to debug the code. You're there to debug the process, facilitate the conversation, and ensure everyone leaves with clarity about what success looks like.</p>
<p>Your worth isn't measured in lines of code or system architecture knowledge. It's measured in healthier team dynamics, smoother delivery processes, and the growth you facilitate in others.</p>
<p>The contradiction isn't something to solve — it's something to embrace. Lead with curiosity, admit what you don't know, and trust that your unique perspective as an outsider looking in is exactly what the team needs.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="key-takeaways">Key Takeaways<a href="https://risadams.com/blog/2025/08/04/the-scrum-masters-paradox-leading-without-authority-while-battling-self-doubt#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Impostor syndrome is common among Scrum Masters, but it can become a strength when it keeps you curious and humble</li>
<li>You don't need deep technical knowledge to lead technical teams effectively. You need process insight and facilitation skills</li>
<li>The best questions often come from admitting what you don't understand</li>
<li>Your authority comes from serving the team, not from being the smartest person in the room</li>
<li>Strategic ignorance can lead to breakthrough insights that technical expertise might miss</li>
</ul>
<p>The teams you serve don't need another technical expert. They need someone who can see the human side of technical work and help them navigate the complexity of building software together. That's not an easy job, but it's exactly the job they need you to do.</p>]]></content:encoded>
            <category>scrum</category>
            <category>agile</category>
            <category>leadership</category>
            <category>imposter-syndrome</category>
            <category>doubt</category>
            <category>motivation</category>
        </item>
        <item>
            <title><![CDATA[Courage as a Scrum Value: The Catalyst for Real Transparency]]></title>
            <link>https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value</link>
            <guid>https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value</guid>
            <pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[How the Scrum value of Courage transforms transparency from corporate theater into genuine workflow visibility that drives better outcomes.]]></description>
            <content:encoded><![CDATA[<p>You know that uncomfortable moment in standup when someone says "everything's fine" while their face screams otherwise? That's transparency without courage—and it's killing your sprint predictability. The Scrum value of Courage isn't just a feel-good principle; it's the psychological foundation that makes real transparency possible.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-down-the-courage-transparency-connection">Breaking Down the Courage-Transparency Connection<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#breaking-down-the-courage-transparency-connection" class="hash-link" aria-label="Direct link to Breaking Down the Courage-Transparency Connection" title="Direct link to Breaking Down the Courage-Transparency Connection" translate="no">​</a></h2>
<p>Here's what most teams miss: Courage enables the uncomfortable conversations that surface real issues. When team members feel safe to speak up about blockers, technical debt, or unrealistic expectations, the actual state of work becomes visible rather than hidden behind optimistic status reports.</p>
<p>It drives honest estimation and commitment. Teams with courage will push back on unrealistic sprint goals instead of quietly accepting them and failing later. This creates realistic velocity tracking and predictable delivery patterns.</p>
<p>Think of courage as the circuit breaker that prevents transparency theater. Without it, you get beautifully crafted reports that tell you nothing useful about whether you'll actually ship on time.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="practical-ways-courage-increases-transparency">Practical Ways Courage Increases Transparency<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#practical-ways-courage-increases-transparency" class="hash-link" aria-label="Direct link to Practical Ways Courage Increases Transparency" title="Direct link to Practical Ways Courage Increases Transparency" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="during-sprint-events">During Sprint Events<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#during-sprint-events" class="hash-link" aria-label="Direct link to During Sprint Events" title="Direct link to During Sprint Events" translate="no">​</a></h3>
<p><strong>Daily Standups</strong>: Team members admit when they're stuck instead of saying "everything's fine." This shifts the conversation from status theater to actual problem-solving.</p>
<p><strong>Sprint Reviews</strong>: Honest demos that show incomplete features rather than polished presentations. Stakeholders see reality instead of carefully curated success stories.</p>
<p><strong>Retrospectives</strong>: Real discussion of systemic issues instead of surface-level complaints about coffee quality or meeting room temperature.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="in-day-to-day-work-management">In Day-to-Day Work Management<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#in-day-to-day-work-management" class="hash-link" aria-label="Direct link to In Day-to-Day Work Management" title="Direct link to In Day-to-Day Work Management" translate="no">​</a></h3>
<p><strong>Impediment Visibility</strong>: Courage to escalate blockers immediately rather than hoping they'll resolve themselves. This prevents small issues from becoming sprint-killing problems.</p>
<p><strong>Technical Debt Acknowledgment</strong>: Developers speak up about code quality issues before they become critical. "This works, but here's how I'd tighten it up" becomes a regular conversation starter.</p>
<p><strong>Capacity Reality</strong>: Team members communicate actual availability instead of overcommitting. No more "I can totally handle three more story points" when everyone knows that's not realistic.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-ripple-effect-that-changes-everything">The Ripple Effect That Changes Everything<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#the-ripple-effect-that-changes-everything" class="hash-link" aria-label="Direct link to The Ripple Effect That Changes Everything" title="Direct link to The Ripple Effect That Changes Everything" translate="no">​</a></h2>
<p>When one person demonstrates courage by being transparent about challenges, it creates permission for others to do the same. This builds a culture where:</p>
<style data-jsx="true" data-global="true">.contains-task-list{list-style:none}:not(.contains-task-list>li)>.contains-task-list{padding-left:0}</style><ul>
<li>Sprint burndown charts reflect reality instead of wishful thinking</li>
<li>Definition of Done isn't compromised for the sake of "completion"</li>
<li>Stakeholders receive accurate progress updates that help them make better decisions</li>
<li>Teams can actually improve because they're working with real data</li>
</ul>
<p>Here's the playbook I'd run: Start small. In your next standup, be the first person to admit you're genuinely stuck on something. Watch how quickly others follow suit with their own honest updates.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="making-courage-practical">Making Courage Practical<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#making-courage-practical" class="hash-link" aria-label="Direct link to Making Courage Practical" title="Direct link to Making Courage Practical" translate="no">​</a></h2>
<p>You've got a few good options for building this into your team culture:</p>
<p><strong>Normalize struggle</strong>: Make it clear that being stuck isn't a personal failing—it's information the team needs to succeed.</p>
<p><strong>Reward transparency</strong>: When someone surfaces a problem early, thank them publicly. This reinforces that courage is valued, not punished.</p>
<p><strong>Model vulnerability</strong>: As a Scrum Master or team lead, share your own challenges and uncertainties. If leadership can be transparent, everyone else gets permission to follow.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-bottom-line">The Bottom Line<a href="https://risadams.com/blog/2025/07/14/courage-as-a-scrum-value#the-bottom-line" class="hash-link" aria-label="Direct link to The Bottom Line" title="Direct link to The Bottom Line" translate="no">​</a></h2>
<p>Courage transforms transparency from a nice-to-have into a lived practice. Without it, you get theater instead of genuine visibility into your workflow. And let's be honest—theater doesn't ship working software.</p>
<p>The teams that master this combination don't just deliver more predictably; they deliver better. When people feel safe to surface problems early, you catch issues while they're still manageable instead of discovering them during demos.</p>]]></content:encoded>
            <category>agile</category>
            <category>scrum</category>
            <category>courage</category>
            <category>transparency</category>
            <category>leadership</category>
            <category>team-dynamics</category>
        </item>
    </channel>
</rss>