title: How do I go about plug-able features and modules in Java software architecture?
body: <p>I am about to start a new software project. I know that a good planing and software design leads, eventually, to a successful software project. </p>
  
  <p>I am wondering, How do I go about a software architecture where you have a core module and other plug-able or add-on modules. The modules can be excluded and included based on clients needs and pricing and can be turn off and on based on clients own configurations. </p>
  
  <p>For example, let us take some financial software and there is a module that does statistics about the market clients. Then some client- of my product - does not want to buy this module because they don't need it. What is the best way to design my architecture so that I can exclude with the least efforts and least code touching- without touching it at all if possible  - ? 
  we can discuss several topics like package organization, using some frameworks like JPF, Interface and Inheritance and so on ... </p>
  
  <p>Thanks in advance.     </p>