Abstract way of building applications that have multiple modes of operation and configuration passed on command line and/or using configuration files.