opti-pipe watches your pipeline runs, compares them against your configs, and tells you exactly what's wasting money or risking a failure โ with a diff you can read and a number you can trust. Nothing ships without your click. Want a second opinion? An optional AI-powered review sits on top of every rule.
Data engineers waste hours guessing at executor memory, batch sizes, and cluster size โ and get it wrong in both directions.
Over-provisioned clusters and executor memory sit idle, burning budget on capacity nobody is using โ and nobody notices until the bill arrives.
Under-provisioned memory and unoptimized parallelism cause OOM kills and queue delay โ usually discovered in production, at the worst time.
opti-pipe reads config files alongside execution telemetry โ no need to eyeball dashboards across four different tools.
Stage/job completion time and queue delay, tracked per run to catch bottlenecks before they compound.
Processing rate derived per run, so scaling issues show up before a pipeline falls behind its SLA.
Executor heap usage, allocated vs. actual CPU, and GC pause time โ the signals that separate "wasteful" from "about to OOM."
Instance type, cluster size, and schedule combine into a monthly cost estimate โ and a savings number for every fix.
How it works
I don't trust an agent to touch a production Spark config unattended, so it doesn't. You approve every change in the dashboard below, or nothing happens.


A live Spark reader (REST API / History Server), Flink-specific tuning rules (the integration itself just shipped, ahead of rules that actually use its checkpoint/backpressure numbers), and a way to define your own rules are all logged and waiting. None of them get built ahead of demand โ that's exactly how the Spark event-log reader itself went from idea to shipped: gated until enough people asked for it by name.
Need something that's not on that list? A rule, an integration, anything โ tell me what and why, and leave an email so it's a real request, not a bot. That's the actual signal that decides what gets built next, not a guess on my end.
# eleven deterministic rules, no model in between
The one I actually needed handles OOM/GC pressure. Some Spark job would randomly
OOM, I'd lose an evening staring at heap and GC numbers trying to work out what changed, and
eventually I got tired of doing it by hand and wrote this instead. If it's useful to you too, good โ
if not, tell me why, that's worth more to me than a compliment.
โ I'm the only person who works on this
No auto-apply. Some optimization tools have an "autopilot" mode that
applies changes to your cluster after every run. I didn't build one โ there's
no switch to turn it on. GET /recommendations recomputes live from
the current config and metrics on every call, so there's no hidden state that
could drift from what you last approved.
The eleven rules above stay free, deterministic, and fully unit-tested โ that doesn't change. On top of them, an optional "Ask AI" button sends your metrics and the rules' own output to a real Claude model for a plain-English critique: the same natural-language second-opinion idea larger platforms charge enterprise pricing for, here as one button with your own API key.
A few sentences on this pipeline's overall health, written from its actual run metrics.
Does the deterministic engine's recommendation actually look right given the numbers? The model is explicitly asked to disagree if it should.
Trends across runs, outliers, correlations between metrics โ patterns no fixed threshold rule is built to catch.
This part costs real money per click, so I made it optional instead of automatic. Each click is a billed Claude API call, using your own Anthropic API key (a claude.ai subscription doesn't cover API access). Nothing else on this page needs one, and everything else works the same whether or not it's configured.
One FastAPI process. No Docker, no message queue, no external service to configure before you can see it work.
๐ Your uploaded data is anonymized by design. Only numeric metrics โ timing, row counts, heap/memory percentages โ are ever extracted from your file. Never your SQL, model names, DataFrame code, or file paths. And it's private to your browser only: no account, no other visitor can ever see it.
Explore the live sample data, or add your own Spark, dbt, or Flink pipeline and see real recommendations.