The reason to write this article is 3 years of Redux experience, working with Mobx a year on 2 projects after that and switching back to Redux.
The story had begun from the well known statement “Redux is verbose” and rather boring “thunk middleware” solution to handle async calls. The MobX from the other side seemed to shine with the elegant annotations and reactive paradigm.
But despite of all the promises i noticed the degradation of the development performance. The investigation showed the lot of magic behind the annotations caused lot of unexpected and unpredictable behaviour. Namely it is absolutely vital to track the observable properties are not replaced accidentally with the plain objects and there’s no calls of the implemented methods.
Lack of the Redux Dev Tool hist the development speed approximately 10%. Oh, yes, i know about “monkey coding” and “test units must be used instead” but the fact is — developing with the Redux is like an eagle flying and developing with the MobX is like the wading through swamp. While Redux is just work MobX is oh, shit, it works!
The “clever” nature of MobX makes devs to be “too clever” and to spend their time thinking out “beautiful” store models instead of just add an action/refucer/selector which are almost self-documented having nothing under their hoods, while the innocent assigning to MobX property could lead to few days debugging.
And the last nail in the coffin of the MobX was the Undo/Redo functionality. Practically it is impossible in MobX. At least in timely manner. So, no MobX anymore unless the customer insist in it.