Current aggregation systems either have a single inbuilt aggregation mechanism or require applications to specify an aggregation policy a priori. It is hard to predict the read and write access patterns in large systems and hence applications built on such systems suffer from inefficient network usage. We present Shruti, a system that demonstrates a general approach for self-tuning the aggregation aggressiveness to the measured workload in the system, thus optimizing the overall communication costs (e.g., the number of messages exchanged on read and write operations).