Skip to content

Commit 112dcf8

Browse files
committed
Update styling in List and Tables for service-decommissioning-scream-test-shutdown article
1 parent f0ad9db commit 112dcf8

2 files changed

Lines changed: 99 additions & 58 deletions

File tree

  • src/content/articles/service-decommissioning-scream-test-shutdown

‎src/content/articles/service-decommissioning-scream-test-shutdown/index.mdx‎

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ tags: ["system-modernization","aws","kubernetes"]
99
featured: true
1010
---
1111

12-
Creating a new service has bounded risk — it either works or it doesn't. Deleting one has unbounded risk — you won't know what breaks until it breaks. This asymmetry explains why every organization accumulates zombie services that nobody's sure about. They __might__ be dead. They receive occasional traffic that could be health checks or could be production workloads. The owning team dissolved in a reorg, but surely someone took over.
12+
Creating a new service has bounded risk — it either works or it doesn't. Deleting one has unbounded risk — you won't know what breaks until it breaks. This asymmetry explains why every organization accumulates zombie services that nobody's sure about. They _might_ be dead. They receive occasional traffic that could be health checks or could be production workloads. The owning team dissolved in a reorg, but surely someone took over.
1313

14-
The default is always "leave it running" because turning something off requires courage and knowledge that leaving it alone doesn't. And everyone remembers the one time someone deleted a "dead" service that turned out to power a VP's quarterly dashboard. The scream test is how you get that knowledge: degrade a service in controlled phases, wait for someone to scream, and by the time you flip the switch you've already discovered every consumer that matters.
14+
The default is always "leave it running" because turning something off requires courage and knowledge that leaving it alone doesn't. <Highlighter>And everyone remembers the one time someone deleted a "dead" service that turned out to power a VP's quarterly dashboard. The scream test is how you get that knowledge</Highlighter>: degrade a service in controlled phases, wait for someone to scream, and by the time you flip the switch you've already discovered every consumer that matters.
1515

1616
## The Scream Test
1717

1818
A well-designed scream test has four phases, each lasting about a week. The goal is progressive degradation that surfaces dependencies without causing lasting damage.
1919

2020
<List
21-
variant="check-icons-list"
21+
variant="numbered-with-background-list"
22+
classes={{
23+
wrapper: "sm:ml-6 sm:mr-12 mb-6",
24+
}}
2225
items={[
2326
{
2427
lead: 'Phase 1: Soft degradation.',
@@ -64,7 +67,7 @@ Your access logs and service mesh telemetry already contain the information you
6467
For each caller, classify the traffic pattern. This tells you what kind of dependency you're dealing with:
6568

6669
<Table
67-
variant="vertical-column-delineation-table"
70+
variant="numbered-review-table"
6871
content={{
6972
thead: {
7073
th: ['Pattern', 'Characteristics', 'Implication'],
@@ -97,9 +100,9 @@ Skip callers with fewer than one request per day — those are usually health ch
97100

98101
### Distributed Tracing for Hidden Dependencies
99102

100-
If you have distributed tracing (Jaeger, Zipkin, or AWS X-Ray), you can discover dependencies you'd never find through traffic analysis alone. Traces show you __who calls you__ (upstream) and __who you call__ (downstream).
103+
If you have distributed tracing (Jaeger, Zipkin, or AWS X-Ray), you can discover dependencies you'd never find through traffic analysis alone. Traces show you _who calls you_ (upstream) and _who you call_ (downstream).
101104

102-
Query any traces that include your service over a 30-day window. Walk the trace tree in both directions. The parent span tells you who initiated the call. This matters because your service might be a transitive dependency — ServiceA calls ServiceB calls your service — and ServiceA's team has no idea they depend on you.
105+
Query any traces that include your service over a 30-day window. Walk the trace tree in both directions. The parent span tells you who initiated the call. This matters because your service might be a transitive dependency — `ServiceA` calls `ServiceB` calls your service — and ServiceA's team has no idea they depend on you.
103106

104107
<Callout type="warning">
105108
Trace sampling can miss low-volume callers. If you sample at 1%, a consumer that calls you 50 times per day might not appear in your trace data at all. Supplement tracing with access logs for complete coverage.
@@ -110,7 +113,10 @@ Trace sampling can miss low-volume callers. If you sample at 1%, a consumer that
110113
With consumers identified and the scream test complete, you're ready for the actual shutdown. A checklist prevents the "oh no, we forgot to revoke the service account credentials" moment three weeks later.
111114

112115
<List
113-
variant="check-icons-list"
116+
variant="timeline-list"
117+
classes={{
118+
wrapper: "sm:ml-6 sm:mr-12 mb-6",
119+
}}
114120
items={[
115121
{
116122
lead: 'Pre-shutdown:',
@@ -138,7 +144,11 @@ Always run shutdown scripts with dry-run mode first. The few minutes this adds i
138144
The checklist exists because every item on it has bitten someone. The most common mistakes I've seen:
139145

140146
<List
141-
variant="check-icons-list"
147+
variant="zebra-list"
148+
classes={{
149+
ul: "!divide-y-0 !border-0 !overflow-visible !rounded-none space-y-4",
150+
li: "!rounded-lg !border border-trim",
151+
}}
142152
items={[
143153
{
144154
lead: 'Forgetting cron jobs.',

0 commit comments

Comments
 (0)