Decent high level points (with a lot of room to add specifics).<p>First thing is that your data design has a huge impact on everything your applications do, so getting that right is critical. I would say these points assume so.<p>Also I'm not sure i agree with his point that caching your data layer isn't a good idea. Yes, MongoDB has pretty awesome in-memory performance, but having dedicated caching servers have numerous advantages like:<p>- Allowing you to manipulate the data structures better for use-cases or to cache preprocessed items (that might not require persistence).<p>- Resources. A memcached box doesn't need the type of hardware a MongoDB box needs so it's easier to increase your global cache size and performance w/o adding new DB servers or dealing with indexing size vs working set size voodoo.<p>- Specialization. Caches are built and optimized for doing exactly that. Why would you think your DB code can do it better?<p>- Flexibility. I can control my caching lifecycle independently of how my persisted data changes.<p>At any rate, i'm enjoying my MongoDB work and it does help a lot for the push button scaling, but unfortunately, whole <i>systems</i> need to scale, not just the DB servers so these suggestions won't solve all your problems.