 
 (defrecord AnotherComponent [component-a component-b])
 
+(defrecord AnotherSystem [component-a component-b component-c])
+
 (defn another-component []
   (component/using
-    (->AnotherComponent nil nil)
+    (map->AnotherComponent {})
     [:component-a :component-b]))
-
-(defrecord AnotherSystem [component-a component-b component-c])
 
 
 
+;; Sample usage:
+(comment
+
+(def system (example-system {:host "dbhost.com" :port 123}))
+;;=> #'examples/system
+
+(alter-var-root #'system component/start)
+;; Starting database
+;; Opening database connection
+;; Starting scheduler
+;; Starting ExampleComponent
+;; execute-query
+;;=> #examples.ExampleSystem{ ... }
+
+(alter-var-root #'system component/stop)
+;; Stopping ExampleComponent
+;; Stopping scheduler
+;; Stopping database
+;; Closing database connection
+;;=> #examples.ExampleSystem{ ... }
+
+
+)
 
 ;; Local Variables:
 ;; clojure-defun-style-default-indent: t

  component/Lifecycle

  (start [component]
    ;; In the 'start' method, initialize this component
    ;; and start it running. For example, connect to a
    ;; database, create thread pools, or initialize shared

;; which take a set of keys naming components in the system to be
;; started/stopped. Order of the keys doesn't matter here.

(def example-system-components [:scheduler :app :db])

(defrecord ExampleSystem [config-options db scheduler app]
  component/Lifecycle
  (start [this]
    (component/start-system this example-system-components))
  (stop [this]
    (component/stop-system this example-system-components)))

;; When constructing the system, specify the dependency relationships
;; among components with the `using` function.

(defn example-system [config-options]
  (let [{:keys [host port]} config-options]
