We can't tell unless you answer your questions: what do you want to achieve? A design for what?
As stated by Glocke, developing an engine for the sake of itself is pointless. You should know what you need it for, i.e. what problems it solves and for what kind of game it can be used. I'd highly recommend spending some thoughts about the design before writing code, otherwise you'll be refactoring all the time. A typical engineering approach could look as follows:
- There is a certain problem to solve.
- You think of possible solutions to approach the problem.
- You compare the solutions and find advantages and disadvantages of each one.
- You decide on one solution and implement it.
- Mistakes you make along the process will help you know better in the future.
You've stated that it's a hobby project, and of course you can learn valuable things while developing, but I would still try to have a clear idea of the results, in order to not waste my time. A concrete game will not only give the project a meaning, but it will also determine its design -- you'll know what the game needs, thus you can provide appropriate APIs in the engine.
These things can appear very difficult if you do not already have some experience in game development and C++, and I personally consider it a bad idea to write a game engine if that's the case. Keep also in mind that a lot of game engines have not emerged as a stand-alone product, they are the result of outsourcing functionality from a concrete game, in an attempt to make it more generic and reusable.