<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Charting Waterloo Region</title>
<link>https://chartingwaterlooregion.ca/</link>
<atom:link href="https://chartingwaterlooregion.ca/index.xml" rel="self" type="application/rss+xml"/>
<description>Charts and plain-language analysis about life in Waterloo Region, built from open data.</description>
<image>
<url>https://chartingwaterlooregion.ca/images/social-card.png</url>
<title>Charting Waterloo Region</title>
<link>https://chartingwaterlooregion.ca/</link>
<height>76</height>
<width>144</width>
</image>
<generator>quarto-1.9.38</generator>
<lastBuildDate>Mon, 07 Sep 2026 04:00:00 GMT</lastBuildDate>
<item>
  <title>Kitchener is answering the phone slower than it used to</title>
  <dc:creator>Greg Berberich</dc:creator>
  <link>https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/</link>
  <description><![CDATA[ 





<p>Call the City of Kitchener on a weekday and the odds of someone picking up within half a minute have fallen from 80% in 2019 to 69% in 2023. The average wait in the queue went from 26 seconds to 58 seconds. Call volumes barely moved over the same period, so the slowdown is not a story about more people phoning in.</p>
<section id="the-80-target-held-until-2021-then-slipped" class="level2">
<h2 class="anchored" data-anchor-id="the-80-target-held-until-2021-then-slipped">The 80% target held until 2021, then slipped</h2>
<p>The City measures itself against a common contact-centre yardstick: answer 80% of calls within 30 seconds. On weekdays in 2019 it met that target almost exactly. Through the first two pandemic years it stayed close, with the best months of all in the quiet January and February of 2020 and 2021, when more than 90% of calls were answered on time.</p>
<p>The break came in 2022. Every month that year was below target, and June 2020 was the low point, with 60% of calls answered within 30 seconds. The first seven months of 2023 look much like 2022.</p>
<div id="fig-answered" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-answered-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p><picture> <source media="(max-width: 767px)" srcset="figures/fig-answered-phone.png" width="403" height="432"> <img src="https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/figures/fig-answered.png" alt="Line chart of the monthly share of calls answered within 30 seconds. The line sits near the 80% target through 2019, 2020 and 2021 with a dip in mid-2020, then drops below the target for all of 2022 and 2023, reaching a low near 60% in May 2022." class="img-fluid figure-img" width="797" height="480"> </picture></p>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-answered-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1: Share of weekday calls to the City of Kitchener answered within 30 seconds, by month, March 2019 to July 2023.
</figcaption>
</figure>
</div>
</section>
<section id="the-average-wait-more-than-doubled" class="level2">
<h2 class="anchored" data-anchor-id="the-average-wait-more-than-doubled">The average wait more than doubled</h2>
<p>Averages hide a lot in a phone queue, since most calls are answered quickly and a few wait a very long time. Even so, the direction is clear. A weekday caller in 2019 waited 26 seconds on average. In 2022 that was 63 seconds, and the first seven months of 2023 averaged 58 seconds.</p>
<p>Volume does not explain it. The centre handled 329 calls on a typical weekday in 2019 and 351 in 2023, a rise of 7%. The data says nothing about staffing, which is the obvious place to look next.</p>
<div id="fig-wait" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-wait-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p><picture> <source media="(max-width: 767px)" srcset="figures/fig-wait-phone.png" width="403" height="365"> <img src="https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/figures/fig-wait.png" alt="Bar chart of average queue time by year: about 26 seconds in 2019, 29 in 2020, 37 in 2021, 63 in 2022 and 58 in the first seven months of 2023." class="img-fluid figure-img" width="797" height="384"> </picture></p>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-wait-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;2: Average time a weekday caller spent waiting in the City of Kitchener phone queue, by year. 2023 covers January to July.
</figcaption>
</figure>
</div>
</section>
<section id="early-summer-is-the-crunch" class="level2">
<h2 class="anchored" data-anchor-id="early-summer-is-the-crunch">Early summer is the crunch</h2>
<p>Whatever the year, the phones are busiest in June and quietest in December, and the answer rate follows the volume: over the whole period, 69% of June calls were answered on time against 81% in January. Property tax bills, summer recreation registration and moving season all land in the same few weeks. A centre that just meets its target in a quiet month will miss it in a busy one unless staffing moves with the calendar.</p>
<div id="fig-season" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-season-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<p><picture> <source media="(max-width: 767px)" srcset="figures/fig-season-phone.png" width="403" height="384"> <img src="https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/figures/fig-season.png" alt="Bar chart of average weekday calls by month of the year. Calls climb from under 300 a day in December and January to a peak near 400 in June, then fall through the autumn. June and July are highlighted." class="img-fluid figure-img" width="797" height="384"> </picture></p>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-season-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;3: Average number of calls presented to the City of Kitchener phone queue on a weekday, by month of the year, March 2019 to July 2023.
</figcaption>
</figure>
</div>
</section>
<section id="data-and-methods" class="level2">
<h2 class="anchored" data-anchor-id="data-and-methods">Data and methods</h2>
<p>The City of Kitchener publishes daily metrics for its main phone queue on its open data portal. This post uses the export covering 26 February 2019 to 30 July 2023, the full range available when it was downloaded in February 2025. Days with an incomplete or duplicated set of metrics (14 of about 1,600) and the partial first month were dropped.</p>
<p>All figures are weekdays excluding Ontario statutory holidays. Weekend and holiday volumes run at roughly 31% of a weekday, on a reduced service, and would flatter every average.</p>
<p>“Answered within 30 seconds” is the share of all calls presented that an agent picked up inside the target, so a caller who hung up while waiting counts as a miss. The City also reports three gentler versions of the same measure, all included in the download below. Waits are the daily average queue time weighted by the number of calls that day.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center collapsed" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Reproducibility and data download
</div>
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
</div>
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
<div class="callout-body-container callout-body">
<p>Code and data for this post: <a href="https://github.com/gpberber/chartingwaterlooregion/tree/master/posts/kitchener-phone-wait-times"><code>posts/kitchener-phone-wait-times/</code></a> on GitHub. See <a href="../../reproduce.html">Reproduce a post</a> for the steps.</p>
<p><strong>Download the data:</strong> <a href="https://github.com/gpberber/chartingwaterlooregion/releases/download/data-kitchener-phone-wait-times-v1/kitchener-phone-wait-times-data-v1.zip">kitchener-phone-wait-times-data-v1.zip</a> holds every table used in this post as CSV and Parquet files, an Excel workbook, the data dictionary below, and a README with sources and licences.</p>
<div class="cell">
<div id="tbl-dictionary" class="cell quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-tbl figure">
<div aria-describedby="tbl-dictionary-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<div class="cell-output-display">
<div id="wpqztykzct" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
<style>#wpqztykzct table {
  font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

#wpqztykzct thead, #wpqztykzct tbody, #wpqztykzct tfoot, #wpqztykzct tr, #wpqztykzct td, #wpqztykzct th {
  border-style: none;
}

#wpqztykzct p {
  margin: 0;
  padding: 0;
}

