As an alternative approach, I suggest you actually develop your engine and your game in tandem. In this way it's easy to focus your engine efforts to provide functionality that your game needs and let it evolve as you develop. Do try to consider things you might need, but also try not to get hung up on them.
Basically, start from, "I want my game to do (insert feature)", then create an engine that facilitates that. Create your game and utilize the engine to implement that feature. Then move on to the next feature.
An advantage of this approach is that it helps ensure you don't actually spend time writing something you're not going to ship. For example, you've listed that your engine should have collisions, animations, input. At the start of a project it's easy to envision all the things that you want. As you go further, those things change. For example, you may decide that for your initial release, animations aren't actually that important because you took the art in a different direction. If you don't actually need that functionality, not much point in coding it
I say this from experience... I'm one of those people who have, in the past, gotten super caught up in details and having a robust engine. What tends to happen is I spend a bunch of time working on an engine that I end up not using, or not utilizing fully. I've made a lot of effort lately to shift my approach and I've found it to be beneficial. Do ensure you're following SOLID coding practices though, as it will make it much easier to extend your engine to meet the needs of your changing requirements.