<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Metrics on gh-velocity</title><link>https://gh-velocity.org/reference/metrics/</link><description>Recent content in Metrics on gh-velocity</description><generator>Hugo</generator><language>en</language><atom:link href="https://gh-velocity.org/reference/metrics/index.xml" rel="self" type="application/rss+xml"/><item><title>Lead Time</title><link>https://gh-velocity.org/reference/metrics/lead-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/lead-time/</guid><description>&lt;h1 id="lead-time"&gt;Lead Time&lt;a class="anchor" href="#lead-time"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Lead time is the total elapsed time from issue creation to closure. It includes time in backlog, waiting for prioritization, blocked by dependencies, in active development, in review, and waiting for release.&lt;/p&gt;
&lt;h2 id="definition"&gt;Definition&lt;a class="anchor" href="#definition"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lead_time = issue.closed_at - issue.created_at&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Start signal&lt;/strong&gt;: &lt;code&gt;issue-created&lt;/code&gt; -- the timestamp when the GitHub issue was opened.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;End signal&lt;/strong&gt;: &lt;code&gt;issue-closed&lt;/code&gt; -- the timestamp when the issue was closed (by any means: a merged PR, manual close, or bot).&lt;/p&gt;</description></item><item><title>Cycle Time</title><link>https://gh-velocity.org/reference/metrics/cycle-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/cycle-time/</guid><description>&lt;h1 id="cycle-time"&gt;Cycle Time&lt;a class="anchor" href="#cycle-time"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cycle time measures how long active work took on an issue. Unlike &lt;a href="https://gh-velocity.org/reference/metrics/lead-time/"&gt;lead time&lt;/a&gt;, which includes all waiting time from creation, cycle time starts when work begins.&lt;/p&gt;
&lt;p&gt;Two strategies detect when work starts.&lt;/p&gt;
&lt;h2 id="what-it-tells-you"&gt;What it tells you&lt;a class="anchor" href="#what-it-tells-you"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cycle time reveals how long active work takes, stripped of backlog wait time. A low, consistent cycle time means the team delivers quickly once work begins. High variability suggests inconsistent scope or frequent context-switching.&lt;/p&gt;</description></item><item><title>Velocity</title><link>https://gh-velocity.org/reference/metrics/velocity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/velocity/</guid><description>&lt;h1 id="velocity"&gt;Velocity&lt;a class="anchor" href="#velocity"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Velocity measures effort completed per iteration (sprint). It tracks how much work finishes each cycle to reveal trends and consistency.&lt;/p&gt;
&lt;h2 id="definition"&gt;Definition&lt;a class="anchor" href="#definition"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;velocity = sum(effort) for items completed in the iteration
completion_rate = velocity / committed_effort * 100&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Velocity&lt;/strong&gt; is the total effort of items that are &amp;quot;done&amp;quot; within an iteration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Committed effort&lt;/strong&gt; is the total effort of all items assigned to the iteration (done or not).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Completion rate&lt;/strong&gt; is the percentage of committed effort that was actually completed. If committed effort is 0, completion rate is omitted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An item is &amp;quot;done&amp;quot; when:&lt;/p&gt;</description></item><item><title>Throughput</title><link>https://gh-velocity.org/reference/metrics/throughput/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/throughput/</guid><description>&lt;h1 id="throughput"&gt;Throughput&lt;a class="anchor" href="#throughput"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Throughput counts issues closed and PRs merged within a time window -- the simplest measure of delivery rate.&lt;/p&gt;
&lt;h2 id="definition"&gt;Definition&lt;a class="anchor" href="#definition"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;throughput_issues = count(issues closed in window)
throughput_prs = count(PRs merged in window)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unweighted: every closed issue and every merged PR counts as 1, regardless of size, complexity, or effort.&lt;/p&gt;
&lt;h2 id="throughput-vs-velocity"&gt;Throughput vs. velocity&lt;a class="anchor" href="#throughput-vs-velocity"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Throughput and &lt;a href="https://gh-velocity.org/reference/metrics/velocity/"&gt;velocity&lt;/a&gt; both measure output, but they differ in two ways:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Dimension&lt;/th&gt;
 &lt;th&gt;Throughput&lt;/th&gt;
 &lt;th&gt;Velocity&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Weighting&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Every item = 1&lt;/td&gt;
 &lt;td&gt;Items weighted by effort strategy (count, attribute, or numeric)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Time boundary&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Arbitrary date range (&lt;code&gt;--since&lt;/code&gt; / &lt;code&gt;--until&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Iteration-aligned (sprint boundaries)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Throughput is useful without sprints or effort estimates. Velocity is useful for tracking effort-weighted output across consistent iteration boundaries.&lt;/p&gt;</description></item><item><title>Quality</title><link>https://gh-velocity.org/reference/metrics/quality/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/quality/</guid><description>&lt;h1 id="quality-metrics"&gt;Quality Metrics&lt;a class="anchor" href="#quality-metrics"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Quality metrics analyze the composition and health of a release. They answer: &amp;quot;What did this release contain, and how healthy was the release process?&amp;quot;&lt;/p&gt;
&lt;h2 id="what-this-tells-you"&gt;What this tells you&lt;a class="anchor" href="#what-this-tells-you"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These metrics reveal whether the team is shipping improvements or fighting fires. A rising bug ratio signals growing technical debt. Frequent hotfixes suggest inadequate testing or overly aggressive release schedules. High release lag means finished work sits unreleased, increasing the risk of stale branches and merge conflicts.&lt;/p&gt;</description></item><item><title>Staleness</title><link>https://gh-velocity.org/reference/metrics/staleness/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gh-velocity.org/reference/metrics/staleness/</guid><description>&lt;h1 id="staleness"&gt;Staleness&lt;a class="anchor" href="#staleness"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Staleness measures how recently a work item had activity. It applies to open items in the WIP report.&lt;/p&gt;
&lt;h2 id="signals"&gt;Signals&lt;a class="anchor" href="#signals"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Signal&lt;/th&gt;
 &lt;th&gt;Threshold&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ACTIVE&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Updated &amp;lt; 3 days ago&lt;/td&gt;
 &lt;td&gt;Normal activity, no concern&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;AGING&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Updated 3-7 days ago&lt;/td&gt;
 &lt;td&gt;May need attention&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;STALE&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Updated &amp;gt; 7 days ago&lt;/td&gt;
 &lt;td&gt;Likely blocked or abandoned&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="calculation"&gt;Calculation&lt;a class="anchor" href="#calculation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;staleness = now - item.updated_at&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;updated_at&lt;/code&gt; is GitHub's last activity timestamp (comments, commits, label changes, status changes)&lt;/li&gt;
&lt;li&gt;Thresholds are currently fixed (not configurable)&lt;/li&gt;
&lt;li&gt;Staleness is computed at query time, not cached&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wip-staleness-ratio"&gt;WIP staleness ratio&lt;a class="anchor" href="#wip-staleness-ratio"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;stale_ratio = stale_items / total_wip_items&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A high stale ratio (&amp;gt;30%) suggests systemic flow problems -- items are being started but not finished.&lt;/p&gt;</description></item></channel></rss>