For the last 2 years I've been working on a 2D game and Godot was the engine I chose for this job.
Although I've never released a game before, I did experiment with other engines and technologies along the years. That's why I decided to summarise here my point of view of Godot's pros and cons and why I chose it over other options available.
Unfortunately I can just talk about the 2D part of Godot, as I haven't really tried the 3D engine. You can read more about Godot features here.
Everything in Godot is a node, and the proper way of communicating between nodes is through signals. In the editor you can easily embed scenes or extract a group of nodes to a new scene. This modularized orientation allows a good level of decoupling and makes creating, changing and supporting your game easier.
Far from having the best code editor ever, Godot editor does a decent job. Auto-completion is complete and useful, it is easy to find errors and switch between the graphic part and its related scripts.
GDScript, Godot's official language, is simple and easy. It's based on Python, a language known as being beginner friendly. Its dynamic nature makes it a good fit for scripting and spiking.
Another good thing is that you are not limited to GDScript. Godot has support for other languages such as C# and C++, besides the community-provided support for a few others.
Create games on any desktop OS. Deploy games everywhere
Godot editor runs in all major platforms and exports games for mobile, web and desktop. Tested and approved!
Community and docs
It is amazing how many answers you can get with a simple search. Godot community is very active and growing everyday. You can dig the forum or look into the documentation which is usually easy to search and mostly complete.
Version control friendly
All Godot files are plain text. This makes solving version control conflicts an easy task. It is relatively easy to understand what changed only looking at the diff.
Open Source and fast evolving
Besides all the benefits we get from an open source tool, Godot counts with a small team of skilled people working full time on the project. Every release come with many bug fixes and cool features and it is always transparent for users and contributors.
Noise in version control
Sometimes when reviewing my changes before commiting I see differences in files that I didn't change. This is due Godot storing information about my workspace (such as nodes expanded or collapsed) in the scene's file.
It is useful to come back to the editor and find nodes in the way you left them, however I can see the hassle it would be for developers working in teams where every time you commit something you need to review which files are changes and which ones are just noise.
GUI development always suck. It's boring and annoying. Godot does a decent job here, but it's not pleasant. If you don't structure your elements carefully they will expand and shrink in the craziest ways.
As most of the game engines, there is no easy way of testing your scripts. Given testing is one of the best tools for designing complex scripts, it would be nice to have a way of keeping them inside the IDE workflow.
I see why writing tests are not the focus for game engines given the fact that many things are done using the interface and scripts are usually procedural, short and simple. I agree in those cases testing would be contra-productive.
My workaround when developing complex scripts is to make them in a different language outside my project and then translating them to GDScript. I'm talking about pure logic scripts. I don't think you should test things that interact with Godot's API.
In the post "How to make your dream game, publish it and not die in the process", Juan Linietsky, Godot's lead developer, explains Godot's philosophy and his point of view of game development. Tests are not one of the topics of this post, however it makes clear why their absence shouldn't be a problem.
Whether you are an experienced developer or a beginner I do recommend trying Godot. Keep in mind an engine always come with a learning curve and some constraints, however Godot still enjoyable.
A quick comparison with other engines
Disclaimer: Even though these engines didn't fit my scenario, this doesn't mean they are bad or worse than Godot.
Cocos2D-x is an open-source, multi-platform framework.
The main problem was that I got the worst of two worlds: I didn't have all the benefits of a full engine workflow and at the same time I was not as free to work in my way. I was constantly looking into the documentation and trying to understand why things didn't work.
To make things worse, some times the only help I could find was all written in Chinese.
To be fair, I used Cocos2D-X more than 5 years ago, and things probably improved since then. Another thing to point is actually their focus seems to be mobile games.
Unity has a big community and the many resources available make it easy to get in. Having said that, developing 2D games in Unity always felt hacky to me.
2D in Unity is actually 3D with a fixed camera. I lost the count how many times I had to solve issues that where just things in wrong perspective.
Among things that made me look for something else are: Unity is heavy, consumes a lot of resources, you need to download updates very often and there is no Linux editor
Defold looks really good. To be honest I didn't develop on it, because when I started for the first time they asked me to login and save my files in their servers. The Defold catch is that it was made to work using King's servers.
There is a way to use your own version control, but after reading I realised it wouldn't be that simple.
There are other possible downsides such as the small community and being a proprietary engine maintained by a small team. But I confess what scarred me most was the lack of freedom in the way you develop and organise your application.
Gamemaker Studio is a heavy weight of game engines with a impressive showcase. The reason I didn't follow up with it is simple and for many people probably silly. Their support for Linux is limited to Ubuntu only.
I've been using Linux as my main operational system for more than 10 years and making a game that runs in Linux distros, Windows and OS-X is always one of my goals.
I know people will say that moneywise Linux is not a good target, but for me it is more a matter of principle than anything else.
MonoGame is an open-source implementation of Microsoft XNA 4 Framework. You can make games for many different platforms, including PS4 and XBox One. Many successful indie games were made using MonoGame such as Fez, Bastion, Tower Fall and StarDew Valley.
What turned me off was all the requirements, confusing documentation and the heavy dependency on other softwares such as Visual Studio and Xamarin.
LÖVE is a cute, multi-platform, and open source framework for 2D games. Not much to say. It was just too limited for what I was looking for.
Set your goals
The best engine for you will depend on your goals. First define what you want to achieve and then think how an engine would be able to help you.
For me Godot is serving well. I still want to make a game from scratch eventually, however it requires a big amount of work and my goal now is just to release my first game.
I appreciate feedback. If you have something to add, a different point of view, comments or suggestions leave them bellow. Thanks!