Salesforce is a fairly unpleasant experience for developing complex applications. This is because Salesforce has a very specific idea of what one would want to develop, and if your application isn’t within those boundaries, you need to steer clear!
The governor limits are very limited i.e they have 16 level recursion, no more than 200 objects returned from a query, 1 meg heap, no more than 20 queries can possible in one invocation. The final result for this is that any cleverness you come up with to get around one limit runs afoul of another one.
Once you have reached a certain size, all your time will be spent on coding around these limitations. Apex doesn’t support any meaningful inheritance. Even the simple tasks end up taking days when one finds new and apparently random limitations.
Tooling and support in Salesforce also seem to be very weak. They are unreliable and challenging to use for real development processes. Since the tools have enormous difficulty working out complex dependency issues, and numerous entities, deployment is overall very difficult.
Salesforce is definitely not a flexible environment. It is not at all a quick or fast development environment. And it is obviously not a good environment to build anything other than simple applications.