Many applications will require the routes to span multiple namespaces. It is quite easy to do so with reitit, but we might hit a problem during development.
While we could use the [reloaded workflow](http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded) to reload the whole routing tree, it is not always possible, and quite frankly a bit slower than we might want for fast iterations.
## A crude solution
In order to see the changes without reloading the whole route tree, we can use functions.
```clj
(ns ns1)
(defn routes [] ;; Now a function !
["/bar" ::bar])
(ns ns2)
(require '[ns1])
(defn routes [] ;; Now a function !
[["/ping" ::ping]
["/more" (ns1/routes)]]) ;; Now a function call
(ns ns3)
(require '[ns1])
(require '[ns2])
(require '[reitit.core :as r])
(defn routes [] ;; Now a function !
["/api"
["/ns2" (ns2/routes)] ;; Now a function call
["/ping" ::ping]])
(def router #(r/router (routes))) ;; Now a function
The astute reader will have noticed that we're recompiling the full routing tree on every invocation. While this solution is practical during development, it goes contrary to the performance goals of reitit.