7 November

You charge too little for server management

min. read

Reading Time: 6 minutes

Have you wondered how much you should charge for server management for your clients?

This is not a trivial question and will usually come down to your own effort vs the cost of the service you are provided and the value provided.

Putty with echo of Hello Server Management
Putty with echo of Hello Server Management

The initial cost of the infrastructure

Based on your needs, let’s calculate the initial cost of infrastructure in 2023. But first, let’s ask ourselves some questions to precisely discover what you should ballpark them for.

  • Does your system need redundancy?
  • What is the target CCU (Concurrent Users) that will use the application simultaneously?
  • Does the system need to be future-proof?
  • Are CCU spikes expected eg: from viral posts going live?
  • Does your server need to be up-to-date?
  • Is your application a simple REST API/webpage, or a high WebSocket connectivity type?
  • Does your client already have an infrastructure to work with?

Does your system need redundancy?

If you are thinking about it for longer than a second, the answer is probably YES! Physical hardware is very unlikely to fail, and any service provider like AWS, Google or IBM, etc will schedule maintenance to notify you ahead of time that your service will go down. But during this maintenance, your service will be unavailable. If this will be your peak time, the more serious the consequences.

Hosting 3 or more machines is required to keep the continuity, if possible choose 3 different physical locations. If you are targeting Europe, you can easily choose Frankfurt, Ireland, and Warsaw as your base. And all of those locations having maintenance at the same time is unlikely.

So to sum it up. You probably need redundancy, so we can assign the cost of 3x to our infrastructure cost.

But my client already has a provider he is working with.

If that’s the case, your redundancy cannot be guaranteed, and even if so, then usually it’s not one of your dashboard-type providers that can guarantee that everything can be done through some Web UI.

Imagine that you need some additional ports open for all the servers on UDP protocol, this might be harder than you think. First contacted the client, then he contact his provider, and then they change something that was not anticipated because of the “deaf phone” chain that occurred, something now doesn’t work.

If that’s the case charge him extra, this will usually even them up with a big provider. Sound increase in price should be around 15% if the hosting provider is chosen by the client and you do not have access to its resources, or this is not the provider you like.

Does the system need to be future-proof?

Sometimes clients want to pay as little as possible, and you can agree on some numbers (always validate numbers first even if this will cost you time and money) but even if not. Can you agree that you want to support 100 CCU or 10x that? It’s important to assess the cost. They probably have analytics for that, if not offer them to do preliminary testing for the initial traffic.

Future-proofing a system can mean a lot of things. Do you want to rent a VPS, or Bare Metal server? Or maybe you want to make sure that you will not run out of TCP sockets, and a proper load-balancer with queueing would be a necessity that would add costs.

What is your target CCU?

As mentioned before, CCU is an important number to factor in. Here are some numbers to allow you to predict what machine you would need for different types of applications.

We will see a single machine that processes the requests. And although they do not scene linearly and infinitely you can safely estimate per core or per GB of memory a required balance, start from there, and expand as needed.

We will take a look at:

  • Client-side rendered site – like React.JS – an average payload of 4MB
  • Server-side rendered site – like Next.JS that sends pure HTML – an average payload of 2.5MB
  • Simple “Customers” API that needs to write/read data from the database
  • And a WebSocket application that handles 30 updates per second with some data.

And from the hardware side, we will look at CPU, Memory, and Networking requirements.

All numbers presented are in CCU per unit. Like 1 Core, or 1 GB of memory, or 1 GB of network bandwidth. Assuming that one user takes 1 second to process.

CSRSSRAPIWebSockets
CPU5004001000100
Memory (GB)37502500800500
Network (GB)60080050005000
requests per unit of resources to asses needs for server infrastructure.

So let’s decipher this table with 2 examples of server management that would be needed.

Example 1: CSR.

I will have around 100 000 MAU (monthly active users) and every one of them will visit my client-side rendered site at least 2 times a day and will browse 20 pages during that time. We assume even distribution between 10:00 and 22:00 which means all traffic will come within 12 hours.

The capacity of those servers will be greater, but they will take longer to process the requests. Those are capped at 1 second per request to generate a response.

