The first thing I check on a slow CI run is the cache, and the cache is usually missing. It is the cheapest speedup there is: one line on your setup step, and every run stops re-downloading and rebuilding the exact dependencies it already had yesterday. On a typical Node or Python project that is 30 to 90 seconds back, every run, forever. People skip it anyway, then pay GitHub to reinstall lodash for the ten-thousandth time.
The free win: built-in caching
You probably do not need actions/cache directly. The setup-* actions cache your package manager for you, you just have to turn it on:
# Node
- uses: actions/setup-node@v4






