#4453: Workers vs Workflows: Recovering From SSD Failure

When your VPS SSD dies at 3AM, how do you know what broke? A practical guide to self-hosted worker management.

Featuring
Listen
0:00
0:00
Episode Details
Episode ID
MWP-4632
Published
Duration
24:24
Audio
Direct link
Pipeline
V5
TTS Engine
chatterbox-regular
Script Writing Agent
deepseek-v4-pro

AI-Generated Content: This podcast is created using AI personas. Please verify any important information independently.

A VPS SSD failure at 3AM wipes out fifteen micro-automations — YouTube backup scripts, RSS monitors, health checks — all gone with no dashboard, no export, no record of what was even running. This exact scenario drives the question: how do you manage visibility and recoverability for a fleet of small, periodic scripts?

The conversation starts with terminology, because the label you use shapes which tool you reach for. A workflow implies a directed acyclic graph (DAG) with defined branching and error handling — think Temporal.io or AWS Step Functions. Automation is the umbrella term for anything that runs without human intervention. But a worker is the most accurate model for independent, trigger-based scripts that don't share state or coordinate with each other. Each micro-task is an independent execution unit, making "worker" the term that drives better tool selection.

Four platform options emerge for managing these workers. Huginn offers event-driven agents with a web UI showing last run time, event counts, and errors, plus scenario export as JSON. A hybrid approach uses Huginn as the management plane while running standalone Python scripts (generated by Claude Code) through its Shell Command Agent. Temporal.io provides enterprise-grade orchestration with impressive debugging capabilities but is wildly overengineered for cron-style scripts. n8n gives visual workflow building with execution history and logs, though its single-threaded node graph struggles with complex branching. A custom approach using systemd timers and health check scripts offers maximum flexibility with minimal overhead.

The key insight: with AI code generation making script creation essentially free, the bottleneck shifts from writing code to infrastructure management and observability. The real test of any platform isn't feature count — it's whether you can take an export, spin up a fresh VPS, and be back to a working fleet in under ten minutes.

Downloads

Episode Audio

Download the full episode as an MP3 file

Download MP3
Transcript (TXT)

Plain text transcript file

Transcript (PDF)

Formatted PDF with styling

#4453: Workers vs Workflows: Recovering From SSD Failure

