When I start a free trial I immediately set a reminder in Google calendar. And when I am looking for a specific movie I buy it used online. That way I have all my favorite movies on my NAS and can cancel my subscriptions when there is nothing especially interesting.
That doesn’t make it spaghetti code though. In well-written OOP code you shouldn’t care where a function is implemented. The problem is a much too high level of abstraction. If your high level code is so abstract that it is only running tasks and handling messages there’s no way to write it in a way that prevents mistakes because you couldn’t possibly know what the actual implementations do.