Some work should wake up by itself. Some work should only run when a human is staring at the outcome. Mixing those up is how you get surprise emails at 2am.
I schedule the boring certainties: pulling yesterday's receipts, refreshing a location cache, sending a count queue. I keep the dangerous ones on-demand: mass adjustments, vendor file imports, anything that writes more than it reads.
If a job can duplicate rows, it is not a cron job until it is idempotent. I learned that by duplicating rows.
On-demand still needs logs
A button in an admin screen is still automation. It should write who ran it, with what file, and what the row counts were. "I think I ran it twice" should be a query, not a feeling.
Alerts that mean something
I do not email on success. I email on zero rows when there should be hundreds, on runtime spikes, and on exceptions. Quiet success is a feature.