You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1f88135
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: src/content/articles/internal-platform-api-versioning-deprecation-breaking-changes/index.mdx
+16-8Lines changed: 16 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ Last week, a platform team I know shipped what they called a "small cleanup" to
13
13
14
14
Monday morning, 40 CI pipelines failed. Three teams scrambled to update their deployment scripts. A critical security hotfix got blocked because the team couldn't deploy. The platform team spent the entire week doing emergency migrations instead of planned work. And the trust they'd built over the previous year? Gone.
15
15
16
-
This happens constantly with internal APIs. There's a temptation to treat them differently than external ones: "we can just tell people to update," "everyone's in the same building," "we'll coordinate in Slack." But internal APIs deserve __more__ versioning discipline than external ones, not less.
16
+
This happens constantly with internal APIs. There's a temptation to treat them differently than external ones: "we can just tell people to update," "everyone's in the same building," "we'll coordinate in Slack." <Highlighter>But internal APIs deserve _more_ versioning discipline than external ones, not less.</Highlighter>
17
17
18
18
Internal customers are captive customers. They can't switch to a competitor's platform. This makes breaking their workflows worse, not better - they have no recourse except escalating to leadership or building workarounds that create tech debt.
19
19
@@ -26,7 +26,8 @@ __Will existing client code still work?__ That's the question that determines wh
26
26
Some changes are obviously breaking - removing endpoints, changing HTTP methods, adding required fields. These require full deprecation process, no exceptions. Other changes are obviously safe - adding optional fields, new endpoints, loosening validation. The table below draws the line.
27
27
28
28
<Table
29
-
variant="vertical-column-delineation-table"
29
+
variant="criteria-highlight-table"
30
+
fullWidth={false}
30
31
content={{
31
32
figure: "Breaking vs safe changes.",
32
33
thead: {
@@ -102,7 +103,7 @@ Some changes are obviously breaking - removing endpoints, changing HTTP methods,
102
103
The tricky cases fall in between - changes that are technically compatible but break consumer assumptions:
103
104
104
105
<List
105
-
variant="check-icons-list"
106
+
variant="side-by-side-list"
106
107
items={[
107
108
{
108
109
lead: "Error code changes",
@@ -114,7 +115,7 @@ The tricky cases fall in between - changes that are technically compatible but b
114
115
},
115
116
{
116
117
lead: "Semantic changes",
117
-
text: "Making `count` include deleted items when it previously didn't - breaking even though the field name stays the same",
118
+
text: 'Making <span class="font-mono">count</span> include deleted items when it previously didn\'t - breaking even though the field name stays the same',
118
119
},
119
120
]}
120
121
/>
@@ -128,7 +129,10 @@ When you're unsure whether a change breaks existing clients, treat it as breakin
128
129
Once you've identified a breaking change, follow a structured process that gives consumers time to adapt. Skipping steps is how you end up with 40 broken pipelines and a week of emergency migrations.
129
130
130
131
<List
131
-
variant="check-icons-list"
132
+
variant="chevron-list"
133
+
classes={{
134
+
wrapper: "sm:ml-6 sm:mr-12 mb-6",
135
+
}}
132
136
items={[
133
137
{
134
138
lead: "Step 1: Identify affected consumers.",
@@ -158,7 +162,11 @@ Once you've identified a breaking change, follow a structured process that gives
158
162
The key insight is that urgency should escalate as the deadline approaches. Early communication is broad and informational - changelog updates, Slack posts, email announcements. As sunset nears, communication becomes targeted and direct.
159
163
160
164
<Table
161
-
variant="vertical-column-delineation-table"
165
+
variant="grid-and-accent-header-table"
166
+
fullWidth={false}
167
+
classes={{
168
+
tbody: '!text-content',
169
+
}}
162
170
content={{
163
171
figure: "Deprecation communication timeline.",
164
172
thead: {
@@ -228,8 +236,6 @@ A good migration guide answers questions in the order developers ask them. Start
228
236
229
237
Tier your support by consumer need. Most migrations should be self-service with docs and validators. For stuck teams, offer office hours and PR reviews. For critical consumers or complex cases, the platform team writes the migration PRs directly.
230
238
231
-
Automation pays for itself quickly. A codemod that handles 80% of cases automatically and flags the remaining 20% for manual review dramatically reduces the burden on consuming teams. Compatibility adapters that translate v1 requests to v2 internally buy time for slow migrators without extending your maintenance window.
@@ -250,6 +256,8 @@ Automation pays for itself quickly. A codemod that handles 80% of cases automati
250
256
]}
251
257
/>
252
258
259
+
Automation pays for itself quickly. A codemod that handles 80% of cases automatically and flags the remaining 20% for manual review dramatically reduces the burden on consuming teams. Compatibility adapters that translate v1 requests to v2 internally buy time for slow migrators without extending your maintenance window.
260
+
253
261
## The Invisible Success
254
262
255
263
Good API versioning is invisible. Consumers barely notice migrations because they're well-communicated, well-supported, and well-timed. The new version shows up with deprecation warnings months in advance. The migration guide makes the change trivial. By the time sunset arrives, everyone's already moved on.
0 commit comments