I wrote in my previous posts that you don't need to be an expert to develop a game engine. You don't need to be great at Linear Algebra, C++ nor OpenGL. What you do need is perseverance and willingness to improve.
Since the start, I knew full well my capabilities as a programmer. I didn't lay out a plan nor prepared a Functional Requirement Document. I didn't read C++ books cover to cover. I read just enough to get me started.
As I learned, I added more complexity to the engine. I started out with matrices but later implemented Dual Quaternions. I started out with simple collision volumes but then implemented convex hulls. The engine started without any memory management system. It was much later that I implemented smart pointers. I started out small, and as my knowledge grew, the engine grew with it.
Apply the same idea to your project. As you Learn, Implement. As you Discover, Experiment. And as Things Break, Understand Why.
Handling a complex project with this mindset makes it less daunting. It makes it manageable and exciting. Its complexity becomes interesting and the time spent enjoyable.
You don't need to know everything to start. You only need to have a desire not to give up.