{
  "id": "2001-mayjune-bus-driver",
  "slug": "2001-mayjune-bus-driver",
  "url": "https://dwillis.github.io/uplink/article/2001-mayjune-bus-driver.html",
  "year": 2001,
  "month": "May/June",
  "monthNum": 5,
  "headline": "Bus driver",
  "kicker": "FIRST VENTURE",
  "author_name": "Dan Feldstein",
  "author_title": "Projects Desk Reporter",
  "affiliation": "Houston Chronicle",
  "summary": "A journalist used database analysis to investigate overtime practices at Houston's Metropolitan Transit Authority, discovering drivers were working excessive hours and earning over $100,000 annually, raising questions about the legality and safety of the practice.",
  "keywords": [
    "overtime",
    "database",
    "safety"
  ],
  "topics": [
    "Investigative Methods",
    "Public Safety",
    "Data & Databases"
  ],
  "technologies": [
    "Excel",
    "Access",
    "SQL"
  ],
  "full_text": "William \"Bones\" Pierson is a legend among bus drivers at Houston's Metropolitan Transit Authority.\n\nHe routinely drives 19-hour days and seven-day weeks. He didn't take a day off between Aug. 21 and Nov. 4.\n\nHe earned $109,000 last year, more than tripling his base salary through overtime. Dozens of other drivers were close behind.\n\nI hadn't known about Bones or the others until the computer tipped me off. Fresh out of NICAR's January boot camp, I wanted something simple and comfortable for my first venture.\n\nI ranked them in descending order and found my first real problem: The top guy drove 26 hours in one day. Good trick.\n\nI covered transportation before I went to the Chronicle's projects desk, so I picked on Metro - the Metropolitan Transit Authority. I'd heard that some of its drivers were racking up big bucks driving overtime.\n\nI had four questions: How much were they earning? How much were they driving? Was this legal? Was this safe?\n\nI requested the record layout of any database that contained time records, pay records or accident records. Neatly, they had all three. Each was separate, but each had a field for driver ID and a field for date. I requested them all for the calendar year 2000, plus a week on either end.\n\nThey came in Excel worksheets and I carefully put them into Access. The pay was trickier than I had expected. There were nearly a million records for only about 1,500 drivers because each type of pay was listed in a different record. On any one day, a driver could have one record for regular pay, one for overtime pay, one for a monthly bonus, etc. Some simple SQL gave me a list of the top earners.\n\nList of adjustments\n\nThe time records were next. They came by driver, by day. These were \"platform minutes,\" the actual time the driver was on the street, behind the wheel. I ranked them in descending order and found my first real problem: The top guy drove 26 hours in one day. Good trick.\n\nOh yeah, said the Metro computer guy. You need the \"list of adjustments.\" Every bus route has a set time. But if you get stuck in traffic, time can be tacked on. And if you get ill and leave early, time can be deducted. Plus other errors are corrected.\n\nIt turned out there were roughly 50,000 adjustments for about 350,000 records, which is when I learned about \"outer joins.\" Using driver ID and date, I tacked the adjustments onto my time table in a new field. Then I summed that field with the original time field in a query to create a new master table.\n\nIt turns out the top shift was 21 hours behind the wheel, not 26 - so much more reasonable.\n\nChecking the law\n\nWas all this driving legal? The feds allow interstate commercial drivers no more than 10 hours behind the wheel each day, or 60 hours in seven days. Texas allows intrastate drivers 12 hours a day or 70 in seven days. But both governments exempt government drivers.\n\nStill, 16 percent of all shifts driven by Metro last year would have violated the federal safety standard, and 5 percent would have violated the state standard.\n\nFor the single-day standard, it was easy to calculate. How many records were over 10 hours, over 12 hours?\n\nThe seven-day rolling total was wicked, however. It didn't exist, and I would have to create it. On every given day, how many hours had the driver been driving in the previous seven?\n\nHelp from NICAR-L\n\nI turned to the NICAR listserv. Three people offered suggestions. Tim Henderson of The Miami Herald offered this:\n\nSELECT a.driver_id, .work_date, sum(b.minutes) as rollingminutes FROM Platform as a, Platform as b WHERE ((([b].[driver_ID])=[a].[driver_ID]) and ((b.work_date) between ([a].[work_date]-7) and ([a].[work_date]-1))) GROUP BY a.driver_id, a.work_date\n\nIt worked! I also tweaked it slightly to get the last six days plus the current day. Finally came the question of whether the excessive driving was more dangerous than regular shifts. Experts said yes, but was there statistical evidence? Actually, it didn't show up in my crude analysis. I joined the time and accident tables, using driver ID and date. I found that, generally, the percentage of accidents attributed to drivers who had exceeded drive-time standards was the same as the percentage of shifts that were driven in excess of those standards.\n\nJumping into a project immediately after boot camp really solidified SQL in my mind. It would have escaped otherwise.\n\nAnd frankly, it took me as long to refine that statement into a single sentence as it did to make the calculations.\n\nLessons learned\n\nThis story could be replicated in a lot of cities. Transit systems have a tough time making new hires because of drug tests and a good economy. They are as happy with overtime as the drivers are.\n\nI learned several lessons in this project. While the data looked nice and neat, there were certainly some individual entries that had errors. Some of the accidents simply didn't join with the time table, for instance. The buses weren't being driven by phantom drivers - people had entered wrong dates, wrong driver IDs, etc., into the database.\n\nI kept my analysis broad because of that. And when I generated a list of the top 10 longest shifts that I was going to print, I gave it to Metro to check. Sure enough, they found a couple that were in error - a guy got sick, someone else hopped on his bus and their times were merged, etc. But most were correct.\n\nSQL solidified\n\nOther important things: Jumping into a project immediately after boot camp really solidified SQL in my mind. It would have escaped otherwise.\n\nAlso, what little I know about databases puts me one step ahead of most flaks. I made my best progress by suggesting a conference call among the flak, Metro's computer guy and me. It helped enormously for the flak to hear the computer guy say, \"Oh that's easy.\" It took two or three weeks to get the data, free of charge.\n\n\"Bones\" owns a nightclub and a Lexus that he doesn't get to drive much. Sadly, his wife told him to choose between marriage and driving so much overtime.\n\nThe new bachelor still has his pedal to the metal.",
  "provenance": {
    "extracted_by": "anthropic/claude-sonnet-4-6",
    "extracted_at": "2026-07-05",
    "verified": true
  },
  "similar": [
    {
      "slug": "2003-julyaugust-simple-sorts-reveal-cops-overtime-jackpot",
      "score": 0.272
    },
    {
      "slug": "2002-september-october-measuring-long-bus-rides-for-rural-children",
      "score": 0.17
    },
    {
      "slug": "1998-may-undeserved-overtime",
      "score": 0.155
    },
    {
      "slug": "1995-april-all-in-the-family",
      "score": 0.149
    },
    {
      "slug": "1997-march-quick-hits",
      "score": 0.13
    }
  ],
  "html_url": "https://dwillis.github.io/uplink/article/2001-mayjune-bus-driver.html",
  "json_url": "https://dwillis.github.io/uplink/article/2001-mayjune-bus-driver.json"
}