<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Oskar Reyes</title>
    <description>The latest articles on DEV Community by Oskar Reyes (@oskarreyesdev).</description>
    <link>https://dev.to/oskarreyesdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4053712%2Faaefc268-e259-4c64-b27f-1f17dc3d5647.png</url>
      <title>DEV Community: Oskar Reyes</title>
      <link>https://dev.to/oskarreyesdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oskarreyesdev"/>
    <language>en</language>
    <item>
      <title>Jira Shows Tickets, Not Truth</title>
      <dc:creator>Oskar Reyes</dc:creator>
      <pubDate>Thu, 30 Jul 2026 04:39:05 +0000</pubDate>
      <link>https://dev.to/oskarreyesdev/jira-shows-tickets-not-truth-4bi7</link>
      <guid>https://dev.to/oskarreyesdev/jira-shows-tickets-not-truth-4bi7</guid>
      <description>&lt;p&gt;&lt;em&gt;Cross-posted from the &lt;a href="https://blog.koardy.com/blog/jira-shows-tickets-not-truth/" rel="noopener noreferrer"&gt;Kahoona blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask any engineering lead two questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What does your project board say is in progress right now?&lt;/li&gt;
&lt;li&gt;What did your team actually merge in the last 48 hours?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If those answers match, your team is the exception. For most, the board is a work of historical fiction — updated in standups, polished before reviews, and quietly diverging from the repo the rest of the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the drift is structural, not personal
&lt;/h2&gt;

&lt;p&gt;Ticket trackers only know what humans type into them. Engineers, correctly, prioritize shipping over bookkeeping. So the card moves when someone remembers — usually right before the meeting where it'll be discussed. Multiply by every task and every day, and the board becomes a lagging indicator of what people &lt;em&gt;reported&lt;/em&gt;, not what shipped.&lt;/p&gt;

&lt;p&gt;The failure modes are always the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"In review" for nine days&lt;/strong&gt; — the PR merged a week ago; nobody moved the card.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Almost done"&lt;/strong&gt; — the card moved; the code is on a branch that hasn't seen a commit since Tuesday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Done-but-not&lt;/strong&gt; — ticket closed, CI red, feature flagged off, customer sees nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the gap costs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Status meetings exist to reconcile it.&lt;/strong&gt; Most standups and status calls are just diff-checking the board against reality, verbally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leads make decisions on stale data.&lt;/strong&gt; Hiring, deadlines, scope — all priced off a board that's days behind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust erodes in both directions.&lt;/strong&gt; Engineers feel surveilled; managers feel lied to. Nobody is lying. The &lt;em&gt;system&lt;/em&gt; is lying.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The fix: make the repo the source of truth
&lt;/h2&gt;

&lt;p&gt;Code doesn't forget to update its status. A merged PR is done. A failing CI run is not. A branch with no commits in five days is stalled, whatever the card says.&lt;/p&gt;

&lt;p&gt;So the habit is simple to state: &lt;strong&gt;stop asking people to report status, and start reading status from the artifacts.&lt;/strong&gt; Put commits, PRs, and CI next to the tasks they belong to, and the board stays honest with zero bookkeeping.&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;a href="https://kahoona.app" rel="noopener noreferrer"&gt;Kahoona&lt;/a&gt; does — whiteboard, project board, and live GitHub activity in one workspace. Point it at your repo and your first project builds itself in ~30 seconds. Free to start.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://kahoona.app" rel="noopener noreferrer"&gt;See what your team is actually shipping&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Full disclosure: I'm building Kahoona. More field notes on the &lt;a href="https://blog.koardy.com/" rel="noopener noreferrer"&gt;Kahoona blog&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Go deeper: &lt;a href="https://blog.koardy.com/blog/how-to-run-async-standups-from-github-activity/" rel="noopener noreferrer"&gt;How to run async standups from your GitHub activity&lt;/a&gt; · &lt;a href="https://blog.koardy.com/blog/best-jira-alternatives-small-dev-teams-2026/" rel="noopener noreferrer"&gt;9 best Jira alternatives for small dev teams&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jira</category>
      <category>projectmanagement</category>
      <category>agile</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Run Async Standups From Your GitHub Activity</title>
      <dc:creator>Oskar Reyes</dc:creator>
      <pubDate>Thu, 30 Jul 2026 04:38:57 +0000</pubDate>
      <link>https://dev.to/oskarreyesdev/how-to-run-async-standups-from-your-github-activity-4o3k</link>
      <guid>https://dev.to/oskarreyesdev/how-to-run-async-standups-from-your-github-activity-4o3k</guid>
      <description>&lt;p&gt;&lt;em&gt;Cross-posted from the &lt;a href="https://blog.koardy.com/blog/how-to-run-async-standups-from-github-activity/" rel="noopener noreferrer"&gt;Kahoona blog&lt;/a&gt;, where I write about how small dev teams stay in sync.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The daily standup has a dirty secret: nobody gets useful information from it. Engineers recite what they did (which is already in GitHub), what they'll do (which is already on the board), and blockers (which should have been raised the moment they happened, not 14 hours later at 9:30 AM). Then everyone loses their flow state and doesn't get it back until lunch.&lt;/p&gt;

&lt;p&gt;Async standups fix this by moving the update from a meeting to a written artifact. This guide is the exact system — including the part most guides skip, which is that the best async standup &lt;strong&gt;writes itself from your GitHub activity&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the standup meeting fails
&lt;/h2&gt;

