I have been playing around with SilverStripe for a few days now and I am completely sold on it.
My major gripe from a management point of view is the rather messy module uninstallation procedure.
As I understand it, you delete the files of the module, run dev/build/?flush=1 and then go and delete the relevant tables manually.
There is a post - http://ssorg.bigbird.silverstripe.com/archive/show/39160 - that suggests that the build task renames obselete tables with obselete_class_name but this does not occur and I guess that it would be rather dangerous, in case you have legacy tables in your database.
Moreover when I deleted a module of my own recently I got the [UserError] message saying that I had an invalid Singleton class - i.e. one that I had deleted - and I finally worked out that if I found the cache files (Manifest files) I could delete them and it would start working again.
I also understand that there is some kind of module manager coming in 2.4. In the meantime it would be helpful if the correct module uninstallation procedure were documented so that people like me could search for it more easily.