Sign 1 — Time Machine backups taking longer than usual
Time Machine writes to a sparsebundle on the destination drive. As the source disk fills, Time Machine has to track more data, calculate more checksums, and write more deltas. A backup that used to take 5 minutes starts taking 25 minutes. Then it starts failing intermittently with cryptic errors.
The fix is preemptive. When you notice backup time creeping up, run a cleanup. Don't wait for the failures.
Sign 2 — VSCode or JetBrains slowing down
Modern IDEs maintain large index caches in `~/Library/Application Support/`. As the disk fills, the OS has less working space for memory paging, and the IDE's index operations start hitting disk more often. Symptom: typing latency starts feeling sluggish, autocomplete appears with delay, file indexing stalls visibly.
Most developers blame the IDE or their machine. Often it's just disk pressure. Reclaim 20+ GB and the IDE feels new again.
Sign 3 — Docker builds failing partway through
Docker builds need temporary space proportional to the layers being built. If your free disk drops below 10 GB, builds for medium-sized images start failing with 'no space left on device' errors halfway through. The error message blames Docker but the cause is host disk.
The fix is immediate cleanup. The pattern is reliable: free disk under 10 GB → unpredictable Docker failures.
Sign 4 — Spotlight reindexing for hours
Spotlight maintains an index of file content. If something disrupts the index (often disk-full conditions during a scheduled reindex), Spotlight goes into 'continuous reindex' mode. Symptom: mds_stores process at 100% CPU for hours, Mac feels slow, search returns incomplete results.
Triggering: usually disk got tight, then was freed, but the index is now corrupt. Fix: `mdutil -E /` to force a rebuild after reclaiming space.
Sign 5 — App downloads stalling at 'preparing'
The Mac App Store and direct downloads need temporary space to extract installers. As disk fills, downloads stall at 'preparing for installation' or fail with disk-space errors. By the time this happens, you're at 95%+ disk usage and other things are already breaking.
The operational discipline
The pattern that prevents all of the above:
- Monthly cleanup — DreamCleanr scheduled scan, balanced mode, on the 1st of each month.
- Watchdog at 85% disk usage — alert when free space drops below 15% of total. Most macOS users discover the problem at 95% when things break.
- Docker volume audit quarterly — `docker system df` to see what's accumulating, prune what's safe.
- IDE cache audit semi-annually — clear DerivedData, JetBrains caches.
- Backup verification — confirm Time Machine still completes successfully each week.
Most developers do none of this until something breaks. The discipline is 30 minutes per month and prevents the days-long cleanup-and-recovery cycles that follow disk-full crises.
Frequently asked questions
- How much free space should I keep?
- Aim for at least 15% of total disk free at all times — typically 50+ GB on a 512 GB Mac. macOS uses free space for swap, temporary files, and various background operations. Below 15% you start getting subtle degradation.
- Is APFS more forgiving of disk pressure than HFS+?
- Slightly. APFS handles snapshots and copy-on-write efficiently when there's space; under pressure those features become liabilities because they need free blocks to work with.
- Can I just buy more disk?
- External drives help for archival storage but don't help with system-disk pressure (build artifacts, IDE caches, Docker volumes all need to live on the system disk). External drives are great for completed projects, photo libraries, and Time Machine destinations.
- Should I disable Time Machine to save space?
- No — but configure it to exclude the high-churn directories (node_modules, build outputs, .cache) so it doesn't waste space backing up regenerable data. System Preferences → Time Machine → Options → exclusion list.
- Is `sudo purge` safe to run?
- Yes. It tells the kernel to drop disk caches that can be recovered from disk. Brief slowdown after, then normal. Useful as a 'reset memory pressure' tool.