Examples implementations described herein involve systems and methods wherein the storage software is configured to consider the capabilities of the underlying hardware to determine the caching data method at run time. Some examples of capabilities that are considered in the example implementations include whether non-volatile memory (NVM) is available and how much NVM is available. Some examples of caching methods used include using both dynamic random access memory (DRAM) and NVM to cache write data and using only NVM to cache write data.