#wpqztykzct .gt_table {
  display: table;
  border-collapse: collapse;
  line-height: normal;
  margin-left: auto;
  margin-right: auto;
  color: #333333;
  font-size: 13px;
  font-weight: normal;
  font-style: normal;
  background-color: #FFFFFF;
  width: auto;
  border-top-style: solid;
  border-top-width: 2px;
  border-top-color: #A8A8A8;
  border-right-style: none;
  border-right-width: 2px;
  border-right-color: #D3D3D3;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #A8A8A8;
  border-left-style: none;
  border-left-width: 2px;
  border-left-color: #D3D3D3;
}

#wpqztykzct .gt_caption {
  padding-top: 4px;
  padding-bottom: 4px;
}

#wpqztykzct .gt_title {
  color: #333333;
  font-size: 125%;
  font-weight: initial;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 5px;
  padding-right: 5px;
  border-bottom-color: #FFFFFF;
  border-bottom-width: 0;
}

#wpqztykzct .gt_subtitle {
  color: #333333;
  font-size: 85%;
  font-weight: initial;
  padding-top: 3px;
  padding-bottom: 5px;
  padding-left: 5px;
  padding-right: 5px;
  border-top-color: #FFFFFF;
  border-top-width: 0;
}

#wpqztykzct .gt_heading {
  background-color: #FFFFFF;
  text-align: center;
  border-bottom-color: #FFFFFF;
  border-left-style: none;
  border-left-width: 1px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 1px;
  border-right-color: #D3D3D3;
}

