         ;; Stage 1
         [params bounding-box grans-promise coll-promise s1-errs]
         (ous-common/stage1
-          component
-          {:endpoint search-endpoint
-           :token user-token
-           :params raw-params})
+         component
+         {:endpoint search-endpoint
+          :token user-token
+          :params raw-params})
         ;; Stage 2
         [params data-files service-ids vars s2-errs]
         (ous/stage2
-          component
-          coll-promise
-          grans-promise
-          {:endpoint search-endpoint
-           :token user-token
-           :params params})
+         component
+         coll-promise
+         grans-promise
+         {:endpoint search-endpoint
+          :token user-token
+          :params params})
         ;; Stage 3
         [services vars params bounding-info s3-errs s3-warns]
         (ous/stage3
-          component
-          service-ids
-          vars
-          bounding-box
-          {:endpoint search-endpoint
-           :token user-token
-           :params params})
+         component
+         service-ids
+         vars
+         bounding-box
+         {:endpoint search-endpoint
+          :token user-token
+          :params params})
         warns s3-warns
+        ;; XXX Note that this next `let` assignment will only work when
+        ;;     supporting explicit granule concept ids passed in the request;
+        ;;     as soon as we're supporting implicit granule concept ids in SES
+        ;;     (i.e., granule concept ids obtained from the collection), this
+        ;;     will break.
+        sample-granule-id (first (:granules params))
+        granule-metadata (concept/get-metadata
+                          search-endpoint user-token
+                          (assoc params :concept-id sample-granule-id))
         ;; Error handling for all stages
         errs (errors/collect
               params bounding-box grans-promise coll-promise s1-errs
               data-files service-ids vars s2-errs s3-errs
+              granule-metadata
               {:errors (errors/check
                         [not data-files metadata-errors/empty-gnl-data-files])})
         fmt (:format params)]

    (* total-dimensionality
       (util/data-type->bytes data-type))))

(defn estimate-binary-size
  [granule-count variables]
  (let [compression 1
        metadata 0
        measurements (reduce + (map get-measurement variables))]
    (+ (* granule-count compression measurements) metadata)))

(defn- -estimate-size
  [fmt granule-count vars]
  (case (keyword (string/lower-case fmt))
    :nc (estimate-binary-size granule-count vars)
    (do
      (log/errorf "Cannot estimate size for %s (not implemented)." fmt)
      {:errors ["not-implemented"]})))

;;;   Support & Utility Functions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Note that all internal operations for estimating size are performed
;;; assuming bytes as the units.

(defn get-measurement
  [variable]
  (let [dims (get-in variable [:umm :Dimensions])
