Build1 distinct publisher3 min readUpdated
A dev.to post prices never-expire CloudWatch retention, missing S3 lifecycle rules and inherited RDS Multi-AZ, and gives the CLI query that finds each one in your account.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A post published on dev.to takes three config drifts that normally get filed as correctness problems and prices them instead: CloudWatch log groups with no retention, S3 buckets with no lifecycle policy, and RDS Multi-AZ carried into environments that never asked for it [1][10][20]. The argument is that none of these ever pages anyone, so they arrive as unlabeled growth on the invoice rather than as an incident [25].
Start with logs. The default retention for a CloudWatch log group is never expire, and storage bills at $0.03 per GB-month on top of the $0.50 per GB already paid at ingestion [1][2]. The post's worked example: a service writing 5 GB a day holds about 3.6 TB after two years, roughly $110 a month in storage, growing about $4.50 a month [3]. That growth rate compounds to about $54 a month more one year later, near $164 a month in year three [2]. A typical account accumulates around forty log groups [4]. The finder is one query for groups where retentionInDays is null [5], and the fix is put-retention-policy at 30 to 90 days, with existing data past the new window ageing out by itself [6][7]. Watch the sibling drift the post flags: debug logging left on after an incident inflates ingest, and ingest cannot be cleaned up retroactively [8]. At $0.50 per GB, one gigabyte of ingest costs what sixteen months of storing it does [5].
One number in that section does not reconcile. The post says compliance logs belong in S3 rather than CloudWatch "at 6x the storage price" [6], but its own S3 Standard figure is $0.023 per GB-month, making CloudWatch about 1.3 times Standard [1]. The direction is right; the multiple only works against a colder tier.
S3 is the cleaner case. Standard is $0.023, Infrequent Access $0.0125, Glacier Instant Retrieval $0.004, Deep Archive $0.00099 [9]. A bucket with no lifecycle policy keeps everything hot forever [10]; the post prices 10 TB of aging logs at $230 a month in Standard against about $10 in Deep Archive, a $2,600 annual gap per bucket [11], which checks out at $2,640 on the monthly figures [3]. The fine print is where this goes wrong in practice: transitions bill per 1,000 objects, so millions of tiny files can cost more to move than they save [12]; minimum durations are 30 days in IA, 90 in the Glacier tiers, 180 in Deep Archive [13]; and deep-tier retrieval costs time and money, which is acceptable for backups and audit logs and wrong for anything an application reads [14]. Intelligent-Tiering at $0.0025 per 1,000 objects monitored covers genuinely unknown access patterns, and fails the same way, forgotten on buckets full of small objects [15]. The audit is a loop over get-bucket-lifecycle-configuration, treating every "no lifecycle configuration" error on a log or backup bucket as drift [16].
RDS Multi-AZ doubles instance and storage cost exactly, which makes it drift in both directions [17]. Single-AZ production is risk drift, one AZ event from an outage worth more than a decade of standby [18], found with a MultiAZ==false query against your production identifiers [19]. Non-production Multi-AZ is cost drift, usually a cloned prod Terraform module [20]: a db.m5.large at about $125 a month becomes $250, and four of them in dev is $6,000 a year of high availability for test data [21][4]. Same family: 35-day backup retention on throwaway databases, snapshot schedules with no deletion policy [22].
What to watch is whether any of it stays fixed. The post's own conclusion is that the source of drift is provisioning behaviour, not inventory: new log groups still default to never expire, new buckets still ship without lifecycle rules, and the next cloned module carries prod settings into dev again [24]. The usable test it offers is ownership. Any environment where you cannot name who chose the availability setting is running on a default [23].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The default retention for a CloudWatch log group is never expire, not 90 days or a year.
CloudWatch Logs storage costs $0.03 per GB-month, on top of $0.50 per GB paid at ingestion.
A service logging 5 GB a day into a no-retention log group holds about 3.6 TB after two years: roughly $110 a month in storage, growing about $4.50 more every month.
Offending log groups can be found with: aws logs describe-log-groups --query 'logGroups[?retentionInDays==null].[logGroupName, storedBytes]' --output table
Retention is set with aws logs put-retention-policy --log-group-name <name> --retention-in-days 90; 30 to 90 days covers most operational needs, and compliance logs belong in S3 with lifecycle rules rather than CloudWatch at 6x the storage price.
Existing log data past a newly set retention window ages out on its own.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-published source, internally consistent but uncorroborated
One dev.to community post is the entire evidence base. Its strength is verifiability of form: the AWS CLI queries are specific and runnable, and every dollar example reproduces from the rates the post states (3,650 GB at $0.03 gives about $110; 10,000 GB at $0.023 versus $0.00099 gives $230 versus about $10; four standbys at $125 a month gives $6,000 a year). Its weakness is sourcing: no AWS pricing page, region, or effective date is cited for any rate, no fleet data supports the prevalence claims, and one internal comparison (CloudWatch at 6x S3 storage) contradicts the post's own numbers. Judgment claims such as the single-AZ outage costing more than a decade of standby are unevidenced.
No adoption signal in supplied sources
The cluster contains no release, deployment, benchmark, incident, usage disclosure, or pricing-change event. The post describes long-standing AWS service defaults and recommends practices; it reports no organisation that ran the audit, no measured savings realised, and no tool adoption. Nothing in the supplied material supports an adoption measurement, and none may be inferred.
Mildly overstated at the edges, restrained at the core
The core framing is conservative for the genre: the post prices small, bounded examples, explicitly lists the cases where lifecycle rules backfire, and concedes that fixing current inventory does not hold. That pulls the gap close to zero. It is pushed positive by three things: a wrong 6x multiple that inflates the CloudWatch-versus-S3 contrast, an unsupported 'forty log groups per typical account' multiplier used to turn one group's cost into a line item, and a risk claim about a decade of standby cost that no supplied evidence bears. No adoption evidence exists to offset any of it.
No product or vendor stake visible in the text
Observable from the source only: the post sells nothing. It names no commercial tooling, no affiliate offer, and no employer, and every recommended remediation uses first-party AWS CLI commands and native features. The residual incentive is the community-platform one visible in its construction, a keyword-shaped title and an appended FAQ block that reads as written for search surfaces, which rewards breadth and confident numbers over citation. No disclosure or funding information is supplied, so nothing further can be assessed.
Moderate on mechanics, low on magnitudes
Confidence is asymmetric. The mechanics are highly likely to hold and are cheap for a reader to verify in minutes: default never-expire retention, the doubling behaviour of Multi-AZ, and the three CLI queries. The magnitudes are single-sourced, undated, region-unspecified list prices with one demonstrable internal error, and the prevalence claims have no data behind them. With no second publisher and no adoption evidence, the overall assessment sits just below the midpoint.
build
The 40% S3 lifecycle saving is real on one line of the bill and nowhere else1 distinct publisher
build
The middle tier for Postgres: own kernel, no public IP, and you own the backups1 distinct publisher
build
Send kills, not scores: the leaderboard fix that turns anti-cheat into a schema decision1 distinct publisher
build
Put a threshold and a price next to every "idle" resource, or stop calling it idle1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 21, 2026