Recently I've been looking into Prosemirror a lot. One thing I was extremely impressed by was the dedication and the thoroughness of the documentation. They provided a general guide, a reference guide, and many very clear examples. However, as I dove in and tried to use it myself, it was extremely difficult for me to wrap my head around all the concepts and code. I kept jumping back and forth between the same snippets of code struggling to understand the bigger picture.
I suspect there were multiple problems but one was almost certainly the way the files were set up for Prosemirror. It's split into 4 different core modules and like 20 other "plugin" modules. To understand it better, I started from the "example" plugin. This soon had me jumping between the 5 other plugin modules and the 4 core modules, making it very difficult to reason about the code. To make it worse, since the code was split up across different modules, I couldn't rely on my editor to "go to definition".
In essence, there were a lot of struggles to me understanding Prosemirror but it made me wonder if there's a better way to reason about code and organize it. We typically try to organize code into hierarchical file systems but there's no real reason why it should be that way. Maybe you can organize by links.
I talk a little more about it here: