@Louis_Frolio  — really appreciate this, it refocused the whole thing.

Biggest takeaway: I'm flipping the framing to lead with Photon fallback / Photon ROI and treat cost + right-sizing as the baseline, since the system-tables dashboards and Overwatch already cover that. Good to have it confirmed there's no first-class fallback metric — that's the gap I want to own.

I've stopped fighting the dedicated-classic-only constraint and now lean into it: an in-process QueryExecutionListener reads the executed plan, degrades gracefully where the JVM is sealed, and on serverless/SQL I'll point to the Query Profile / COVERAGE_PHOTON instead of promising per-statement detection.

The deploy pattern (extraListeners via cluster policy + JAR from a UC-allowlisted volume, keep DBCEventLoggingListener, skip init scripts) and the billing notes are gold — I'll stop presenting list price as the real number and add the cluster_id coalesce later.

Thanks again, genuinely helpful.

Cheers, Yoga

Data Engineer | Apache Spark | Delta Lake | Databricks