I wrote a forum post a few minutes ago about our success using Docker to eliminate issues in production while using Amber and Crystal. Which you may find interesting
The biggest I’ve had is that before we implemented commit locking, shards could release an update without bumping the version string that break old versions of Crystal but installing the new version of Crystal could break our code. Using Docker this way has reduced a lot of issues for us and how we did it may interest you.
Every language handles packaging differently, shards are unique and pose the same challenges as NPM and RubyGems do. As a for profit business, deploying Crystal is complicated and risky. We took steps to minimize the long term risk for ourselves and hope it provides some perspective to your question.