3 years ago I graduated and decided to start making simple mobile games solo. I had to make a choice between MonoGame and Unity, and I went with MonoGame since I already knew XNA well and thought MonoGame will do fine for my simple 2D games. To be perfectly honest, which is the point of this post, I have come to regret this decision and am looking for a time break anytime soon to start learning and switching over to Unity. I am willing to put up with all sorts of development issues (no content pipeline, thin documentation, relatively small community, having to make many foundation stuff myself such as GUI and basic engine) as long as the final product worked well for the end user, but after much investment into the platform, I finally found many underlying issues, too many to list here, but here are the most major ones that are most apparent on iOS and Android, and least on WP:
1- MonoGame is slow: I develop on a 2011 iPhone 4, which quickly shows any performance issues. Simply drawing a full screen blank texture in MonoGame drops the FPS from 60 to 40. For my latest arcade game I was forced to use the Graphics clear color as my background to improve FPS, and still the game is basically unplayable on older devices, since after adding a few textures, it runs at sub 20 FPS. Meanwhile other games such as Badlands and Angry Birds, which utilize high res multi-layered backgrounds and tons of foreground objects run at a smooth high FPS on my iPhone 4. It is impossible to recreate this good performance in MonoGame.
2- MonoGame stutters a lot: These periodic frequent freezes simply kill any time sensitive arcade game, and this is the one that is absolutely the most devastating to my games. Doing a simple memory profile on MonoGame WP will show it creates a lot of garbage each frame. This is most apparent on the Android platform where my games keep having noticeable ~100-200 ms freezes every few seconds, even after all my efforts to create zero garbage on my part by reusing all game objects and object pools and abstaining from using LINQ. On the iOS platform, instead of frequent mini/micro pauses, I get 1 huge 1-2 second pause every couple of minutes or so. These problems seem least apparent on the WP platform though.
3- Cross platform MonoGame+Xamarin isnāt cheap: I am too used to Visual Studio and Resharper, which means I had to get the Xamarin Business edition that costs 2k$/year for both Android and iOS to keep developing within VS, and if I stop paying, I lose access to my projects from within Visual Studio (Xamarin unloads them) and so I cannot even do a small update for my games in the future unless I buy a whole year subscription again. In addition, Xamarin iOS + VS2012 is plagued with many problems, too many to list here, but the major one is that I was never able to debug my app on iPhone due to connection problems between the Xamarin and the mac build host, and instead I have to guess what caused a crash when testing.
4- Development is slow: Each time I want to tweak a variable and test how it affects the game, I have to redeploy to device and sit waiting ~30 secs at best (much more time if deploying to Android or iOS).
These are not facts, just sharing my own experiences, yours might differ. Many people have put a lot of effort into MonoGame for free and I greatly appreciate that, but I dont think that a few good folks will be able to compete with the big guys offerings. At this point I see little reason to recommend to anyone MonoGame over Unity for example. I feel bad that about 1.5 years investment into basic game engine utilities will go to waste when I leave MonoGame, and many hours of misery troubleshooting Xamarinās iOS problems.