What Are Engines?
Put briefly, Engines are isolated, composable applications. They have almost all the same features as normal Ember applications, except an Engine requires a host application to boot it and provide a Router instance.
Engines allow multiple logical applications to be composed together into a single application from the user's perspective. - Engines RFC
Since each Engine shares a single router and host, you can compose logical applications in new and truly ambitious ways!
Why Use Engines?
There are a variety of motivations for using Engines with Ember, but some of the more compelling reasons are:
Distributed development - Engines can be developed and tested in isolation within their own Ember CLI projects and be included by applications or other engines. Engines can be packaged and released as addons themselves.
Clean boundaries - An engine can cooperate with its parents through a few explicit interfaces. Beyond these interfaces, engines and applications are isolated.
Lazy loading - An engine can allow its parent to boot with only its routing map loaded. The rest of the engine can be loaded only as required (i.e. when a route in an engine is visited). This allows applications to boot faster and limit their memory consumption.