SharePoint is a magic framework and content management system. Why magic? It is difficult to explain, you should start work with SharePoint to understand it. Imagine the situation: you implement solution during 2-3 month. Everything works nice, all testers said: "There is no bugs". But several hours before deployment on test servers or even production event receivers stop working. Why? I think even Microsoft doesn't know why event receivers some times doesn't work. You will start rewrite logic, but it is too late. So some builds with this process - and you become a sharepoint apologizer :)
Only after some time of experience you will know what can we use in sharepoint and what is jungle and unusable.
Sometimes you should spend hours to change a simple label on the page.
Also there are some problems with testers. And many problems with new testers. They really don't know what is sharepoint and what belongs to your solution. They start report sharepoint bugs, they start sharepoint testing, skip major bugs in your solution. It was a problem on my first project. In some time testers have learned sharepoint functionality, but to speed up this process I recommend to pass some sharepoint trainings.
And there are more and more questions, bugs etc. But some customers like sharepoint and in some years of experience you probably like it too )). I recommend to pay attention to javascript libraries, implement lightweight solution as ajax based. It is a good point to implement your own sharepoint framework and reuse it. This framework can include:
1. Data layer, working with data.
2. Working with ajax requests.
3. Working with permissions and etc.