5

I believe there is no magic formula to get to a precise number and probably it will depend on a series of different aspects of the application and users.

But here is the thing:

I'm building a software that will allow churches to manage their members, staff and donations. Think of it as a CRM (or anything close to that). Also we have to keep in mind that some churches has 200 members, others 6000 members. Some churches can receive a few dozen donations month, other thousands of donations month.

It will be a SaaS hosted on Azure. Each church will pay a monthly fee for an account and here is where I got stuck. How do I know the costs so I can decide for a final price?

I'd like to know if someone out there can share some data that will help me estimate:

1) The minimum monthly cost to keep this application running (let's say, with a single church).

2) The projected/estimated cost for each church so we can calculate the final prices.

David Makogon
  • 69,407
  • 21
  • 141
  • 189
CodeMaster2008
  • 921
  • 2
  • 13
  • 25

2 Answers2

2

This is a really wide-open question, and you can choose your architecture to optimize for different things (e.g. cost, availability, speed). You'll need to decide whether building a single-tenant or multi-tenant app. The former is maybe simpler and easier to meter on per-customer basis since there's effectively one customer (or church) per deployment; however, that could end up being costly to run, since you'll likely have idle web/worker roles during non-peak hours. A multi-tenant app lets you have better overall compute utilization, but you'll need ways of metering each tenant. Even with a multi-tenant app, you can still go with single-tenant database, if there's a need for it.

You may want to consider a tiered pricing model, based on some unit of operation (or some number of users per church). To help with metering, you can:

  • Look at storage analytics (this gives detailed logging on blobs/tables/queues accessed, including exact resource accessed, at what time).
  • Create custom performance counters and emit these with your Windows Azure diagnostics
  • Look at Windows Azure SQL Consumption (including the dynamic management views)

For baselining cost: Consider a few things:

  • For SLA and general uptime reliability, you need at least 2 instances
  • Always go with smallest instance size you can operate with, and scale out to more instances as load increases
  • Let's assume you're optimizing for cost, so you run all your background/queue processing/scheduling/etc in your web role instances without any worker role instances
  • For this exercise, assume multi-tenant compute, and single-tenant database (Web Edition, average < 100MB per tenant). This leads to $5 monthly per tenant on database.
  • Assume, say, 5 churches. Assume 2 minimum Small instances, and assume it bursts to 4 instances for 12 hours during the day. That's an average run rate of 3 instances, or $260 monthly.
  • Assume some bandwidth charges of, oh, $10 monthly.
  • Assume some storage charges for queues, blobs, diagnostics of say $25 monthly.

With assumptions above (completely made up to give you a strawman to start with):

  • DB: $5 x 5 tenants: $25 monthly.
  • Compute: $260 monthly
  • Bandwidth: $10 monthly
  • Storage: $25 monthly
  • Ballpark total: $300-400 monthly.

Now: This is completely made up, and I have no idea how much data or bandwidth your app is going to store / generate. But hopefully this gives you a rough idea how to start projecting cost. Notice that I did not include storage transactions in estimations. I think that's just going to be background noise.

David Makogon
  • 69,407
  • 21
  • 141
  • 189
1
  1. Run one server(/database/whatever you're measuring).
  2. Generate load until that one server is no longer enough.
  3. Extrapolate.

Since I'm responding with pithy steps, here's another thing to consider. How to determine your price:

  1. Determine your costs.
  2. Determine how much your customers will pay.
  3. Charge something in between.

Note that #1 may turn out to be really irrelevant. Suppose the costs are

user94559
  • 59,196
  • 6
  • 103
  • 103