We are building an SaaS service that will be billed on a monthly basis. For example, if the user's service starts on 4th December 2012, then we bill them on 4th December 2012 for the month's fees. We then bill them again on 4th January 2013 for the next month and so on.
If the user wishes to change his plan, we either give them prorated credit (if switching to a cheaper plan) or charge their credit card a prorated amount until the next billing date immediately. In other words, based on the above example, if the user changes their plan on the 20th of December 2012 to a more expensive one, we calculate the prorated charge from 20th December 2012 to 3rd January 2013 minus their current paid amount from 20th December 2012 and 3rd January 2013 and charge that immediately to their card. The benefit of this is that it prevents the billing day from shifting when plan changes occur. Is this a good idea?
The application also has add-ons that can be subscribed to. The add-ons are also billed on a monthly basis. Add-ons can be subscribed and unsubscribed to at any time. Should add-ons be billed immediately with the billing period calculated so at it matches the plan's billing day? Based on the previous example, if a user adds add-on Y to his plan on the 20th December 2012, we only immediately charge him for the 20th December 2012 to 3rd January 2013. Is this a good idea? Or should we have the system add up all of those addons that are subscribed to between billing dates and just charge them that whole amount at the next billing date?
Our goal is to have a system in place that is the fairest, least confusing and easiest to understand for customers. This prevents customers getting confused, which results in lots of customer support queries, and worst, disputes and chargebacks (think chargeback fees in addition to the refunded amount!) which can be expensive and unproductive for us.