#wpqztykzct .gt_bottom_border {
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
}

#wpqztykzct .gt_col_headings {
  border-top-style: solid;
  border-top-width: 2px;
  border-top-color: #D3D3D3;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  border-left-style: none;
  border-left-width: 1px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 1px;
  border-right-color: #D3D3D3;
}

#wpqztykzct .gt_col_heading {
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: normal;
  text-transform: inherit;
  border-left-style: none;
  border-left-width: 1px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 1px;
  border-right-color: #D3D3D3;
  vertical-align: bottom;
  padding-top: 5px;
  padding-bottom: 6px;
  padding-left: 5px;
  padding-right: 5px;
  overflow-x: hidden;
}

#wpqztykzct .gt_column_spanner_outer {
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: normal;
  text-transform: inherit;
  padding-top: 0;
  padding-bottom: 0;
  padding-left: 4px;
  padding-right: 4px;
}

#wpqztykzct .gt_column_spanner_outer:first-child {
  padding-left: 0;
}

#wpqztykzct .gt_column_spanner_outer:last-child {
  padding-right: 0;
}

#wpqztykzct .gt_column_spanner {
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  vertical-align: bottom;
  padding-top: 5px;
  padding-bottom: 5px;
  overflow-x: hidden;
  display: inline-block;
  width: 100%;
}

#wpqztykzct .gt_spanner_row {
  border-bottom-style: hidden;
}

#wpqztykzct .gt_group_heading {
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: initial;
  text-transform: inherit;
  border-top-style: solid;
  border-top-width: 2px;
  border-top-color: #D3D3D3;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  border-left-style: none;
  border-left-width: 1px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 1px;
  border-right-color: #D3D3D3;
  vertical-align: middle;
  text-align: left;
}

#wpqztykzct .gt_empty_group_heading {
  padding: 0.5px;
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: initial;
  border-top-style: solid;
  border-top-width: 2px;
  border-top-color: #D3D3D3;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  vertical-align: middle;
}

#wpqztykzct .gt_from_md > :first-child {
  margin-top: 0;
}

#wpqztykzct .gt_from_md > :last-child {
  margin-bottom: 0;
}

#wpqztykzct .gt_row {
  padding-top: 3px;
  padding-bottom: 3px;
  padding-left: 5px;
  padding-right: 5px;
  margin: 10px;
  border-top-style: solid;
  border-top-width: 1px;
  border-top-color: #D3D3D3;
  border-left-style: none;
  border-left-width: 1px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 1px;
  border-right-color: #D3D3D3;
  vertical-align: middle;
  overflow-x: hidden;
}

#wpqztykzct .gt_stub {
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: initial;
  text-transform: inherit;
  border-right-style: solid;
  border-right-width: 2px;
  border-right-color: #D3D3D3;
  padding-left: 5px;
  padding-right: 5px;
}

#wpqztykzct .gt_stub_row_group {
  color: #333333;
  background-color: #FFFFFF;
  font-size: 100%;
  font-weight: initial;
  text-transform: inherit;
  border-right-style: solid;
  border-right-width: 2px;
  border-right-color: #D3D3D3;
  padding-left: 5px;
  padding-right: 5px;
  vertical-align: top;
}

#wpqztykzct .gt_row_group_first td {
  border-top-width: 2px;
}

#wpqztykzct .gt_row_group_first th {
  border-top-width: 2px;
}

#wpqztykzct .gt_summary_row {
  color: #333333;
  background-color: #FFFFFF;
  text-transform: inherit;
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
}

#wpqztykzct .gt_first_summary_row {
  border-top-style: solid;
  border-top-color: #D3D3D3;
}

#wpqztykzct .gt_first_summary_row.thick {
  border-top-width: 2px;
}

#wpqztykzct .gt_last_summary_row {
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
}

