Hey,
Are you experienced in programming? It makes a whole world of difference whether you are already an experienced developer in any domain just transitioning to game development, or you’re also want to learn programming through this project. If the latter, then I’d say don’t do it, writing your own game engine to learn programming is a very bad way, try with small projects like Tetris or breakout clones for coding practice, but even those will probably not give you enough experience to succeed. But if you already know programming very well, then your plan could be a logical next step, if you’re dedicated enough. You didn’t specify if you’re working in 2D or 3D, but I’ll try to share my experiences.
Like with any other thing, there is no silver bullet for game development either, but there are things that most games share, like collision detection, scenes, physics, etc.
Don’t start to implement the engine, you’ll most probably fail. Start implementing a game, similar to what you’d like to develop and write your engine through that. Once you’ve achieved a small bit of behavior successfully, think about how you can generalize that code and extract it for reuse, into the engine (as a superclass, utility, component, or any other thing). You will probably need to move your object on the screen, right? Write the piece of code that moves your object around, then extract it as a component or superclass, or whatever, and reuse it for other objects. You’ll need to collisions, right? Write a collision detector to detect collisions between 2 specific objects on your screen, even by directly referencing each other. If it works, again, think about how you could generalize it to apply to any number of objects. Same with textures: try to apply texture one test object, then extract the piece, etc. This could give a nice, organic way to develop your engine while constantly feeling successful by seeing your work improving. Eventually, as you develop your game and engine, you’ll realize that some decisions you have made weren’t so great, so you’ll have refactor, you’ll also probably notice that whatever worked on a small scale is very slow on a large scale (for lots of objects, etc), you’ll optimize and refactor again. Don’t be afraid of this, your first implementation will probably not be greatest for everything, but that’s how you learn and improve.
I know you don’t want “Personal Preference”, but there is no blueprint of developing an engine, no one will be able to give you a step-by-step guide to develop what you need. What you can find, however, are an insane amount of samples, demos, tutorials, full game’s with source code, and everything else you need for your yourney. Check how other people have implemented what you need, incorporate it into your game, then extract it to your engine.
I have some materials about the topic.
Project setup for cross-platform development for MonoGame, this give a short intro of how you can separate the engine from the actual game project:
This was my bachelor’s thesis on 2D game engine development:
And here is my open source, basic, immature 2D engine with source code and a sample platformer game. This has changed quite a lot since I wrote my thesis, but the basics are mostly the same:
There are definitely better and more mature engines out there that you can use as example (https://github.com/Martenfur/Monofoxe, Monogame Extended, etc.) so mine is just one sample.
Go your own way, make your own mistakes, and if you’re stuck, ask the community.
Good luck!