Jeff Johnson (My apps, PayPal.Me, Mastodon)

Feedback Assistant Boycott

Amazon Web Services dark patterns

June 25 2024

In April, a StopTheMadness Pro customer contacted me about an incompatibility with the Amazon Web Services Management Console. I had never used AWS before, but I noticed that it has a free tier, so I decided to sign up in order to debug the incompatibility. The first AWS dark pattern is that the free tier still requires payment information, e.g., a credit card number. Normally I wouldn't agree to this for a free service, but Amazon the corporation already has my credit card number, so I figured (wrongly) that there was no further harm in providing it to Amazon Web Services. For better or worse, though, an AWS account appears to be entirely separate from an Amazon consumer account.

Like everything involved with AWS, the free tier itself is very confusing. It has many product categories, some of which are "Free Trials", some "12 months free" (isn't that a trial?), and some "Always free". In my case, however, it didn't really matter, because I wasn't planning to use it for 1 month, much less 12 months. On April 17, I signed up for AWS. The initial email said:

Welcome to Amazon Web Services. Thank you for creating an Amazon Web Services (AWS) account. For the next 12 months, you'll have free access to all AWS services within the limits of the Free Tier.

Fortunately, I was able to reproduce my customer's issue (metrics weren't appearing in the management console), which I fixed in my source code the next day, April 18. Mission accomplished, I then stopped using AWS. The fix was released in StopTheMadness Pro version 6.0 on April 28. All's well that ends well, right?

A few days later, on May 2, I received an email from AWS:

Greetings from Amazon Web Services,

This e-mail confirms that your latest billing statement, for the account ending in ********, is available on the AWS web site. Your account will be charged the following:

Total: $103.26

Whaaaaaaaaaaaaaat…

I used the so-called "free" tier of AWS for one day and got charged over a hundred dollars?!?!? How is that even possible?

I immediately contacted AWS support, and after some back and forth, this is what they told me:

In this case the charges were caused for Amazon Relational Database Service for Aurora PostgreSQL, as you can see in our public documentation, Aurora PostgreSQL is not included in our RDS free tier policies.

RDS Free tier only inlcudes: Amazon RDS Single-AZ db.t2.micro, db.t3.micro, and db.t4g.micro Instances usage running MySQL, MariaDB, PostgreSQL databases. Take into consideration that, "PostgreSQL" and "Aurora PostgreSQL" are not the same.

I'm aware of PostgreSQL of course, but I had never heard of Aurora PostgreSQL. What is Aurora PostgreSQL? According to the AWS documentation:

Amazon Aurora PostgreSQL is a fully managed, PostgreSQL–compatible, and ACID–compliant relational database engine that combines the speed, reliability, and manageability of Amazon Aurora with the simplicity and cost-effectiveness of open-source databases. Aurora PostgreSQL is a drop-in replacement for PostgreSQL and makes it simple and cost-effective to set up, operate, and scale your new and existing PostgreSQL deployments, thus freeing you to focus on your business and applications. To learn more about Aurora in general, see What is Amazon Aurora?.

I have to disagree vehemently with "cost-effective", but what is Amazon Aurora?

Amazon Aurora (Aurora) is a fully managed relational database engine that's compatible with MySQL and PostgreSQL. You already know how MySQL and PostgreSQL combine the speed and reliability of high-end commercial databases with the simplicity and cost-effectiveness of open-source databases. The code, tools, and applications you use today with your existing MySQL and PostgreSQL databases can be used with Aurora. With some workloads, Aurora can deliver up to five times the throughput of MySQL and up to three times the throughput of PostgreSQL without requiring changes to most of your existing applications.

Aurora is part of the managed database service Amazon Relational Database Service (Amazon RDS).

Ok, I see. (Not really.) As far as I can tell, the confusingly named Aurora PostgreSQL is not actually PostgreSQL but rather an Amazon-specific database designed with one overriding goal: to be infinitely more expensive than PostgreSQL, which is free. In any case, the AWS Free Tier details give the impression to unsuspecting new users that PostgreSQL is free, without making an explicit distinction between true PostgreSQL and Amazon's faux PostgreSQL.

AWS Free Tier details

The worst part is that when you enable Aurora PostgreSQL on the free tier, which I apparently did without knowing exactly what Aurora meant, Amazon does not warn you that you're about to be charged an obscene amount of money. And I didn't even use the database, as far as I know. I certainly didn't add any data to the database. I was just turning on some features in order to reproduce my customer's issue with the AWS dashboard.

A so-called "free" tier that becomes paid with no warning is a very dark pattern.

The good news is that my AWS support inquiry eventually resulted in a refund:

I'm happy to inform you that, as one-time exception, we’ve approved a billing adjustment of $102.04 USD for charges on your April bill which has been applied as a refund to your credit card and $14.15 USD on your May bill, which has been applied as a credit to your account, both bills for the RDS service.

The eagle-eyed reader may have noticed that my April bill was $103.26, whereas the April refund was only $102.04, a difference of $1.22. It turns out that Amazon refunded me only for the Relational Database Service charge, but there was also a $1.22 charge for CloudWatch that was not refunded.

Amazon CloudWatch is a service that monitors applications, responds to performance changes, optimizes resource use, and provides insights into operational health.

Again, when I enabled CloudWatch on the free tier, there was no warning that I would be charged money for it.

I could have argued with AWS support again to get a refund for CloudWatch, but it didn't seem worth the effort. I got charged $1.22 for CloudWatch in April and $0.17 in May, which is a price I'm willing to pay to learn a valuable lesson here. Hopefully I won't get charged any more, since I disabled both Aurora PostgreSQL and CloudWatch after receiving the bill and have now closed my AWS account.

Since this is the internet, no doubt some anonymous social media commenters will engage in typical victim blaming, smugly suggesting that everything is my fault for not reading the documentation. I would suggest, however, that these commenters have never read the AWS documentation either. Here it is, have at it! I'll give you a quiz afterward. The AWS documentation is, in a word, massive, just as AWS itself is massive. I would also suggest that there's something very wrong with an internet service if you have to wade through the fine print of the service's massive documentation just to discover that you can suddenly and silently incur a cost of hundreds of dollars per month for a feature on a specific tier advertised by the service as free. That's a dark pattern, and while you're assigning blame to me, calling me a fool, I would ask how much blame you would assign to Amazon for creating the dark pattern and encouraging AWS users to make fools of themselves?

Feedback Assistant Boycott

Jeff Johnson (My apps, PayPal.Me, Mastodon)