#wpqztykzct .gt_grand_summary_row {
  color: #333333;
  background-color: #FFFFFF;
  text-transform: inherit;
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
}

#wpqztykzct .gt_first_grand_summary_row {
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
  border-top-style: double;
  border-top-width: 6px;
  border-top-color: #D3D3D3;
}

#wpqztykzct .gt_last_grand_summary_row_top {
  padding-top: 8px;
  padding-bottom: 8px;
  padding-left: 5px;
  padding-right: 5px;
  border-bottom-style: double;
  border-bottom-width: 6px;
  border-bottom-color: #D3D3D3;
}

#wpqztykzct .gt_striped {
  background-color: rgba(128, 128, 128, 0.05);
}

#wpqztykzct .gt_table_body {
  border-top-style: solid;
  border-top-width: 2px;
  border-top-color: #D3D3D3;
  border-bottom-style: solid;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
}

#wpqztykzct .gt_footnotes {
  color: #333333;
  background-color: #FFFFFF;
  border-bottom-style: none;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  border-left-style: none;
  border-left-width: 2px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 2px;
  border-right-color: #D3D3D3;
}

#wpqztykzct .gt_footnote {
  margin: 0px;
  font-size: 90%;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 5px;
  padding-right: 5px;
}

#wpqztykzct .gt_sourcenotes {
  color: #333333;
  background-color: #FFFFFF;
  border-bottom-style: none;
  border-bottom-width: 2px;
  border-bottom-color: #D3D3D3;
  border-left-style: none;
  border-left-width: 2px;
  border-left-color: #D3D3D3;
  border-right-style: none;
  border-right-width: 2px;
  border-right-color: #D3D3D3;
}

#wpqztykzct .gt_sourcenote {
  font-size: 90%;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 5px;
  padding-right: 5px;
}

#wpqztykzct .gt_left {
  text-align: left;
}

#wpqztykzct .gt_center {
  text-align: center;
}

#wpqztykzct .gt_right {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

#wpqztykzct .gt_font_normal {
  font-weight: normal;
}

#wpqztykzct .gt_font_bold {
  font-weight: bold;
}

#wpqztykzct .gt_font_italic {
  font-style: italic;
}

#wpqztykzct .gt_super {
  font-size: 65%;
}

#wpqztykzct .gt_footnote_marks {
  font-size: 75%;
  vertical-align: 0.4em;
  position: initial;
}

#wpqztykzct .gt_asterisk {
  font-size: 100%;
  vertical-align: 0;
}

#wpqztykzct .gt_indent_1 {
  text-indent: 5px;
}

#wpqztykzct .gt_indent_2 {
  text-indent: 10px;
}

#wpqztykzct .gt_indent_3 {
  text-indent: 15px;
}

#wpqztykzct .gt_indent_4 {
  text-indent: 20px;
}

#wpqztykzct .gt_indent_5 {
  text-indent: 25px;
}

#wpqztykzct .katex-display {
  display: inline-flex !important;
  margin-bottom: 0.75em !important;
}

#wpqztykzct div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
  height: 0px !important;
}
</style>

