§ 1 · How long is long?
Every voting meeting, plotted by when and how long.
Dallas's council meets every other Wednesday for its main voting session. The meetings start at 9 a.m. and, on a typical week, gavel out sometime after supper. Each dot below is one of those meetings, placed on the date it happened and the total hours the council was in chambers that day. The longest single session ran —. The median is —. Special-called voting sessions are shown with an open ring; their agendas are shorter.
Zoomed-in view of where those hours go, per item: on average, the more NO votes a single item drew, the longer the council spent debating it. A four-plus-NO item got about ten times the floor time of a unanimous one. There are, however, thirty-seven times more unanimous items than contested ones — which is how the totals still tilt toward quiet votes.
§ 2 · The shape of it
One dot per item that was discussed.
Items that the council votes on without individual discussion — about four-fifths of the docket — are passed on the consent agenda and excluded here. What remains is every item pulled off consent for individual deliberation. The horizontal axis measures how long that deliberation lasted. The vertical axis counts NO votes: zero at top is a unanimous yes, one below is a 14–1–style pass, and the rare dots further down represent real opposition.
The pattern is the entire argument.
§ 3 · Where the hours went
Two clocks, same chamber.
The top bar is every minute the council was gaveled in — — in all — broken into the sort of activity filling it. The bottom bar is just the — they spent debating items pulled off consent, segmented by how those items ultimately voted.
§ 4 · Longest items that passed unanimously
Ten items that consumed the most deliberation time and met with no opposition.
| Date | Item | Discussion | Vote | Known as |
|---|
PH = public hearing. Duration includes resident speaking time (3 min each). Z items are zoning cases, typically with a public hearing too.
§ 5 · Meeting by meeting
Every voting meeting on the calendar, drawn to full length.
Each row is one meeting, scaled end-to-end to the time the council was actually in chambers. Colored segments on the left are individual items pulled off consent for discussion — white for unanimous, blue for 14–1, orange for contested. The gray tail is everything else that filled the meeting: the consent-agenda roll-call, the open-mic public speaking period, invocation and pledge, and recesses. The crosshatched tail past the end of the video is closed-session time, estimated from transcript time-of-day mentions; the Swagit archive drops out during private deliberation (see § 7). Meetings held after the OpenData vote cutoff are shown as all-gray rows — their duration is known from Swagit; the per-item breakdown just isn't published yet.
§ 6 · Who casts the dissent
Of the few NO votes that happened, three members cast most of them.
— individual NO votes were recorded across the window, on — items that drew any opposition at all. The left column ranks members by raw count. The right column shows the same NO votes as a share of each member's total yes-or-no votes, so members who joined mid-term aren't penalized for a shorter tenure.
§ 7 · Method & sources
How this page was assembled.
Discussion time is measured from the chapter markers Swagit places in each published council meeting video. Each chapter corresponds to one agenda item. A chapter's length — from its start timestamp to the next chapter's start — is taken as the time the council spent on that item. Items passed en masse as part of the consent agenda receive no individual chapter, and are excluded from duration measurements on this page.
Vote totals come from the City of Dallas Council Voting Record dataset published on Dallas OpenData (ts5d-gdq6). Each row is one councilmember's vote on one item, exported and aggregated into per-item tallies locally.
Data currency. Meeting videos and chapter markers on this page run through the most recent cataloged session. The individual vote records on OpenData lag that catalog: at time of writing, the publishing cutoff is —. Meetings held after that date appear in § 1 for their duration and in § 5 as empty rows. One older voting session — Oct 22, 2025 — is absent from OpenData entirely and is unrecoverable without the city republishing.
"Unanimous" on this page means zero NO votes recorded, with at least one YES vote. Absences, abstentions, and ABSNT-CB (absent on city business) are reported but do not factor into the unanimous / 14–1 / contested classification.
Closed-session time is estimated from Swagit's auto-generated transcripts. The public video feed pauses during executive session — meeting chapters are contiguous in video time even when the council is privately deliberating for an hour or more — so the closed-session minutes do not appear in the archived video. But the mayor almost always states the time aloud on the way in ("it is 1:57 P.M., we'll reconvene at 3:00") and on the way back ("has completed its closed session ... at 5:12 P.M."). Those utterances are transcribed, and this page parses the entry- and exit-time-of-day pairs to recover each closed session's duration. The parser currently recovers — of private deliberation across the window; individual sessions are tagged high (explicit entry and exit times), mid (reconvene-time only), and excluded when neither is parseable.
Not measured. This page does not break out speaking time by individual councilmember. Swagit's auto-generated transcripts stopped including speaker-turn markers after 2023, so per-member deliberation time would require independent audio transcription and voice diarization — a separate effort, planned.
Every point on the scatter and every row in the list links to the Swagit video at the item's start timestamp. The underlying SQLite database and pipeline are available in the project's code repository.