AtTwin Engine Labs, we feel that the case for deploying
your production code to cloud based environments has been clearly
made and we do not support
We typically choose a provider out of a group of providers we
and the community at large have had success with. For us, Digital
Ocean, Heroku, and Amazon's EC2 have fit that bill. No matter the
computational provider (the machine serving the requests made by
your app) Amazon will more than likely find it's way into the stack
- for either storage or CDN (Content Delivery Networks are used to
get content to your users as fast as possible).
The primary factors to consider are:
- Price - Price per hour? Per machine? The details of how the
host makes money.
- Compatibility - How well a provider will work with us,
yourself, or an agency you're using.
- Scalability (Flexibility) - Does the host allow for complex
infrastructures?
- Scalability (Ease) - Does the host allow scaling that doesn't
require complex scripts and cluster configurations?
- Technical Flexibility - Does the host allow you to do whatever
you need to technically, or are there constraints to consider?
- Support - What is the host responsible for and therefore on the
hook for support for?
As a thought exercise, Heroku (built on Amazon services) would
look like the following:
- Price - Per dyno or worker, $/mo
- Compatibility - Works well with your engineering process and
pretty much any other capable shop like yours.
- Scalability (Flexibility) - Infrastructure is largely handled
by Heroku and thus flexibility is pretty low, meaning truly custom
architectures are difficult to achieve.
- Scalability (Ease) - Very simple; you can scale with a slider
and moments later are at scale.
- Technical Flexibility - Lots of constraints. Web timeouts are
strictly enforced, storage is not allowed on disk, etc. This means
deployment to Heroku is not the same as deployment to a laptop, EC2
Instance, or Virtual Private Server with root access and disk
space.
- Support - They are a PaaS (Platform as a Service) company and
so are responsible for all things on and below the platform layer.
Anything at the application layer (your engineers' code) is not
supported by them.