What kind of scale?

  • 70 lein projects
  • 20 services


  • structuring code
  • multiple projects
  • choosing libraries
  • logging
  • commons daemon
  • infrastructure as code

structuring code

  • use component
  • component lets you use dependency injection in your tests
  • component can help you decide where to put code

multiple projects

  • multiple lein projects
    • navigating code leads you to read-only code (i.e. in your local maven repository)
  • write a script to merge all your projects and dependencies together so that you can run all your tests in one place

choosing libraries

  • be cynical
  • libraries without dependencies are safe choices
  • any library that does any network operation - caution! (e.g. timeout guarentees, queuing, async/sync IO)


  • LOGBack, Log4j, Java Logging API, SLF4J
  • use SLF4J
  • use the same facade for all logging configuration

commons daemon

infrastructure as code

  • (see video)


  • Release it! (book)
  • Component (youtube)
  • Language of the system (youtube)
  • The Pheonix Project (book)