Corn
Your VPS SSD dies at three in the morning. Fifteen micro-automations — YouTube backup scripts, RSS monitors, health checks — all gone. You have no dashboard, no export, no record of what was even running. How do you know what broke, let alone how to rebuild it?
Herman
That's the exact scenario Daniel's wrestling with. He's got a backup procedure for YouTube channels he wants to run — watch for new videos, download with yt-dlp, upload to cloud, push to NAS, notify on failure. Simple enough. But he can easily imagine ten or twenty of these little tasks, and the SSD failure he just lived through has him thinking about visibility and recoverability.
Corn
Right. And he's asking two things. First, a terminology question that sounds pedantic but actually drives tool choice — are these things workflows, automations, or workers? And second, what self-hostable platforms give him a dashboard to see what's running, what failed, and a backup surface so he can rebuild from a config file instead of from memory.
Herman
Let's start by unpacking the scenario, because it perfectly illustrates the problem. Daniel's not running a NAS in his new apartment yet, so his usual backup chain is broken. Normally he'd finish a video, drop it on the NAS volume, and that auto-syncs to the cloud. Without that, he wants a backup procedure that doesn't depend on his own infrastructure being up. The trigger is a new video appearing on a channel. The actions are download, upload to cloud, send to NAS. The fallback is a notification if something fails. Nothing complicated.
Corn
And he's right that tools like Claude Code can write the actual script in under a minute. The question isn't can he build it — it's how does he manage ten or twenty of these things and know they're healthy without SSHing into the box every morning.
Herman
Which is where the terminology actually matters, because the label you use shapes which tool you reach for. Before we can talk about platforms, we need to get our terminology straight — the wrong label leads to the wrong tool.
Corn
Alright, walking encyclopedia. Workflow, automation, worker. Break them apart.
Herman
Workflow is the most specific of the three. It implies a directed acyclic graph — a DAG — of steps with defined branching and error handling. Think Temporal.io or AWS Step Functions. A workflow is designed for durable, stateful, long-running processes. It might have retry policies, compensation logic for rollbacks, timeouts at each step. The defining characteristic is that the process itself has structure — step A must complete before step B, and if step C fails, you branch to step D.
Corn
So a workflow is a map. The path matters as much as the destination.
Herman
Automation is the umbrella term. It's anything that runs without human intervention. A cron job that rotates logs is an automation. A script that watches a folder and renames new files is an automation. It's the broadest category — all workflows are automations, but not all automations are workflows.
Corn
And worker?
Herman
Worker is an execution model. A worker is a process that listens for tasks and executes them, typically in a queue-based architecture. You have a dispatcher that hands out jobs, and workers that pick them up and run them. The key insight is that each worker is an independent execution unit. It doesn't need to know about other workers. It just takes a task, does the work, reports back.
Corn
So for Daniel's use case — small, periodic, trigger-based scripts — which term is actually accurate?
Herman
Worker is the most accurate, and here's why. Each of his micro-tasks is an independent execution unit. The YouTube backup script doesn't need to coordinate with the RSS monitor. They don't share state. They're triggered by different conditions and run to completion independently. That's a worker model. Calling it a workflow implies a DAG structure that doesn't exist. Calling it an automation is technically correct but so broad it's useless for tool selection.
Corn
And this distinction actually matters when you're evaluating platforms. n8n calls everything a workflow, but its execution model is a single-threaded node graph. Fine for linear sequences, but it starts to creak when you have complex branching or need independent parallel execution.
Herman
Right. Temporal.io calls its execution units Workflows — capital W — but Temporal is built for microservices orchestration. It gives you durable execution with automatic retry, saga patterns for distributed transactions, the whole enterprise toolkit. Deploying Temporal for a thirty-second yt-dlp script is like using a freight train to deliver a postcard. The Temporal Web UI is genuinely impressive — it shows workflow executions, full event history, stack traces, failure reasons — but the overhead is absurd for Daniel's scale.
Corn
Huginn takes a completely different approach. It calls its execution units Agents, and they're event-driven with a publish-subscribe model. An Agent watches for something, emits events, and other Agents consume those events. The built-in web UI shows agent status, last run time, logs, failure counts. That's much closer to what Daniel wants.
Herman
Huginn is a strong fit for the visibility requirement. Each agent has its own database table, so you can see exactly what it's done. The dashboard answers the core questions — what's running, when did it last run, did it fail. And crucially, Huginn supports scenario export as JSON. You can back up your entire agent configuration as a single file.
Corn
But there's a catch. Huginn agents are configured through the web UI, not as standalone code scripts. You're writing Ruby in text fields, essentially. If Daniel's goal is code-defined workers that he can version control and generate with Claude Code, Huginn's model is a mismatch. He'd be adapting his approach to fit the platform rather than the platform serving his approach.
Herman
That's the tension. And this is where the AI agent inflection point really changes the calculus. Let me make this concrete. Here's the kind of prompt you can give Claude Code right now. Quote — write a Python script that checks a YouTube channel for new videos every hour, downloads any it hasn't seen, uploads to Backblaze B2, and posts a failure notification to a Discord webhook. Use a local JSON file to track seen video IDs.
Corn
What comes back?
Herman
In under sixty seconds, you get a complete script. It has a main function with a check loop, it reads and writes the JSON tracking file, it calls yt-dlp with the right flags, it uses the B2 SDK for uploads, it sends Discord webhooks on failure, and it has proper error handling and logging throughout. Sixty seconds. That's the cost of a custom worker now.
Corn
Which shifts the whole conversation. If writing code is essentially free, the bottleneck isn't code generation anymore. It's infrastructure management and observability.
Herman
Yes. The bottleneck shifts to two things. One, keeping the VPS running — secrets rotation, disk usage monitoring, package updates. And two, knowing which workers are healthy without SSHing in. Daniel's SSD failure is the canary in the coal mine. A dashboard with a heartbeat check and a last successful run timestamp isn't a nice-to-have. It's the difference between a five-minute recovery and a five-hour detective session.
Corn
And the backup surface. If the VPS itself dies, you need to reconstruct the worker fleet from a config file, not from memory. That's the other half of Daniel's question — the export requirement.
Herman
Let's talk about what that actually looks like across platforms. n8n exports workflows as JSON arrays of nodes with connections. Each node has a type, position, and parameters. You can export the whole thing, store it in git, and re-import it on a fresh instance. Huginn exports scenarios as JSON objects with agent types, options, and schedules. A custom solution could export a YAML file with worker name, cron schedule, script path, and environment variables.
Corn
The format matters less than the recoverability. Can you take that export, spin up a fresh VPS, and be back to a working fleet in under ten minutes?
Herman
That's the test. And most people never run it until they need it, which is when they discover the export is missing a critical piece — environment variables, or the scheduler configuration, or the fact that the export format changed between versions.
Corn
So we know what we're building — workers, not workflows. Now let's look at what platforms actually exist to manage them.
Herman
Let me walk through the four real options. Option one, Huginn. It's self-hosted, Ruby-based, and it's been around for years. The architecture is event-driven — agents emit events, other agents consume them. You'd set up a WebsiteAgent that polls a YouTube channel's RSS feed, a DataOutputAgent that formats the new video information, and a ShellCommandAgent that runs the yt-dlp script. The dashboard shows each agent's last run time, how many events it created, and any errors.
Corn
And the export?
Herman
Huginn has a scenario export feature. You select the agents you want to export, and it gives you a JSON file. That JSON includes agent types, options, schedules, and the connections between agents. You can import it on a fresh Huginn instance and everything comes back.
Corn
But again — you're configuring agents through a web UI, not writing standalone scripts. If Daniel wants the flexibility of code-defined workers, Huginn forces him into its DSL.
Herman
There's a hybrid approach that works around this. Huginn has a REST API and a Shell Command Agent. You write the actual worker logic as standalone Python scripts — generated by Claude Code, version-controlled in git, fully flexible. Huginn's Shell Command Agent calls those scripts on a schedule or on a trigger. Huginn becomes the dashboard and scheduling layer, not the execution engine. You get the visual dashboard and the export surface without being locked into Huginn's agent model.
Corn
That's clever. Huginn as the management plane, not the runtime. What's option two?
Herman
It's a production-grade orchestration engine — self-hostable, with a web UI called Temporal Web. You write workflows in Python, Go, TypeScript, or Java. The UI shows workflow executions, full event history, stack traces for failures, and you can drill down into individual activity attempts. It's impressive for debugging complex failures.
Corn
But?
Herman
But it's designed for microservices orchestration. Temporal workflows expect to be long-running, potentially hours or days. They have retry policies, heartbeats for long activities, and the ability to replay execution history for debugging. For Daniel's twenty cron-style scripts, Temporal is wildly overengineered. The operational overhead alone — running the Temporal server, managing the persistence layer, dealing with the worker processes — is significant.
Corn
And the export surface?
Herman
Temporal workflows are defined in code, so your backup is your git repository. The workflow definitions live in your source code. But the scheduling configuration — when workflows run, what triggers them — that's separate. You'd need to back up your schedule configurations separately. It's not a single export file.
Corn
Option three is n8n.
Herman
n8n is a self-hosted visual workflow builder. The dashboard shows active workflows, execution history, and logs. Workflows are built by dragging nodes onto a canvas and connecting them. It supports hundreds of integrations out of the box, and it has a Code node that lets you write arbitrary JavaScript.
Corn
You've been running n8n for about eighteen months, right?
Herman
I have, and I'd say it's the closest self-hosted Zapier replacement. The visual clarity is useful for understanding what a workflow does at a glance. The execution history shows exactly which nodes ran, what data passed between them, and where failures occurred.
Corn
But Daniel's complaint is that visual platforms sacrifice flexibility.
Herman
And that complaint is real, but let me be precise about where the flexibility loss actually bites. n8n's node-based model is fine for linear sequences and moderate branching. Where it gets painful is complex error handling across multiple branches, integration with obscure APIs that don't have pre-built nodes, and anything that requires shared state across workflow executions. The Code node can do arbitrary JavaScript, but you're writing code in a text field in a web UI — no version control, no testing framework, no IDE support. It's code, but it's second-class code.
Corn
And the export?
Herman
n8n exports workflows as JSON. Each workflow is an array of node objects with type, position, parameters, and connections. You can export individual workflows or the whole collection. The JSON is readable enough to version-control, and you can re-import it on a fresh instance. It's a solid export surface.
Corn
Option four is the custom route. Build your own dashboard.
Herman
And this is where the AI agent shift really changes things. A custom solution could be a simple Flask or FastAPI dashboard that reads from a shared SQLite database. Each worker script logs its status — last run time, success or failure, any error messages — to that database. The scheduler could be something like APScheduler running in the same process. You add an export endpoint that dumps all worker configurations as a YAML file — worker name, cron schedule, script path, environment variable names.
Corn
And Claude Code can generate the entire thing from a prompt.
Herman
It can. Describe the dashboard requirements — what fields to show, the export format, the scheduler behavior — and you get a working application. The advantage is maximum flexibility. Every worker is a standalone script. The dashboard is exactly what you need and nothing else. The export format is whatever you want it to be.
Corn
The disadvantage is you're now maintaining custom infrastructure.
Herman
Yes. The dashboard itself becomes another thing to monitor, update, and back up. If it goes down, you lose visibility into everything. With Huginn or n8n, you're running a maintained open-source project with a community and documentation. With a custom dashboard, you're on your own.
Corn
Let me pull together what I think is the most practical path forward for someone in Daniel's exact situation.
Herman
Go ahead.
Corn
Start with the hybrid Huginn approach. Use Huginn as the dashboard and scheduling layer, but write the actual worker logic as standalone Python scripts that Huginn calls via the Shell Command Agent. This gives you the visual dashboard, the export surface, and the scheduling infrastructure without locking your business logic into Huginn's agent model.
Herman
And the backup strategy?
Corn
Set up a daily cron job that calls Huginn's scenario export API and pushes the resulting JSON to Backblaze B2 or S3. That's your disaster recovery artifact. If the VPS dies, you spin up a new one, install Huginn, import the scenario JSON, and you're back to a working dashboard. Then restore your worker scripts from git.
Herman
That's a solid recommendation. But I want to push on one thing. If Huginn feels too opinionated — if the agent model feels like a constraint rather than a tool — the custom Flask dashboard approach is surprisingly achievable now. Claude Code can generate the whole thing. The prompt would be something like, build a FastAPI app with a SQLite backend that shows a table of workers with name, last run time, status, and a log viewer, plus an export endpoint that dumps everything as YAML.
Corn
That's a weekend project now, not a month-long build.
Herman
And the AI agent shift is what makes it viable. The code generation cost has collapsed. What hasn't collapsed is the design cost — knowing what to build, understanding the tradeoffs, thinking through the failure modes. That's still human work.
Corn
Which brings us back to the terminology. The reason this matters for tool choice is that calling something a workflow when it's actually a worker leads you to workflow orchestration tools — Temporal, Prefect, Dagster — that are solving a fundamentally different problem. You'll spend more time managing the orchestrator than running your actual tasks.
Herman
The precision is, use worker for independent trigger-based scripts, workflow for multi-step processes with branching and state management, and automation as the umbrella term. Daniel's YouTube backup is a worker. A multi-step ETL pipeline with conditional branching and rollback logic is a workflow. Both are automations.
Corn
And if you walk into a tool evaluation with that clarity, you'll know immediately that Temporal is wrong for twenty cron-style workers, no matter how nice its dashboard is.
Herman
Let me address something I think gets lost in these discussions. The visual platform versus code debate often frames it as a flexibility question — code is more flexible, visual is more constrained. That's true but incomplete. The real difference is the ceiling. Visual platforms have a lower floor — you can build something in n8n in ten minutes that would take an hour of coding. But they also have a lower ceiling — eventually you hit something the visual paradigm can't express cleanly, and you're fighting the tool.
Corn
Code has a higher floor and a higher ceiling.
Herman
Right. The AI agent shift lowers the floor for code dramatically. That sixty-second Claude Code prompt I described — that used to be an hour of writing boilerplate, looking up API docs, handling edge cases. Now it's sixty seconds. The floor has dropped so far that the visual platform's floor advantage is shrinking.
Corn
But the ceiling is still higher for code, and the AI agents don't solve the management layer. They write the worker. They don't monitor it, alert on it, or back up its configuration.
Herman
That's the knock-on effect. If writing code is free, the bottleneck shifts to observability and infrastructure management. Daniel's SSD failure story is the canary. The dashboard with a heartbeat check and a last successful run timestamp is not a nice-to-have. It's the difference between a five-minute recovery and a five-hour detective session.
Corn
And the backup surface is non-negotiable. Whatever platform you choose, verify that you can export the entire configuration as a single file and restore it on a fresh VPS in under ten minutes. Actually test this. Destroy the VPS and rebuild it. Most people discover the gaps in their backup strategy during the disaster, not before it.
Herman
The export formats are worth comparing directly. n8n exports a workflow as a JSON array of nodes with connections — each node has a type, position, and parameters. Huginn exports a scenario as a JSON object with agent types, options, and schedules, plus the connections between agents. A custom solution could export a YAML file with worker name, cron schedule, script path, and environment variables. The format matters less than whether the export actually contains everything needed to rebuild.
Corn
One thing I've learned from running n8n is that the export is only as good as your discipline about using it. It's easy to tweak a workflow in the UI and forget to export the updated version. Then your backup is stale and you don't know it until you need it.
Herman
That's where the daily cron job pushing the export to object storage becomes essential. Automate the backup of your automation platform. It's turtles all the way down.
Corn
There's a larger trend here that Daniel's twenty-worker fleet is a microcosm of. Personal infrastructure is becoming more complex. Ten years ago, a home server ran Plex and maybe a file share. Now people are running fifteen micro-services, each with its own dependencies, schedules, and failure pattern. The tools for managing that complexity are still catching up.
Herman
And the next frontier might be AI agents that don't just write the workers but also monitor them and self-heal when they fail. Imagine a system where each worker reports its status to a central agent, and that agent can detect failures, check logs, and attempt remediation — restart the worker, roll back a configuration change, escalate to a human if it can't fix the problem.
Corn
That's not science fiction. The pieces exist. The integration doesn't.
Herman
Not yet. But the trajectory is clear. The AI coding agents are getting better at generating code. The next step is agents that understand the operational context — what's running, what's failing, what changed. That's a harder problem because it requires understanding state over time, not just generating a static artifact.
Corn
For now, the practical recommendation stands. Hybrid Huginn for the dashboard and scheduling, standalone Python scripts for the workers, daily export to object storage, and test your disaster recovery.
Herman
And if Huginn's agent model feels like a straitjacket, the custom Flask dashboard approach is viable and getting easier. The key is to make the choice consciously — understand what you're trading off with each option.
Corn
The terminology precision is the thing I want listeners to take away. Use worker for independent trigger-based scripts, workflow for multi-step processes with branching, automation as the umbrella term. That clarity alone will save you from evaluating tools that are solving the wrong problem.
Herman
And the backup surface is non-negotiable. Whatever you choose, verify the export works by actually rebuilding from it. Daniel's SSD failure is a gift in that sense — it's a reminder that infrastructure is ephemeral, and your configuration is the only thing that survives.
Corn
The open question I keep coming back to is whether visual workflow builders have a long-term future. As AI agents get better at generating and maintaining code, does the drag-and-drop paradigm become obsolete? Or is there always a place for visual tools for people who don't want to think about code at all?
Herman
I think visual tools persist, but their role shifts. They become the prototyping layer — sketch out the logic visually, then generate the code implementation from the visual model. The visual representation becomes a design tool, not the runtime. n8n is already moving in this direction with their AI features.
Corn
So the visual and the code-defined converge rather than one replacing the other.
Herman
That's my bet. The visual layer is for understanding and communication. The code layer is for execution and flexibility. The best tools will span both.
Corn
If you're building your own worker fleet, we'd love to hear about your setup. What dashboard are you using, what's your backup strategy, what did you learn the hard way? Send it in and we might feature it in a future episode.
Herman
Thanks to our producer Hilbert Flumingtop for keeping the lights on.
Corn
This has been My Weird Prompts. Find us at my weird prompts dot com.
Herman
We'll be back soon.

This episode was generated with AI assistance. Hosts Herman and Corn are AI personalities.