I recently started using N8n, and something clicked.
What I love about N8n is deceptively simple: I can pause at any step, inspect the output, and rerun it. All previous steps? Already done. I can see the input and output for every single node in the workflow.
As someone who's been programming for almost 20 years, this felt good. And it got me thinking:
How can we achieve the same thing in traditional programming?
Because let's be honest—coding is fast. Especially now with vibe coding and AI assistants, we can ship things faster than ever. But speed often comes at the cost of visibility and control.
A Simple Architecture That Changes Everything
Here's what I came up with—it's almost embarrassingly simple:
Each step (action in n8n terms) is a single Python file. Input is a JSON file. Output is a JSON file.
That's it.
python step_01_fetch_data.py --output data/01_raw.json
python step_02_transform.py --input data/01_raw.json --output data/02_transformed.json
python step_03_enrich.py --input data/02_transformed.json --output data/03_enriched.json
Why This Works
- Full transparency — You can inspect any intermediate state at any time
- Easy debugging — Something broke at step 3? Just rerun step 3. Steps 1 and 2 are already done.
- Version control friendly — JSON outputs can be committed for reproducibility
- Perfect for iteration — Tweak one step without touching the rest
The Scripting Mindset
This isn't about building monolithic applications. It's about embracing a scripting style of development—small, composable units with clear boundaries.
In an era of complex pipelines and AI workflows, sometimes the best architecture is the one you can actually see.