2 - datastore query is expensive but memcache works great, so cache frequently accessed data
3 - i make sure that whenever i put() any data, i immediately set Memcache, and before making any get() from datastore, I try get Memcache first, this should not cause issues.
My question for point #2 is in the line of the need to perform data migration actually.
Let's say you have a bug on your code in a way that the data stored currently are wrong and you need to fix them up by performing a batch update. Would that hurt you in terms of cost? How would you handle such situation?
Or let's just say that your user profile data model needs to be re-jiggered to support a new feature (adding columns, changing current columns, etc).