
Austin Welsh👋 Let’s Connect! Follow me on GitHub for new projects and tips. Introduction If your...
👋 Let’s Connect! Follow me on GitHub for new projects and tips.
If your output is inconsistent, it’s rarely a skill issue. It’s usually a systems issue: too many micro-decisions, too much context switching, and too little protection against “off days.” The goal of automation here isn’t speed. It’s reliability under stress: fewer choices, fewer manual steps, and fewer opportunities to drift.
This article focuses on production-grade, low-maintenance automation that:
Automate repeatable mechanics (formatting, linting, dependency updates, release chores). Keep judgment-heavy work (architecture, product decisions) manual, but supported by checklists and templates.
Actionable rules:
Common pitfalls:
Validation checks:
When you’re tired, you need guardrails, not motivation. Design workflows that:
Tactics that consistently help:
make check, task check, npm test).This pattern reduces decision fatigue: you don’t choose which checks to run; you run make check. It also prevents “works on my machine” drift by using the same commands in CI.
SHELL := /bin/bash
.DEFAULT_GOAL := help
.PHONY: help
help:
@echo "Targets:"
@echo " make setup - install dependencies"
@echo " make fmt - format code"
@echo " make lint - run linters"
@echo " make test - run tests"
@echo " make check - fmt + lint + test (use this)"
@echo " make ci - strict checks for CI"
.PHONY: setup
setup:
npm ci
.PHONY: fmt
fmt:
npm run format
.PHONY: lint
lint:
npm run lint
.PHONY: test
test:
npm test
.PHONY: check
check: fmt lint test
# CI can be stricter (no auto-fix, fail on warnings, etc.)
.PHONY: ci
ci:
npm ci
npm run format:check
npm run lint
npm test
mkdir -p .github/workflows
cat > .github/workflows/ci.yml <<'YAML'
name: ci
on:
pull_request:
push:
branches: [ main ]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Run CI checks
run: make ci
YAML
Targets:
make setup - install dependencies
make fmt - format code
make lint - run linters
make test - run tests
make check - fmt + lint + test (use this)
make ci - strict checks for CI
Notes:
make check fast. If it takes > 5 minutes, split into check (fast) and check-all (slow).npm ci/lockfiles, pinned tool versions, and caching.Burnout often comes from deferred maintenance turning into emergencies. Schedule small, steady updates so you don’t face a “week of dependency grind” later.
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
groups:
dev-deps:
dependency-type: "development"
patterns:
- "*"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
Dependabot will open weekly PRs for npm dependencies.
Dev dependencies are grouped to reduce PR noise.
Major updates are ignored to avoid surprise breakage.
Notes:
If you’re struggling with consistency, don’t adopt 12 tools. Adopt a small stack that covers the highest-leverage failure modes:
make check).Start with this order: make check → CI → pre-commit → scheduled updates → templates.
# Minimal setup checklist (repo root)
make setup
make check
# Add pre-commit (optional but effective)
pipx install pre-commit || python3 -m pip install --user pre-commit
pre-commit install
# Validate CI locally (run the same strict target)
make ci
Notes:
make ci).main or security issues.Consistency comes from systems that work when you’re tired: defaults, guardrails, and scheduled maintenance. Build a small automation backbone that keeps quality high without demanding constant attention. The best automation is boring, predictable, and easy to validate.
Meta Description
Practical automation patterns to reduce decision fatigue, enforce consistency, and prevent burnout: guardrails, defaults, scheduled maintenance, and low-friction workflows with concrete examples.
TLDR - Highlights for Skimmers
make check and run it in CI to standardize “what good looks like.”Which part of your workflow fails first on a bad week: local checks, reviews, releases, or maintenance?