<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd" -->

---
title: Day 23/30 AWS System Design Patterns | daily.dev
description: A quiz-style walkthrough explains why DynamoDB Auto Scaling still throttles on the first day of a seasonal 15x traffic spike for an e-commerce product catalog...
canonical: https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Day 23/30 AWS System Design Patterns | daily.dev
og:description: A quiz-style walkthrough explains why DynamoDB Auto Scaling still throttles on the first day of a seasonal 15x traffic spike for an e-commerce product catalog...
og:url: https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd
og:image: https://api.daily.dev/og/posts/Ll6evFAhD.png
og:image:alt: Day 23/30 AWS System Design Patterns
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Day 23/30 AWS System Design Patterns

**[Joud Awad](https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh)** · [@joudawad](https://daily.dev/joudawad) · 2 min read · 96 upvotes · 12 comments

## Summary

A quiz-style walkthrough explains why DynamoDB Auto Scaling still throttles on the first day of a seasonal 15x traffic spike for an e-commerce product catalog table. It works through four multiple-choice explanations covering target utilization, CloudWatch's multi-minute reactive alarm cycle, scaling step size, and static overprovisioning, concluding the reactive lag between breach detection and capacity adjustment is the real bottleneck.

## Content

A DynamoDB _(managed NoSQL database, provisioned capacity scales via CloudWatch-driven Auto Scaling — reactive by design)_ table stores product catalog data for an e-commerce platform. The table uses `product_id` as the partition key. There are 12 million products. The table is on provisioned capacity: 5,000 RCUs and 2,000 WCUs.

Traffic is seasonal. During off-peak months, average consumed capacity is 400 RCUs — 8% utilization. During the holiday season (6 weeks per year), traffic spikes 15× and consumed capacity hits 6,000 RCUs — exceeding provisioned limits and causing throttling.

The team enables DynamoDB Auto Scaling _(watches CloudWatch metrics, fires a scaling alarm after sustained breach, then adjusts provisioned capacity — multi-minute reaction time)_ with a target utilization of 70% on both RCU and WCU. During the next holiday season, throttling still occurs on the first day of the spike.

Why?

A) The 70% target is too high — lowering it to 50% triggers scaling earlier during a gradual ramp; but for a sudden 15× spike, the trigger threshold barely matters when traffic jumps from 8% to 120% utilization in minutes — the reaction delay is the bottleneck, not the trigger point

B) Auto Scaling reacts to sustained CloudWatch _(AWS monitoring service, aggregates metrics over 1-minute periods before alarm evaluation)_ metrics — it monitors consumed capacity, fires an alarm after the breach is sustained, and then adjusts; under gradual growth this works fine, but a sudden 15× spike on day one outpaces the multi-minute reaction window

C) The scaling increment is too small — Auto Scaling raises capacity toward the target in steps rather than one 15× jump; but even a scaling action that reached the full target in one move would still fire after CloudWatch observes the breach — the reactive gap, not the step size, is the bottleneck

D) Keep provisioned capacity at 7,500 RCUs year-round so the spike always fits — but that pays peak-season rates through 46 weeks of 8% utilization, and the first holiday season that exceeds 7,500 RCUs throttles against the new static ceiling anyway

Answer in the comments.

#AWS #DynamoDB #SystemDesign #CloudArchitecture #Serverless

## Community discussion

Top comments from developers on daily.dev.

**@joudawad** · 5 upvotes

> The answer is B.
>
> DynamoDB Auto Scaling *(watches CloudWatch metrics, fires a scaling alarm after sustained breach, then adjusts provisioned capacity)* uses Application Auto Scaling with CloudWatch *(AWS monitoring service, aggregates metrics over 1-minute periods)* alarms under the hood. It monitors consumed capacity over a period, compares it to the target utilization, and adjusts provisioned capacity when the threshold is breached. This process has inherent latency: CloudWatch metrics aggregate over 1-minute periods, alarm evaluation takes additional time, and the scaling action itself...

**@joudawad** · 3 upvotes

