Emerging non-volatile storage technologies promise orders of magnitude bandwidth increases and latency reductions. These performance changes upset the relatively stable landscape of disk-based storage that has existed for the last forty years. Over that time, elegant and composable, but thick software layers have emerged to simplify and optimize accessing slow disk-based devices. As new technologies drive storage hardware latencies down, the relative cost of these thick software layers will become increasingly harmful to the performance of accessing fast non-volatile storage.This talk describes a series of prototype storage systems based on these memories, and describes three principles we employed to minimize software overheads while preserving compatibility with large portions of existing storage infrastructure (e.g., file systems). These principles are: Refactoring storage software and hardware to eliminate software bottlenecks, reducing and eliminating harmful software overheads where possible, and recycling existing components to maintain compatibility and reduce engineering costs. We have found that aggressively applying these optimizations leads to fast, flexible, and efficient NVM-based storage systems for both local and distributed storage.