AWS is a lot more Expensive
AWS charges substantially more for its services than GCP does, but most people ignore the real high cost of using AWS, which is; expertise, time, and manpower. With GCP, a relatively inexperienced engineer in platforming tools can pick it up and get his work done in a relatively short time because most of the tedious tasks of piecing all the parts together have been done by Google already.
A task that may take you a day or less to do in GCP, you may spend a week doing the same thing in AWS. One example I can give here is VPC Endpoints. I was working with a terraform cluster installation and I wanted to restrict outbound traffic to the internet. The problem is that if you do this then you are also cutting off traffic to AWS, in order to address this problem you need to set up endpoints. Endpoints essentially allow you to connect to AWS via the AWS intranet as opposed to the internet (Don’t ask me why cloud providers don’t do this by default, it makes no sense to me).
So simple enough, I just add these endpoints, and then my job is done. Problem is that I was working with a cluster provisioner in terraform with a lot of moving parts and using multiple AWS services and you cannot set up an endpoint that applies to all AWS services, you can only do one endpoint per service and I had to do a lot of digging trying to figure out exactly all the services that the provisioner was using and add endpoints for each one of them, every time I added an endpoint, I found out I had to add another endpoint, I ended up adding about five of them and then I found out that a couple of the services that I was using didn’t have endpoints for them, so in the end, I just had to allow outgoing traffic via a NAT. Out of curiosity, I investigated how to do this in Google Cloud because I had never done it before, just to see how difficult it would be in comparison to AWS and I wasn’t surprised to find out that you can accomplish the same thing just by clicking on a checkbox or activating a setting, and it applies to all services. Also, doing this in GCP is free whereas in AWS you have to pay for each endpoint.
The above is just one example, but I have found that generally, any task that I want to do in AWS requires far more energy and effort to do than GCP, meaning you are probably going to need to hire far more engineers and need more time and more money on human resources if you are using AWS than if you are using GCP.
The Cost of Interrupted Flow
Another significant cost to your organization if you decide to use AWS is the continuous interrupted flow. Flow is the state where you ideally want your engineers to be a good portion of their time at your company, not only they will be much happier, but they will also be a lot more productive. The problem with using AWS is that because everything is so confusing and complicated to use you will have to spend a lot of time reading documentation and testing to figure out how things work, and the irritating thing is that it won’t be fun experimentation, it will be tedious and trivial issues that should not exist, like the endpoint issue I described above. Even after you are seasoned in the use of AWS you still spend an inordinate amount of time doing tedious things that you never have to do in GCP. Like inputting your 2FA code every 12 hours, or assuming roles, or just going over pieces and services and putting them together. The more tedious obstacles between you and the task you want to achieve, the harder it is to achieve flow.
Performance
I am not going to do extensive testing in both platforms and post benchmarks for this article since it’s a lot more work than I want to spend on this but I’ll just say that in my experience I felt that performance was almost always better in GCP, for example copying from instances to buckets in GCP is INSANELY fast, I remember being shocked by this because in a previous job I had to do a lot of hourly backups to buckets of large chunks of data in AWS and I always felt the copying was very slow, but this was not the case at all for GCP. One good example I experienced recently is how slow it is to spin clusters up with EKS. In GKE you can have a fully functional cluster in less than 4 minutes. In EKS it takes about 16 minutes to create just the control plane (and even then it’s not ready!!) and then you have to add another 3 minutes or longer to spin the nodes, although sometimes I had to wait much longer than this for the workers. This may not matter that much to some, but when I am creating new infrastructure I tear it down and recreate it a lot to test that everything is working correctly and to save the company money on weekends and evenings so for me this matters a lot. There are some latency tests in this article that clearly show that GCP does better across almost all areas when it comes to Network performance. This article also compares some services between AWS and GCP.
Security
Both AWS and GCP are very secure and you will be okay as long as are not careless in your design. However, GCP for me has an edge in the sense that everything is encrypted by default. For example, their buckets and their logs are encrypted in transit and at rest. For some bizarre reason AWS does not encrypt buckets or logs by default, you have to enable this. Who the hell would NOT want their data encrypted on AWS servers? GCP is also continuously publishing its internal models for security like BeyondCorp and BeyondProd, and designing GCP so it’s easier to integrate them for other companies. These security models are generally way ahead of the curve; for example, BeyondCorp’s model has just been recently adopted by the National Cyber Security Center, and Google has published this six years ago while providing tools to implement it for quite some time. I am not saying that it is impossible to do the same with AWS, but it wasn’t designed with this intent in mind and it is a lot more difficult to implement. AWS on the other hand seems to have opted for supporting more traditional models of security.