When you start a service, you will not know when and how users are going to use your product. However, there is a cost for running a service. I thought I could get better number for my budget and financial model by following usage pattern. It will also help with scalability planning.
Why usage pattern? I want to eliminate under utilization of the resources first. It is an easy savings.
I know how many users I was targeting over a period. I worked out how many of them are going to use desktop, smartphone and tablet. (It is based on target demographic including socio-economic status, GTM strategy, and the product).
I started with a generic usage pattern - Desktop, smartphone and tablets have usage pattern throughout the day.
• Although tablets are a relatively newer device category than PCs or smartphones, their usage pattern is similar to that of PCs.
• There are two peak usage periods for PCs. The first is between the hours of 9:00 am to 5:00 pm and the next peak (slightly higher than the previous one) is between the hours of 7:00 pm to 10:00 pm.
• For smartphones, peak usage is more spread out between the hours of 12:00 pm to 8:00 pm. Smartphones are the preferred device during on-the-move or commuter travel hours.
• As the smartphone peak ebbs, the peak usage period for tablets begins, from 8:00 pm to 1:00 am. [Source 1]
If you are using hosting platform like Heroku where you pay by hour, you can fine tune the resources based on the above pattern. It will save you a considerable amount of money.
Web servers, workers and cron can be adjusted based on when the product get used during the day. Instead of having, say 10 dynos, running all the time, you could deploy 10 during the peak time and then scale it down when the usage is low.
In addition, usage pattern differs by day of the week as well. Desktop usage is low during weekends where as mobile and smartphone picks up during the weekend. This could also be used to scale the services - reduce the web servers down from Thursday and increase it on Monday where the desktop usage peaks.
I have already calibrated my application to collect data around usage, etc. It will be interesting to see how the adaptation holds up against the aggregated data.
Other key unpredictable variable is user adaption rate. I can make an educated guess and prepare for a worse spike. If it goes beyond that, it is a very good problem to have.
Update: If your application is used worldwide, I think there is little in the way of predictability; it will be always morning or afternoon peak somewhere.