Writing

26 April 2026

Software that operates without anyone babysitting it

The bottleneck in most software-using businesses isn't the code itself — it's the human attention required to keep the code running. Encode judgment as monitors, alerts, and reporting; save attention for the things that genuinely need it.

Most businesses have a software bottleneck nobody talks about. It isn’t features, performance, or developer hours. It’s attention.

The unattended scripts that need someone to remember to check on them. The integrations that fail silently and need someone to notice. The reports somebody has to remember to pull. The monitoring that pages someone but offers no context. The dashboards that nobody looks at because they don’t surface anything actionable.

All of that is human attention being spent on the operating envelope around code, not on running the business. And almost none of it has to be that way.

What “software that maintains itself” actually looks like

A few patterns from the work I do, each concrete:

Inverted health checks. Most monitoring asks “is the server responding?” That’s the wrong question. The right question is “did this scheduled job actually run when it was supposed to?” If a script is supposed to ping a monitor every six hours and the monitor doesn’t get a ping, something is wrong. Failure equals silence, not error. That catches scripts that died completely, not just ones that errored cleanly.

Per-job grace windows. Some scripts run every five minutes; some run weekly. A single global tolerance doesn’t work. Each job gets its own — a small one for critical work, a generous one for non-urgent. Same monitor, different sensitivity.

Routing that respects context. A failure in a critical billing job pages someone immediately. A failure in a daily backup batches into a digest. The monitor decides because it knows the job; the human doesn’t have to triage every alert at the same urgency.

Dashboards that show what’s been done, not what’s possible. A delivery dashboard isn’t useful if it lists every feature you could build. It’s useful when it shows what got shipped, what’s in progress, and where time has gone. Built around the operating reality of the project, not a templated activity feed.

Reports that arrive instead of waiting to be pulled. Weekly status, monthly spend, quarterly retention — these are answers somebody is going to want eventually. If the answer arrives in their inbox on schedule, the question goes away. If they have to remember to pull a report, half the time they won’t.

Why this matters more than it looks like it does

The reason this is structural and not just “nice to have” is the inverse: every piece of software that requires babysitting taxes the most expensive resource in the business — operator attention.

A founder who has to remember to check the cron logs every Monday morning is paying the platform’s running cost out of their own time. A team that has to manually export reports has a permanent productivity tax. Software that needs constant supervision is software that doesn’t actually scale, regardless of what the load tests say.

The ROI of building monitoring, reporting, and alerting into the system isn’t measured in fewer outages. It’s measured in the founder’s calendar.

The thread, plainly

This isn’t a feature; it’s a posture. Every system I build asks the same question early: who has to remember to check on this, and how do we get rid of that requirement?

The answer is almost always the same shape. Encode judgment as constraints — what’s normal, what’s not, what’s urgent, what’s batch-able. Wire those constraints into monitors, alerts, and dashboards. Let the system tell you when it needs you. Don’t assume operators will remember to ask.

If your software needs you to remember to look at it, it isn’t done. That’s true for cron jobs, integrations, monitoring, reports, dashboards, and almost everything else inside a growing business.