Technologies
Multiple attempts at building an online game
Failures
Meteor
I first tried writing my card game with Meteor, which is marketed as a framework for ultra-productivity because of how closely it ties the back-end to the front. It even had the real-time interaction stuff built in!
I tried to make a simple game work with Meteor twice over the course of a couple years. Anything more complex than what was featured in tutorials led me down rabbit-holes of documentation, or the lack thereof.
If you have a simple CRUD app, then sure, give Meteor a try. Anything more than that, I'd question.
Pomelo
I also researched Pomelo which is built to be a super-scalable, distributed game server framework. Sounds perfect for my use-case.
The issue is that Pomelo is so concerned about getting your game to be fast, it doesn't put as much emphasis on the step that needs to come before that, make it work.
Unreal Engine
Heck, I even went so far as experimenting with an über-powerful game engine. As you may have guessed, that's overkill for a simple card game.
Success, with Elm
For those who don't know what Elm is, it's a concentrated dose of confidence to usher my dilemma to its demise.
It took a square-root of the problem space I had to work in.
Absent were: delayed discovery of type errors at runtime, unwarranted state mutations, fussing over dependencies, an inscrutable build system, fear of refactoring, stubbing, spying, mocking, or forgetting to mapDispatchToProps
.
...I take that back.
Confidence isn't the limiting factor. Elm gave me the time to get it done. That's why both the front-end and back-end are being written in Elm. The fact that I'm debugging CSS animations at all is a testament to the power of Elm.