Unfortunately, any reasonably complex side project eventually becomes work. It's still useful to keep grinding, as it builds perspective on why things are built the way they are, even when you have "freedom" to to implement them any way you like. What you don't have is infinite time though so if you wanna actually be able to use the darn thing, you have to settle for an imperfect design which soon enough will start to show it's limitations but instead of rewriting, you keep duct taping if because something that just works today is infinitely more business valuable than perfect tomorrow. Particularly when you realized from experience that tomorrow still won't be perfect, just late.
For clarification, I'm talking about building an automated trading system. And to get an idea of the complexity involved, just take a look at the "order" class in Interactive Brokers API. If you thought (side, price, quantity) is what defines an order, you're being naive: https://interactivebrokers.github.io/tws-api/classIBApi_1_1O...
Also even when you start with a mindset "I don't need all of this, my stuff will be simple", as I said, over enough time, use cases pile up and your original "simple" design either has to give way or become "useless".