100 000 MAU * 20 pages * 2x day = 4 000 000 page views daily. That averages out at around 100 requests per SECOND with flat distribution, but will probably peak at 6 pm, with around 5000 requests per second.

In order to handle that kind of load at the flat rate we would not need anything special. Assuming we are using 3x redundancy, that means we might get away with simple 1 vCPU, 1GB of RAM with a 1GB network. And it would all work! But…

For the peak thought, we might need to brace ourselves. A single system handling this kind of load will choke, and if not crashing will just take a very long time to respond. For 5000 requests a second I would recommend, 8 vCPU, 16GB of ram, and 10GB networking on each of our 3 instances.

Unfortunately, we need to choose between 4 vCPU and 8vCPU. We need to select the higher one. Let’s see the example below.

1x server3x server
8 vCPU4 00012 000
16GB Memory60 000180 000
10 GB Network6 00018 000
Example load that might be able to handle with the system
1x server3x server
4 vCPU2 0006 000
8GB Memory30 00090 000
10 GB Network6 00018 000
Example load that might be able to handle with the system half the system

As you can see, the weaker system might be just bearly strong enough to handle the load. But if costs are of any concert long term, always do proper load testing. I like to use k6, but it’s up to you what is your favorite tool for that job.

Example 2: WebSockets

Let’s now assume that we would need to handle complex application that connects with the clients with WebSockets. Those applications have a greater strain on the system, as they usually require constant CPU time to handle incoming requests.

Also, this application will have a Database, in-memory cache, and a frontend SSR application.

I will assume a 1000 CCU peak, as this is something that we agreed with the client.

For this type of load, I would go probably overboard, especially if we are talking about an enterprise client. Even though we can probably handle this load just bearly with a single 8 vCore machine I would go for 8 vCore with triple redundancy and set the load balancer for sticky sessions.

Does your server need to be up-to-date?

If you need to perform a manual update of the OS or the software, (and you will probably will). You should charge the client an initial fee to set up the cron job and make sure it’s properly tested and secured.

As for how much you should charge for it, it depends if you ever did this kind of job. For a skilled network administrator, this is work for 1 day, but it might take a recurring test once a month or two, to make sure that it works.

How much does that cost in dollars?

Let’s calculate real deployment costs in USD, and make a compelling argument on how you can sell that price.

Because in both examples in this article I have used VPS with 8 vCores I would go with that for pricing. I will go with the price per server using Linode pricing without network traffic but will include that in the cost estimation.

Linode pricing form https://www.linode.com/pricing/
Linode pricing form https://www.linode.com/pricing/
PRICINGInitialPer MonthFirst Year
3x 8 CPUs dedicated machines1 day of work$360 for machines~$5 000
PaaS Loadbalancerfew hours$10 for service~$250
Network egressN/A$300 for network~$300
Installation & Maintenance5 days of workfew hours of work~$6 000
TOTAL~$14 850
Calculation of the cost of server management

Let’s split it up cost by cost.

Per-month pricing for PaaS load balancer and dedicated CPU machines is obvious and straightforward, you just cannot save on that. Next is the initial setup.

It just never goes smoothly so 1 day is an optimistic estimation, sometimes 2-3 days should be also manageable.

Next Installation and maintenance. This assumes a few things. First, the corn job I mentioned is to update the servers and their OS as well as other packages. Next, we have Installation in regards to SSL and its maintenance. Even though in today’s day and age we can use providers like let’s encrypt, this sometimes needs some updates as any software. Lastly, we have a few hours each month to make sure everything works after each update.

Summary

As you can see if you want to manage a server for clients, you should probably calculate its cost using a somewhat simple (maybe too simple) formula to ballpark the cost for a year.

Cost of the servers x2 – with a minimum value of around 6 grand for most of the simple setups.


Author

Tomasz Juszczak

CTO /

Technical Lead

Tomasz Juszczak

About prog

Founded in 2016 in Warsaw, Poland. Prographers mission is to help the world put the sofware to work in new ways, through the delivery of custom tailored 3D and web applications to match the needs of the customers.


Let's talk

SEND THE EMAIL