<table class="gt_table cell table table-sm table-striped small" data-quarto-bootstrap="false">
<thead>
<tr class="gt_col_headings header">
<th id="column" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Column</th>
<th id="type" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Type</th>
<th id="description" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Description</th>
<th id="units" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Units</th>
<th id="example" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Values</th>
</tr>
</thead>
<tbody class="gt_table_body">
<tr class="gt_group_heading_row odd">
<th colspan="5" id="queue_daily" class="gt_group_heading" data-quarto-table-cell-role="th" style="font-weight: bold" scope="colgroup">queue_daily</th>
</tr>
<tr class="gt_row_group_first even">
<td class="gt_row gt_left" headers="queue_daily  column">date</td>
<td class="gt_row gt_left" headers="queue_daily  type">date</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calendar date</td>
<td class="gt_row gt_left" headers="queue_daily  units">YYYY-MM-DD</td>
<td class="gt_row gt_left" headers="queue_daily  example">2019-03-01 to 2023-07-30</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">year</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calendar year</td>
<td class="gt_row gt_left" headers="queue_daily  units"></td>
<td class="gt_row gt_left" headers="queue_daily  example">2019 to 2023</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">month</td>
<td class="gt_row gt_left" headers="queue_daily  type">text</td>
<td class="gt_row gt_left" headers="queue_daily  description">Three-letter month abbreviation (Jan to Dec)</td>
<td class="gt_row gt_left" headers="queue_daily  units"></td>
<td class="gt_row gt_left" headers="queue_daily  example">Mar; Apr; May; ... (12 distinct values)</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">year_month</td>
<td class="gt_row gt_left" headers="queue_daily  type">date</td>
<td class="gt_row gt_left" headers="queue_daily  description">First day of the month the date falls in</td>
<td class="gt_row gt_left" headers="queue_daily  units">YYYY-MM-DD</td>
<td class="gt_row gt_left" headers="queue_daily  example">2019-03-01 to 2023-07-01</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">day_of_week</td>
<td class="gt_row gt_left" headers="queue_daily  type">text</td>
<td class="gt_row gt_left" headers="queue_daily  description">Three-letter day of the week (Mon to Sun)</td>
<td class="gt_row gt_left" headers="queue_daily  units"></td>
<td class="gt_row gt_left" headers="queue_daily  example">Fri; Sat; Sun; ... (7 distinct values)</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">holiday</td>
<td class="gt_row gt_left" headers="queue_daily  type">true/false</td>
<td class="gt_row gt_left" headers="queue_daily  description">TRUE if the date is an Ontario statutory holiday</td>
<td class="gt_row gt_left" headers="queue_daily  units"></td>
<td class="gt_row gt_left" headers="queue_daily  example">TRUE / FALSE</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">weekend_or_holiday</td>
<td class="gt_row gt_left" headers="queue_daily  type">true/false</td>
<td class="gt_row gt_left" headers="queue_daily  description">TRUE if the date is a Saturday or Sunday or a statutory holiday</td>
<td class="gt_row gt_left" headers="queue_daily  units"></td>
<td class="gt_row gt_left" headers="queue_daily  example">TRUE / FALSE</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">calls_presented</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calls that entered the queue</td>
<td class="gt_row gt_left" headers="queue_daily  units">calls</td>
<td class="gt_row gt_left" headers="queue_daily  example">24 to 1925</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">avg_queue_time</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Average time callers spent waiting in the queue (answered and abandoned calls)</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">5 to 832</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">max_queue_time</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Longest single wait in the queue that day</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">10 to 5908</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">calls_handled</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calls answered by an agent</td>
<td class="gt_row gt_left" headers="queue_daily  units">calls</td>
<td class="gt_row gt_left" headers="queue_daily  example">11 to 1835</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">avg_speed_of_answer</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Average time answered calls waited before an agent picked up</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">4 to 1263</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">avg_handle_time</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Average length of an answered call from answer to hang-up including hold time</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">51 to 231</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">max_handle_time</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Longest single call that day</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">79 to 5001</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">calls_abandoned</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calls where the caller hung up while waiting in the queue</td>
<td class="gt_row gt_left" headers="queue_daily  units">calls</td>
<td class="gt_row gt_left" headers="queue_daily  example">0 to 480</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">target_seconds</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">The service-level target the City measures against (30 on every day)</td>
<td class="gt_row gt_left" headers="queue_daily  units">seconds</td>
<td class="gt_row gt_left" headers="queue_daily  example">30 to 30</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">answered_within_target</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calls answered within the 30-second target</td>
<td class="gt_row gt_left" headers="queue_daily  units">calls</td>
<td class="gt_row gt_left" headers="queue_daily  example">10 to 413</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">abandoned_within_target</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">Calls abandoned before the 30-second target had elapsed</td>
<td class="gt_row gt_left" headers="queue_daily  units">calls</td>
<td class="gt_row gt_left" headers="queue_daily  example">0 to 322</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">pct_handled_within_target</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">answered_within_target as a share of calls_handled</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">14.9 to 100</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">pct_within_target_excl_abandoned</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">answered_within_target as a share of calls_presented minus calls_abandoned</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">8.8 to 100</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">pct_within_target_abandoned_positive</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">answered_within_target plus abandoned_within_target as a share of calls_presented</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">15.8 to 100</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">pct_answered_within_target</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">answered_within_target as a share of calls_presented; the measure used in the post, where an abandoned call counts as a miss</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">8.2 to 100</td>
</tr>
<tr class="even">
<td class="gt_row gt_left" headers="queue_daily  column">percentage_of_calls_handled</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">calls_handled as a share of calls_presented</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">45.8 to 100</td>
</tr>
<tr class="odd">
<td class="gt_row gt_left" headers="queue_daily  column">percentage_of_calls_abandoned</td>
<td class="gt_row gt_left" headers="queue_daily  type">number</td>
<td class="gt_row gt_left" headers="queue_daily  description">calls_abandoned as a share of calls_presented</td>
<td class="gt_row gt_left" headers="queue_daily  units">percent (0 to 100)</td>
<td class="gt_row gt_left" headers="queue_daily  example">0 to 54.2</td>
</tr>
</tbody><tfoot>
<tr class="gt_sourcenotes odd">
<td colspan="5" class="gt_sourcenote">Generated from the data with R/data_bundle.R; descriptions from data/dictionary.csv</td>
</tr>
</tfoot>