> Also, it would mean a lot to me if you could support my content and stay in touch 🙏
>
> - YouTube: [https://www.youtube.com/@system-design-lab](https://www.youtube.com/@system-design-lab)
> - LinkedIn: [https://www.linkedin.com/in/joud-awad/](https://www.linkedin.com/in/joud-awad/)
> - Medium Blog: [https://joudwawad.medium.com/](https://joudwawad.medium.com/)
> - Substack: [https://joudawad.substack.com/](https://joudawad.substack.com/)

**@agustinbarrientos** · 2 upvotes

> I'd test the scheduled capacity increase against production-sized load before the holiday traffic window.

**@joudawad** · 1 upvotes

> D — Static over-provisioning does make the throttling disappear — at the price of running 15× capacity through the 46 weeks the table sits at 8% utilization. And it only moves the ceiling: the first season that outgrows 7,500 RCUs throttles again. Scheduled scaling buys the same peak-day safety for six weeks of spend instead of fifty-two.

**@devdavidt** · 1 upvotes

> This is very interesting! Keep going man.

## Similar posts on daily.dev

- [DynamoDB Warm Throughput: Avoid Throttling on a New Table](https://daily.dev/posts/dynamodb-warm-throughput-avoid-throttling-on-a-new-table-qlcaeqxls) · AWS Fundamentals · 5 upvotes · 1 comments
- [DynamoDB crash course: part 3 – design patterns](https://daily.dev/posts/dynamodb-crash-course-part-3-design-patterns-gx7z1mhbm) · Planet Python · 1 upvotes · 0 comments

---

Tags: [#aws](https://daily.dev/tags/aws), [#career](https://daily.dev/tags/career), [#aws-dynamodb](https://daily.dev/tags/aws-dynamodb), [#aws-cloudwatch](https://daily.dev/tags/aws-cloudwatch)

[View this post on daily.dev](https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd","headline":"Day 23/30 AWS System Design Patterns","text":"A quiz-style walkthrough explains why DynamoDB Auto Scaling still throttles on the first day of a seasonal 15x traffic spike for an e-commerce product catalog table. It works through four multiple-choice explanations covering target utilization, CloudWatch's multi-minute reactive alarm cycle, scaling step size, and static overprovisioning, concluding the reactive lag between breach detection and capacity adjustment is the real bottleneck.","url":"https://daily.dev/posts/day-23-30-aws-system-design-patterns-ll6evfahd","datePublished":"2026-08-15T16:30:03.612Z","dateModified":"2026-09-13T21:12:51.453Z","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0","description":"Principal Solution Architecture ","worksFor":{"@type":"Organization","name":"Metalab","logo":"https://www.google.com/s2/favicons?domain=metalab.com&sz=128"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":86100}},"image":"https://media.daily.dev/image/upload/s--8BkbHgsw--/f_auto/v1786811406/posts/Ll6evFAhD?_a=BAMAMicg0","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":96},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":12}],"comment":[{"@type":"Comment","text":"The answer is B.\nDynamoDB Auto Scaling (watches CloudWatch metrics, fires a scaling alarm after sustained breach, then adjusts provisioned capacity) uses Application Auto Scaling with CloudWatch (AWS monitoring service, aggregates metrics over 1-minute periods) alarms under the hood. It monitors consumed capacity over a period, compares it to the target utilization, and adjusts provisioned capacity when the threshold is breached. This process has inherent latency: CloudWatch metrics aggregate over 1-minute periods, alarm evaluation takes additional time, and the scaling action itself takes time to propagate. Under normal traffic growth — gradual ramps over hours — Auto Scaling keeps pace comfortably.\nA sudden 15× spike on the first morning of holiday season is not gradual. Traffic jumps from 400 RCUs to 6,000 RCUs within minutes. Auto Scaling sees the metric breach, fires the alarm, and starts scaling — but the reaction takes several minutes. During that window, provisioned capacity is still at the pre-spike level. Throttling occurs in the gap between the spike and the scaling response.\nThe correct approach for predictable seasonal spikes is scheduled scaling: use Application Auto Scaling scheduled actions to pre-increase provisioned capacity the night before the expected spike. Auto Scaling handles variance within the season. Scheduled scaling handles the known step-change.","datePublished":"2026-08-15T16:30:30.643Z","url":"https://daily.dev/posts/Ll6evFAhD#c-UO3oxdUlF","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":5}},{"@type":"Comment","text":"Also, it would mean a lot to me if you could support my content and stay in touch 🙏\n\nYouTube: https://www.youtube.com/@system-design-lab\nLinkedIn: https://www.linkedin.com/in/joud-awad/\nMedium Blog: https://joudwawad.medium.com/\nSubstack: https://joudawad.substack.com/","datePublished":"2026-08-15T16:30:17.732Z","url":"https://daily.dev/posts/Ll6evFAhD#c-AUame82p2","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3}},{"@type":"Comment","text":"I’d test the scheduled capacity increase against production-sized load before the holiday traffic window.","datePublished":"2026-08-15T22:44:12.101Z","url":"https://daily.dev/posts/Ll6evFAhD#c-D4BSEIlrC","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2}},{"@type":"Comment","text":"D — Static over-provisioning does make the throttling disappear — at the price of running 15× capacity through the 46 weeks the table sits at 8% utilization. And it only moves the ceiling: the first season that outgrows 7,500 RCUs throttles again. Scheduled scaling buys the same peak-day safety for six weeks of spend instead of fifty-two.","datePublished":"2026-08-15T16:30:47.620Z","url":"https://daily.dev/posts/Ll6evFAhD#c-chUihcemp","author":{"@type":"Person","name":"Joud Awad","url":"https://daily.dev/joudawad","image":"https://media.daily.dev/image/upload/s--dOB9RaXY--/f_auto/v1773320801/avatars/avatar_iaC4JsBU0lV8wBsc85fSh?_a=BAMAMiiu0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"This is very interesting! Keep going man.","datePublished":"2026-08-18T07:52:29.646Z","url":"https://daily.dev/posts/Ll6evFAhD#c-bnKUWIXrk","author":{"@type":"Person","name":"DavidDev","url":"https://daily.dev/devdavidt","image":"https://media.daily.dev/image/upload/s--jxmKsIov--/f_auto/v1788950401/avatars/avatar_HK0Qdu9ttIpcoDHx7zrHk?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh","name":"Joud Awad"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Joud Awad","item":"https://daily.dev/sources/iac4jsbu0lv8wbsc85fsh"},{"@type":"ListItem","position":3,"name":"Day 23/30 AWS System Design Patterns"}]}
```