&lt;p&gt;Three structural problems, none fixable by "making standup more disciplined":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It interrupts maker time.&lt;/strong&gt; A 15-minute meeting at 9:30 destroys the morning's first deep-work block for every attendee. Research on context switching consistently prices this at far more than the meeting itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The information is already stale or already known.&lt;/strong&gt; "Yesterday I worked on the auth refactor" — yes, we can see the commits. "Today I'll continue" — yes, it's the top card on the board.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blockers wait for the meeting.&lt;/strong&gt; The one genuinely useful standup output is also the one that least needs a meeting. A blocker raised in Slack at 2 PM gets solved at 2 PM. A blocker saved for standup gets solved tomorrow.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The async standup format that actually works
&lt;/h2&gt;

&lt;p&gt;The good async standup has four properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Written, in a durable place&lt;/strong&gt; — searchable history beats spoken memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On the author's schedule&lt;/strong&gt; — post when you start work, in your timezone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anchored to artifacts, not memory&lt;/strong&gt; — link the PR, the commit, the ticket. Claims age badly; artifacts don't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blockers get their own channel with real urgency&lt;/strong&gt; — not a line item in a daily template.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A minimal template per person, per day:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Shipped: &amp;lt;links to merged PRs / commits&amp;gt;
In flight: &amp;lt;link to current work item + % done if useful&amp;gt;
Blocked on: &amp;lt;nothing | link + what you need and from whom&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. If someone writes more than five lines, something's wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-step: switching in one week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Day 1 — Pick the channel and the template.&lt;/strong&gt; One Slack/Discord channel, one pinned template. Announce that Friday's standup is the last live one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 2 — Run both.&lt;/strong&gt; People post their async update &lt;em&gt;and&lt;/em&gt; attend standup. Feels redundant. That's the point — it demonstrates how little the meeting adds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 3 — Lead by example.&lt;/strong&gt; Whoever runs standup posts their update first thing and reacts to others' posts. Blockers get handled inline, in public, same day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 4 — First fully async day.&lt;/strong&gt; No meeting. Post by your local 10 AM. The sky will not fall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 5 — Review honestly.&lt;/strong&gt; What was missing? Usually the answer is "the social bit" — replace it deliberately (a weekly coffee chat) rather than letting it resurrect the daily meeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The upgrade: let GitHub write the update for you
&lt;/h2&gt;

&lt;p&gt;Here's the thing most async-standup guides miss: the template above still asks engineers to &lt;em&gt;remember and type&lt;/em&gt;. Two of its three sections are just a summary of what GitHub already knows.&lt;/p&gt;

&lt;p&gt;Your repo already records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shipped&lt;/strong&gt; → merged PRs and commits since yesterday&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In flight&lt;/strong&gt; → open PRs, recent branch pushes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stalled&lt;/strong&gt; → PRs with no activity in N days, failing CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of asking people to transcribe their activity, put the activity where the standup is. Two ways to do it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A — the DIY route.&lt;/strong&gt; A scheduled GitHub Action or Slack workflow that posts each person's merged PRs and open PRs into the standup channel every morning. Humans only add blockers and context. Works, costs you an afternoon of YAML, and breaks quietly when tokens expire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B — the Kahoona route.&lt;/strong&gt; &lt;a href="https://kahoona.app" rel="noopener noreferrer"&gt;Kahoona&lt;/a&gt; streams commits, PRs, and CI directly into your project board, next to the tasks they belong to. The "async standup" becomes: open the board, read what actually happened since yesterday, spend five minutes on the two things that are genuinely stuck. Setup is pointing it at your repo — about 30 seconds — and the first project builds itself from your history.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://kahoona.app" rel="noopener noreferrer"&gt;Try Kahoona free — your standup already exists in your repo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Full disclosure: I'm building Kahoona, and I write about this stuff on the &lt;a href="https://blog.koardy.com/" rel="noopener noreferrer"&gt;Kahoona blog&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common failure modes (and fixes)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Nobody reads the updates."&lt;/strong&gt; Your updates are too long or too vague. Anchor to artifacts — a link to a merged PR is readable; a paragraph about "progress on the refactor" isn't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Updates say 'working on X' three days in a row."&lt;/strong&gt; That's not an async problem, that's a stuck-work problem the meeting was hiding. Good — now it's visible. Swarm it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Management wants the meeting back."&lt;/strong&gt; Give them a dashboard, not a calendar slot. If the board reflects live repo activity, they'll stop asking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"We lost the team bonding."&lt;/strong&gt; Real. Replace it on purpose: one weekly social call, and use the time you saved (each person gets back ~4 hours a month) for something that actually bonds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Async standups work when they're anchored to artifacts instead of memory. Your GitHub activity &lt;em&gt;is&lt;/em&gt; the status update — the only question is whether your team reads it there, or pays a daily meeting to have people recite it from memory.&lt;/p&gt;

&lt;p&gt;Start with the template in a Slack channel this week. If you want the updates to write themselves, &lt;a href="https://kahoona.app" rel="noopener noreferrer"&gt;point Kahoona at your repo&lt;/a&gt; and read the board instead — free to start, $5 a seat if it sticks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Related on the Kahoona blog: &lt;a href="https://blog.koardy.com/blog/jira-shows-tickets-not-truth/" rel="noopener noreferrer"&gt;Jira shows tickets, not truth&lt;/a&gt; · &lt;a href="https://blog.koardy.com/blog/best-jira-alternatives-small-dev-teams-2026/" rel="noopener noreferrer"&gt;9 best Jira alternatives for small dev teams&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>productivity</category>
      <category>standup</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
