Hi @Valdore!
First a disclaimer: I'm not the guy doing this work, but I am using the old/new interfaces.
I think the biggest issue with the transition to new APIs is old code. Looking through the codebase, you can definitely tell that CryEngine started back in D3D9 times, on single or dual core machines, and did a lot of stuff that was probably efficient, or flexible, or at least fast to develop at the time. So a lot of existing code accesses big global structures - one thing sets a shader to be used, leaves it set for other things that will go and check what else it wants done, eventually the global state represents the next thing that ought to be drawn, it gets drawn, something then makes the minimal changes to draw the next thing. In the new APIs, we want to be doing all this kind of thing on a bunch of threads, and suddenly having everything fiddling around with a single giant data table is a world of pain. The new interfaces (which slowly appear amongst my code when I do an update) try to... um... pelletise(?) the process, so render state is associated with an object, work to be done exists as a set of objects with appropriate render state on each, so they can can be built anywhere, on any thread, chunked together on another, and only come back to the main render thread to be thrown at the GPU.