I guess I'm mostly thinking of a server in concurrent reader/writer scenario. The common advice seems to be to use SQL or some form of database, especially for networked applications serving many clients. Yet Git has proven wildly successful while as far as I know rolling its own persistence/storage layer. It's also different in that it's written in C. And while git is distributed, I at least often use it in a more client-server manner (pushing/pulling from github/origin). I could be mistaken on any of these points so please correct me.<p>From the perspective of "commoditize [your] complements", one could say storage is part of the bread and butter of git's functionality, so it makes sense for it to roll its own. But that's also nearly as true of any transactional or eventually consistent web application.<p>Performance constrained environments like HFT could probably have a much higher latency and throughput capability by using a specialized handwritten solution and avoiding the SQL translation layer. Similarly, there are plenty of games that are written without engines, though I don't know how many are written without a more generic renderer like OpenGL/DirectX these days and that's a critical subsystem of any game.<p>Are there any other examples like git in this situation? Are there any general patterns that make rolling your own persistence viable?