Storage engine APIs, filesystem APIs, etc. are all closely coupled places unless they've been designed with disregard to performance.
Plan 9 had a beautiful and simple API for a network filesystem but real filesystem APIs (like FUSE) are complicated as hell because memory allocation matters.
Similar things turn up with storage engines. If performance, reliability and other "non-functional requirements" aren't addressed you can make something simple, but ignoring those things makes your system likely to be "non-functional" in the end.