</table>

</div>
</div>
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-tbl" id="tbl-dictionary-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Table&nbsp;1: Data dictionary for the tables used in this post.
</figcaption>
</figure>
</div>
</div>
<div class="cell">
<div class="cell-output cell-output-stdout">
<pre><code>R version: R version 4.5.3 (2026-03-11 ucrt)
OS:        Windows 11 x64 (build 26200)
Rendered:  2026-09-07
Quarto:    1.9.38

    package version       date         source
      arrow  25.0.1 2026-08-23 CRAN (R 4.5.3)
 conflicted   1.2.0 2023-02-01 CRAN (R 4.2.3)
      dplyr   1.2.1 2026-04-03 CRAN (R 4.5.2)
    forcats   1.0.1 2025-09-25 CRAN (R 4.5.3)
    ggplot2   4.0.3 2026-04-22 CRAN (R 4.5.3)
     ggtext   0.2.0 2026-08-28 CRAN (R 4.5.3)
         gt   1.3.0 2026-01-22 CRAN (R 4.5.3)
   gtExtras   0.6.2 2026-01-17 CRAN (R 4.5.3)
       here   1.0.2 2025-09-15 CRAN (R 4.5.3)
    janitor   2.2.1 2024-12-22 CRAN (R 4.5.3)
  lubridate   1.9.5 2026-02-04 CRAN (R 4.5.3)
  patchwork   1.3.2 2025-08-25 CRAN (R 4.4.3)
      purrr   1.2.2 2026-04-10 CRAN (R 4.5.2)
      readr   2.2.0 2026-02-19 CRAN (R 4.5.3)
     scales   1.4.0 2025-04-24 CRAN (R 4.5.3)
    stringr   1.6.0 2025-11-04 CRAN (R 4.5.3)
     tibble   3.3.1 2026-01-11 CRAN (R 4.5.2)
      tidyr   1.3.2 2025-12-19 CRAN (R 4.5.3)
  tidyverse   2.0.0 2023-02-22 CRAN (R 4.5.2)</code></pre>
</div>
</div>
</div>
</div>
</div>


</section>

<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reusing this post</h2><div class="quarto-appendix-contents"><div>The text and charts in this post are free to copy, share, or republish, including in the news, as long as you credit Charting Waterloo Region and link to the post (Creative Commons CC BY 4.0). The code is MIT licensed; data stays under the licence of its original source, listed above.<a rel="license" href="https://creativecommons.org/licenses/by/4.0/">(View License)</a></div></div></section></div> ]]></description>
  <category>Snapshot</category>
  <category>City Services</category>
  <category>Kitchener</category>
  <category>Open Data</category>
  <guid>https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/</guid>
  <pubDate>Mon, 07 Sep 2026 04:00:00 GMT</pubDate>
  <media:content url="https://chartingwaterlooregion.ca/posts/kitchener-phone-wait-times/images/thumbnail.png" medium="image" type="image/png" height="154" width="144"/>
</item>
</channel>
</rss>
