I've been messing around with sandboxed solutions in SharePoint Online for a bit now. I have a few concerns about development, and especially maintenance.
In on premise environments I was used to using feature upgrades to add new stuff to existing features like new fields or lists. Works great, you upload a new version of your WSP, use the object model for updating and you're done.
Now with sandboxed solutions things are a bit different. To start off with, you need to upload your solution under a different filename to the server. The server wil recognize that your new WSP is an upgrade when the ID of the package matches that of an existing package. That way you can still write feature upgrade code which basically should work the same.
Visual Studio doesn't seem to support this. For one, the WSP is generated with the same name everytime. That means studio has to retract the solution before it get's deployed again. This causes the features to deactivate and in some of my feature code I use the activate event to create subsites (instead of a stapled feature) which are deleted again on deactivation. That's definitely unwanted behaviour.
You can workaround this by editing the filename after packaging, uploading yourself and then issuing the upgrade. Those steps could probably be scripted and used as a tool in VS, but it's not ideal since you'd also have to attach the debugger manually and stuff like that.
Then there's testing, how to properly automate the testing of deployment, usage and upgrading of solutions. An extra challenge there is that there is no way to back-up your SharePoint Online site to an on-premise testserver. Especially the upgrade scenario you'll want to test against an environment which is similar to the production environment. In onprem cases, I back-up the webapp and restore it on our testserver, but that's going to be impossible with online it seems.
Then deploying a not thouroughly tested solution and upgrading a production site... I don't know... it's not like there's an easy way to back-up and restore everything in case something does go wrong, right?