Recs.
Updated
A productive web framework that does not compromise speed and maintainability.
SpecsUpdate
Pros
Pro Fault tolerant
In Elixir, a process can have a supervisor that can restart the process when it fails. That is one of the reasons why Erlang has 99.9999999% (nine nines) reliability.
Pro Built-in database options
Elixir's built in in memory and disk-backed key-value stores provide "batteries included" style storage (making e.g. Redis optional in most cases), while Ecto provides language-level integration for safe handling of SQL databases complete with migration handling, complex joins, and extensible data typing.
Pro Great tooling
The mix build system brings together dependency management, template generation, database maintenance and more into a single easy to use system; testing comes built in with ExUnit and doctests; the iex shell has built-in debugging features that can be used during live web browser interactions.
Pro Very helpful and informed team
Support from team has been great. As soon as a problem arises they are quick to react and treat problems with the correct level of rigour and seriousness. Even though they have not yet been able to get my code working on my Apple Mac yet, they were able to help me ascertain the source of the problem wasn't with my code, which narrowed down the problem sufficiently for me to be able to create a new working environment and resume development, which was a good workaround under the circumstances.
Cons
Con Separation of view and template of questionable use here
Most of the time, particularly with small to medium-sized and more traditional web projects (with lots of static content, or semi-dynamic content that largely just pulls data directly from databases), the separation of view and template just results in a bunch of three line files in the 'view' folder that don't really do anything useful. Perhaps the separation is great for those trying things others wouldn't be doing, or those who helped put the framework together, but looking at the way the community implements it, for intermediate use this adds an extra step to development that's unnecessary for many people.
Con Some issues creating production builds
Production builds sometimes fail inexplicably and build processes that worked fine last time fail to compile static assets or end up using previous asset versions. Similar problems when following the 'basic' build process, and also with the Edeliver and Distillery pipeline, which is recommended by Phoenix maintainers. Clearing out caches using the requisite mix commands may help with this but behaviour should not be inconsistant.
Con Channels require support on front-end
Why not support and include by default a simpler websocket implementation?
Con Functional language is less popular
Many people used to object oriented don't currently want to work with a stateless language.
Recommendations
Comments
Out of Date Pros + Cons
Con Lack of fully featured authentication libraries
Currently there is no one clear solution for authentication libraries for Phoenix, which potentially adds significant development time when creating user profiles, payment systems etc.