A bit of background before I jump in. I have been working with AWS in some capacity since around 2016, which means I have watched it grow from "the place where you rent servers" to "the place where you rent literally everything." My first AWS experience was spinning up an EC2 instance to host a Node.js app for a side project. I remember staring at the console thinking, "there is no way I need to understand all of this just to deploy a website." Eight years later, I understand maybe 40% of what is on that console. And I have an AWS certification.
That is kind of the AWS story in a nutshell. It is the most powerful cloud platform on the planet. It is also the most confusing. And the gap between those two things is where most of the interesting discussion lives.
Some Numbers to Set the Stage
AWS launched in 2006 with S3 (storage) and EC2 (virtual servers). Today it offers over 200 fully featured services across compute, storage, databases, machine learning, networking, IoT, security, analytics, developer tools, and a bunch of categories I am probably forgetting. It operates in 33 geographic regions with over 105 availability zones worldwide. It holds roughly 31% of the global cloud infrastructure market -- ahead of Azure at 24% and Google Cloud at about 11%. Netflix runs on it. Airbnb runs on it. NASA uses it. The CIA uses it. When AWS has an outage, a noticeable chunk of the internet goes down. That is not an exaggeration.
The reason I bring up all these numbers is that scale matters when you are choosing a cloud provider. You are not just choosing where to put your servers. You are choosing an ecosystem that will shape how your team thinks about infrastructure, what tools you use, who you can hire, and how easy (or hard) it will be to leave someday. That last part -- the leaving part -- is something people do not think about enough until it is too late.
The Services That Actually Matter to Most People
Look, I could walk through all 200+ services but neither of us has that kind of time. Let me focus on the ones that 90% of AWS users actually interact with, because honestly, most of the catalog is niche stuff that only matters if you are building something very specific.
EC2 is the workhorse. Virtual servers in the cloud. You pick an instance type (there are dozens -- general purpose, compute optimized, memory optimized, GPU instances, instances with AWS's own Graviton chips that deliver roughly 40% better price-performance than comparable x86 options), launch it, and you have a server. It takes about 90 seconds. The flexibility is wild -- you can run anything from a tiny t4g.nano for testing to a massive x2idn.metal with 1TB of RAM for in-memory databases. The variety can be paralyzing though. I once spent an afternoon trying to figure out the difference between M5, M5a, M5n, M5zn, M6i, M6g, and M7g instances. (The answer involves processor generation, networking capability, and chip architecture. It is not as complicated as it looks once you understand the naming convention, but the first encounter is rough.)
Lambda is the serverless compute option and honestly one of my favorite AWS services. You write a function (Node.js, Python, Java, Go, .NET, Ruby), upload it, and Lambda runs it when triggered. You pay per invocation and per millisecond of compute time. No servers to manage. No instances to size. No patching. It scales from zero to thousands of concurrent executions automatically. For event-driven workloads -- processing uploaded files, handling API requests, running scheduled tasks -- Lambda is magic. I use it for a webhook processor that handles maybe 500 requests a day and it costs me about 12 cents a month. Not $12. Twelve cents.
S3 is object storage and it is honestly kind of boring at this point but in the best way. You put files in, you get files out. It has 99.999999999% durability (that is eleven nines), which means if you stored 10 million objects you would statistically lose one every 10,000 years. You can set up lifecycle rules to automatically move old data to cheaper storage tiers (Glacier, Glacier Deep Archive) to save money. S3 is one of those services that just works and you forget about it until your bill shows you have been storing 2TB of old log files you forgot to delete. (I have done this.)
RDS handles managed relational databases -- MySQL, PostgreSQL, MariaDB, Oracle, SQL Server. You get automated backups, patching, failover, and read replicas. Aurora, their MySQL/PostgreSQL-compatible offering, is genuinely impressive for performance-sensitive workloads. DynamoDB is their NoSQL option and it is absurdly fast -- single-digit millisecond response times at any scale. The pricing model for DynamoDB is confusing though (provisioned capacity vs. on-demand, read/write units, secondary indexes all cost money), and I have seen teams accidentally run up big bills because they did not understand the capacity model. Worth learning before you commit.
The rest of the services I use regularly: CloudFront (CDN with 450+ edge locations), Route 53 (DNS), SQS (message queues), SNS (notifications), CloudWatch (monitoring), and IAM (access management). IAM deserves special mention because it is simultaneously the most important and most confusing service on the platform. Getting permissions right is an ongoing battle. Too restrictive and your team cannot work. Too permissive and you are a security incident waiting to happen. I have a love-hate relationship with IAM policies.
The AI and ML Stuff
AWS has been pouring investment into machine learning services. SageMaker is the flagship -- it handles the full lifecycle of building, training, and deploying ML models. For teams with data scientists and ML engineers, it is powerful. For everyone else, it is complex and expensive. The pre-trained AI services are more accessible: Rekognition (image analysis), Comprehend (text analysis), Textract (document extraction), Polly (text-to-speech), Transcribe (speech-to-text). These are API calls -- you send data, you get results. Simple enough.
The big recent addition is Amazon Bedrock, which gives you access to foundation models from Anthropic, Meta, Stability AI, and others through a unified API. If you are building generative AI features into your product and you do not want to manage your own GPU infrastructure, Bedrock is a pretty compelling option. It handles the model hosting and scaling for you. I gotta say, the pace of AI service additions on AWS has been impressive even if the naming conventions remain baffling. (Why is it called "Bedrock"? I have no idea. It is a theme with AWS naming.)
Let's Talk About Money
I am not going to put the pricing in a table because AWS pricing does not fit in tables. It fits in spreadsheets with 47 tabs. (Sound familiar, Airtable users?) Here is the deal.
AWS uses pay-as-you-go pricing. You use compute, you pay for compute. You store data, you pay for storage. You transfer data out of AWS, you pay for transfer. Every service has its own pricing dimensions and most have multiple pricing models layered on top. EC2 alone has four: On-Demand (pay by the hour or second, no commitment), Reserved Instances (commit to 1 or 3 years, save up to 72%), Savings Plans (commit to a certain dollar amount per hour of usage, save up to 66%), and Spot Instances (bid on spare capacity, save up to 90% but your instance can get yanked with 2 minutes notice).
The free tier is genuinely useful for learning and small projects. You get 750 hours of t2.micro EC2 per month, 5GB of S3, 25GB of DynamoDB, 1 million Lambda requests, and a bunch of other stuff -- all free for 12 months. After that, you pay. The problem is that the free tier has limits that are easy to accidentally exceed. I have heard countless stories of people leaving an EC2 instance running after their free tier expired and getting a surprise bill. AWS has gotten better about this -- they added billing alerts and spend caps for some services -- but the risk is real for beginners who do not set up monitoring.
For production workloads, most teams end up using a mix. Reserved or Savings Plans for your baseline capacity (the stuff that runs 24/7), On-Demand for variable workloads that spike and dip, and Spot for fault-tolerant batch processing like CI/CD builds or data processing jobs where it is okay if an instance gets reclaimed. The optimization game is constant, and AWS provides tools for it -- Cost Explorer, AWS Budgets, the Pricing Calculator -- but you have to actually use them. I have seen teams spending 40% more than they need to simply because nobody looked at Cost Explorer for six months.
Data transfer costs are the hidden gotcha. Moving data INTO AWS is free. Moving data OUT costs money. The first 10GB per month is free, then it is $0.09 per GB going down to $0.05 per GB at high volumes. If your application serves a lot of data to users (video streaming, file downloads, large API responses), egress costs can become a meaningful line item. CloudFront can help reduce this, but it is one of those costs that sneaks up on you.
The Console Experience
I am going to be blunt here. The AWS Management Console is not great. It works. It is functional. But compared to the cleaner interfaces of Google Cloud Console or even Azure Portal, it feels cluttered and a bit dated. There are too many services crammed into the navigation. Search helps, but discovering new services through the console is an exercise in information overload. The individual service consoles vary wildly in quality -- the Lambda console is clean and modern, the IAM console is dense but functional, and some of the older services look like they were built in 2012 and never updated.
Most experienced AWS users end up using the CLI or infrastructure-as-code tools (CloudFormation, CDK, Terraform) more than the console anyway. The console is for checking things, not for building things. But for newcomers, it is the first thing you see, and first impressions matter. AWS could do a lot better here.
Versus the Competition
Azure is the main competitor and the comparison is pretty straightforward. If your company is a Microsoft shop -- Active Directory, Office 365, .NET, SQL Server -- Azure integrates with all of that naturally. If you are language-agnostic or leaning toward open-source tooling, AWS has a broader service catalog and a larger community. Azure has caught up significantly in service breadth, but AWS still has more mature offerings in most categories. The documentation and community support for AWS is also deeper, simply because it has been around longer.
Google Cloud is interesting. Smaller market share, but genuinely excellent at specific things. BigQuery is the best data warehouse product available, period. Their Kubernetes offering (GKE) is widely considered the best managed Kubernetes service, which makes sense since Google created Kubernetes. Their networking is arguably faster than AWS's. And Vertex AI for machine learning is strong. But the service catalog is narrower, the enterprise sales motion is less mature, and the community is smaller. If you are building data-heavy or ML-heavy workloads, GCP deserves a hard look. For everything else, AWS is the safer bet.
DigitalOcean, Linode (now Akamai), Vultr -- these smaller providers are honestly better for a lot of use cases that people shoehorn into AWS. If you need a few servers, a managed database, and some object storage, these platforms give you that with simpler pricing, a cleaner interface, and a fraction of the complexity. I use DigitalOcean for personal projects and small client work. It takes me five minutes to set up what would take 30 on AWS. But the moment you need something like Lambda, SageMaker, Bedrock, DynamoDB at scale, or any of the 150+ services that these providers do not offer, AWS is the only game in town (well, AWS or Azure or GCP).
Who Should Actually Use AWS
Enterprises that need the broadest service catalog, the most compliance certifications (SOC 1/2/3, PCI DSS, HIPAA, FedRAMP, GDPR, ISO 27001), and the global infrastructure to serve users on every continent. Startups that expect to scale significantly -- especially those eligible for AWS Activate credits, which can give you up to $100,000 in free credits to get started. DevOps and platform teams that want depth of tooling for CI/CD, container orchestration, and infrastructure as code. ML teams that need SageMaker or Bedrock. Organizations with hybrid cloud requirements that need AWS Outposts or Local Zones.
AWS is NOT the right choice for a solo developer who just wants to deploy a Next.js app (use Vercel). It is not for a small team that needs a database and a server and does not want to think about networking (use DigitalOcean or Railway). And it is not for teams that already run everything on Microsoft and want their cloud to feel like an extension of that ecosystem (use Azure). The question you should ask is: "Will I use more than five AWS services?" If the answer is no, you probably do not need AWS.
What Works
- Nothing else comes close to 200+ services covering every possible use case
- Global infrastructure with 33 regions and 105+ availability zones
- Battle-tested reliability -- the platform Netflix and NASA trust
- Serverless ecosystem (Lambda, API Gateway, Step Functions, DynamoDB) is mature and excellent
- Innovation pace is unreal -- hundreds of new features every year at re:Invent
- Security and compliance certifications cover basically every regulatory framework
- Graviton processors offer genuinely better price-performance than x86
What Does Not
- The learning curve is genuinely steep even for experienced developers
- Pricing requires a PhD in billing archaeology to understand
- The management console feels cluttered and outdated
- Vendor lock-in is real if you use proprietary services like DynamoDB or Step Functions
- Basic support is useless -- you need paid support ($29/mo minimum) for actual help
- Documentation is extensive but hard to navigate and full of jargon
The Rating
4.5 / 5
AWS is the most powerful cloud platform on the planet. Full stop. If you need a service, AWS probably has it. If you need global reach, AWS has more regions than anyone. If you need reliability, AWS has the track record. If you need security certifications, AWS has all of them. The serverless ecosystem is best-in-class. The compute options are unmatched. The database offerings are the broadest in the industry. And the innovation pace shows no signs of slowing down.
But that power comes at a cost, and I do not just mean the literal dollars (though those add up too). The complexity is real. The learning curve is real. The risk of running up an unexpected bill because you forgot about some resource in us-east-1 is real. The console needs a redesign. The documentation needs a human touch. And the fact that meaningful technical support starts at $29 per month (and really you want the Business tier at $100+ per month for production workloads) is frustrating when you are already spending thousands on infrastructure.
4.5 out of 5 because nothing else is this capable, but the 0.5 point deduction is earned by the complexity tax you pay to access that capability. If AWS could make the first-time experience 50% less overwhelming, it would be a near-perfect platform. As it stands, it is the right choice for teams that can invest the time to learn it properly, and the wrong choice for teams that just want things to work without reading 47 pages of documentation first.
Anyway, I have to go check my Cost Explorer. I think I left a NAT Gateway running in ap-southeast-2 and those things are like $30 a month for doing nothing. Classic AWS.
Comments (3)