Getting data from different services
Perhaps or macro could be used here:

(defn get-data [query]
   (or (get-data-from-cache query) 
       (get-data-service-1 query) 
       (get-data-service-2 query) 
       (get-data-service-3 query)))


or short-circuits, so the first match will return and the rest will not be evaluated