How do I design a pluggable points and badges system which is easy to turn on and off, as well as easy to turn into a module of its own?
After many trials and errors I reached the conclusion that points and badges are simply too intertwined into the sole business logic of the application that they cannot be externalized in a simple way (many rules involve understanding of the core structure of the application, which makes things already quite coupled)
I currently do everything the simple way - I externalized all the business logic (validation, persistence, gamification, notifications) in the methods of a service class. Those methods however already became quite cluttered, and I fear quite coupled. There is no simple way to simply shut off any of the underlying systems