I'm facing an usability issue that needs your help.

I offer three plans to my customers for a service and of course, they can downgrade/upgrade whenever they want. Since the plans are paid monthly, I store the current price plan in the account table (say 30$) and if the user decide to change to the 50$ plan, I update the "next_plan" column from null to 50$. Every begining of each month, I look in the next_plan that are not null and apply this price, then put the column to null and update the current plan to 50$.

This is the easy part.

Now, of course, when the user changes plans, he also add/remove features. That's the problem I'm facing.

If the user is upgrading to a better version today, he will have to wait the end of this month to be able to enjoy the new feature. This is absolutely NOT great! Frustrating, you name it.

But how can I do then ?

I'd like to avoid charging him the prorata remaining (like 25$-current_plan) if he switch the 15 of this month. I'd like the change to be as smooth as possible.

What are your insights about it? How would you do ?

Thank you for your help.

1 Answer 1


Do you need to depend on calendar months? If so, why do you want to avoid billing the used part of both plans for that month? This is at least fair to the customer and I don’t see why it makes things more complicated. You can combine both amounts in one bill. My phone company does it and it makes a lot of sense to me.

Or otherwise you can step away from calendar months and introduce a policy that spans for example 30 days, 1 week or 3 weeks etc. Then you can start the new plan immediately and start the period at the same time. You still need to charge the bit used on the old plan though.

For a downgrade, the solution is a bit simpler: Just wait for the month/period to end and then downgrade the plan.

  • I agree with the downgrade, it's easier. For upgrading, do you mean to make the customer pay for the 30 + 50 $ plan when he changes (80$ in total) or using prorata (30 for the number of days used + 50 for the number of days that it will be used) ?
    – Cyril N.
    Commented Jun 10, 2015 at 13:04
  • 1
    If someone decides to change from a 30 to 50 plan on the 15th this month (June = 30 days) , the calculation is as follows: $30 / 30d * 15d (first 15 days of June) = $15 for the old plan. Add: $50 / 30d * 15d (remaining 15 days) for the new plan makes $40 to bill the customer at the end of this month.
    – jazZRo
    Commented Jun 10, 2015 at 13:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.