There are many people with better experience than me to help you with specifics here, but I have one point I think is always worth bearing in mind.
You don't need to get it 100% perfect first time. In fact, if you aim for that you'll probably never even finish. The reality is you won't understand the design fully until you've built the system once.
Just start, keep pushing forwards, keep on-top of unit test coverage, and as you understand the system and its intricacies better then incrementally refactor to improve it.