Environments and applications

On a recent project I spent some time pondering the difference between environments and applications. It is easy to conceive of such a distinction but I think on closer inspection it is not so easy to determine exactly where the line should be drawn.

It is tempting to simply determine that the two have distinct lifecycles where applications are isolated units that are deployed to and live on an environment. With that thinking I decided that environment lifecycle would be handled by configuration information kept in Puppet and that applications lifecycle would be handled by deployment and configuration of them using mcollective. This distinction worked quite well but really, it is not that clear cut.

The best term I can think of is ecosystem. In the ecosystem the primary reason that it is convenient to draw the distinction at this environment/application level is because applications typically don’t have any symbiosis between them, any interaction is specifically treated as an integration point. Between environment and applications though there is symbiosis and despite best efforts they generally cannot be untangled.

In other words, applications are parts of the environment that are visible above the surface. Exactly where to draw the distinction is usually a personal choice - within sensible limits.

CoffeeScript in Action

CoffeeScript in Action book cover

I'm the author. Get it from Manning.