All projects

Heavy equipment availability and downtime

Site managers see machines standing still, but "not working" has four very different causes: rain, breakdowns, waiting for parts and skipped maintenance. Each needs a different fix. I used SQL to separate them and size the hours each one costs.

Data
Simulated: 48 units, 4 sites, 17,520 unit-days, 1,620 work orders (2025)
Tools
SQL (DuckDB), Python
Methods
PA / UA, MTBF / MTTR, Pareto, exposure-based failure rates
Background
Modelled on the fleet data I worked with at a heavy-equipment company
94.2%physical availability: machines are usually ready to work
72.5%use of availability: ready machines are often not used
~2,170 hper year recoverable at Papua by stocking critical spares
~45breakdowns a year avoidable at Sulawesi by servicing on time

Fleet data is confidential, so this dataset is simulated. It records the same fields real contractors use (hour-meters, shift hours, breakdown and PM work orders), and the analysis was written as if the causes were unknown.

Where every scheduled hour went

Two KPIs separate the problem:

  • Physical availability (PA) = (scheduled − downtime) / scheduled. Is the machine ready?
  • Use of availability (UA) = operating / available hours. When ready, is it used?

PA is healthy. The bigger loss is ready machines standing idle, and most of that is rain standby.

Share of 210,240 scheduled machine-hours

All units, all sites, 2025

    Weather standby (13.8%) costs more than all breakdowns and maintenance combined (5.8%).

    Use of availability by month and site

    Each site's dip lines up with its own rainy season, while physical availability stays between 90% and 97%

    UA drops from 79.5% in dry months to 62.8% in rainy months. Judging sites on one annual UA target punishes them for the weather.

    What breaks, and why repairs take so long

    Unplanned downtime by system

    Hours, 670 breakdowns. Hover for the cumulative share.

    Hydraulics cause 30.5% of downtime, and the top three systems cause 66%. Hydraulic failures also repeat within 30 days 29% of the time.

    Average hours to restore a breakdown

    Split into hands-on repair and waiting time

    RepairWaiting for partsWaiting for mechanic

    Papua's mechanics repair as fast as everyone else's. The difference is 20.7 h waiting for parts vs 5.6 h elsewhere, which is 66% of its downtime.

    Skipped maintenance shows up as breakdowns

    Units should be serviced every 250 hour-meter hours. Using window functions over the daily hour-meter, I marked every operating hour run past the PM due point, then compared breakdown rates per 1,000 hours.

    At every site, overdue hours fail 2.6–3.5× more often. Sulawesi completes only 63% of services on time, so 17% of its operating hours run overdue.

    Breakdowns per 1,000 operating hours

    On schedule vs past PM due. Site label shows on-time PM compliance.

    PM on schedulePM overdue
    06_repeat_failures.sqlAll 7 SQL files on GitHub
    WITH seq AS (
        SELECT unit_id, site, model, system, start_time,
               LAG(end_time) OVER (PARTITION BY unit_id, system ORDER BY start_time) AS prev_end
        FROM events WHERE event_type = 'Breakdown'
    )
    SELECT system,
           COUNT(*)                                                         AS breakdowns,
           SUM(CASE WHEN DATE_DIFF('day', prev_end, start_time) <= 30 THEN 1 ELSE 0 END) AS repeat_within_30d,
           ROUND(100.0 * AVG(CASE WHEN DATE_DIFF('day', prev_end, start_time) <= 30 THEN 1 ELSE 0 END), 1) AS repeat_pct
    FROM seq
    GROUP BY system
    ORDER BY repeat_pct DESC;

    Bad actors

    #UnitSiteModelBreakdownsDowntime h

    6 of the top 7 units are at Papua: the parts-wait problem, seen unit by unit.

    Recommendations

    • Stock critical spares at Papua

      Consignment stock or min/max levels for hydraulic and engine parts. Bringing parts wait to the other sites' average recovers about 2,170 machine-hours a year.

    • Enforce PM scheduling at Sulawesi

      Lock units out at due hour + 25 h and publish a weekly compliance report. Removing overdue running avoids about 45 breakdowns and 750 downtime hours a year.

    • Run a hydraulic RCA programme

      Review hose and seal specs and operator practices. Track the 30-day repeat-failure rate monthly to see whether repairs fix the root cause.

    • Plan the rainy season

      Move PM, training and component change-outs into rainy months, and set seasonal UA targets so sites are judged fairly.

    Next projectHeavy equipment spare parts procurement analytics