There have been proposed protocols to achieve causal consistency with a distributed data store that does not make safety guarantees. Such protocols work with an unmodified data store if it is implemented as middleware or a shim layer while it can be implemented inside a data store. But the middleware approach has required modifications to applications. Applications have to explicitly specify data dependency to be managed. Our Letting-It-Be protocol to the contrary, handles all implicit dependency naturally resulting from data accesses even though it is implemented as middleware. Our protocol does not require any modifications to either data stores or applications. It works with them as they are. It trades performance for the merit to some extent. Throughput declines from a data store alone were 21% in the best case and 78% in the worst case without multi-level management of dependency graph, which is a performance optimization technique.