Hot take time: you probably don't need that compiled language.
I keep arriving at the same architecture: shell for data gathering, Python for decision logic. That's it. That's the tweet.
Shell does what shell does well
Shell is incredible at: gluing CLI tools together, file operations, pipeline transformations, running subprocesses, quick system interrogation.
It's awful at: complex conditionals, data structures, string manipulation, anything requiring more than 20 lines.
So I use shell for the first list and nothing else.
Python does what Python does well
Python is incredible at: logic with actual control flow, data structures, JSON parsing, readable conditionals, anything complex enough to need tests.
It's mediocre at: performance-critical code, deployment. But be honest: how much of your code is actually performance-critical?
The boundary is the feature
The separation between shell and Python is clarifying. Shell produces JSON. Python consumes it. Clean interface. I can test the Python logic with mock data. I can debug the shell by just running it.
When to break the rule
**Go:**When you need a single distributable binary. **Rust:**When performance actually matters. **TypeScript:**When you're building web UI.
But for automation, scripting, system integration, data pipelines? Shell + Python. Every time.