惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
博客园_首页
Vercel News
Vercel News
WordPress大学
WordPress大学
美团技术团队
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 【当耐特】
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
腾讯CDC
M
MIT News - Artificial intelligence
爱范儿
爱范儿
Recent Announcements
Recent Announcements
雷峰网
雷峰网
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
Jina AI
Jina AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
P
Privacy & Cybersecurity Law Blog
Recorded Future
Recorded Future
Help Net Security
Help Net Security
N
News and Events Feed by Topic
博客园 - Franky
P
Proofpoint News Feed
L
LINUX DO - 热门话题
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
D
Docker
Google DeepMind News
Google DeepMind News
有赞技术团队
有赞技术团队
IT之家
IT之家
Security Latest
Security Latest
L
LangChain Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks

Sophie Alpert

There are no lossless transformations of natural-language text I don’t want AI agents controlling my laptop Materialized views are obviously useful TODOs aren’t for doing Everyone is wrong about that Slack flowchart Hire me to empower and upskill your eng team How React Changed the Web Forever: A Documentary Fast and maintainable patterns for fetching from a database React Conf: “Building a Custom React Renderer” Why review code? Metrics by proxy Yak shaving and fixing Voice React Conf: “React Today and Tomorrow” Why we host conference talk dry runs React Podcast: Inside React Type errors with inference need stacks Observable programming React 16: an API-compatible rewrite Hi, I’m trans. Initializing on the main thread using dispatch_once A near-perfect oninput shim for IE 8 and 9 Using React to speed up the Khan Academy question editor What I did at Khan Academy, 2012 edition Preventing XSS attacks when embedding JSON in HTML Rolling back to an old revision in Mercurial (like git reset)
Deconstructing “services”
Sophie Alpert · 2025-12-16 · via Sophie Alpert

I think when people talk about breaking things into “services”, it’s often a conflation of three different concepts:

  • Hard interface boundaries (code organization)
  • Independent code release cadences
  • Isolation of compute resources

The first is typically what’s most important for keeping a large codebase maintainable; having clean interfaces helps make code easier to reason about and easier to change parts of. Services can be nice because it’s a lot harder to stick to a hard rule of “no, you really must not import my private method” if there’s a network boundary in the way — but if you are reasonably disciplined with a strong linting strategy then you can achieve this goal no matter how your code is deployed.

Having a single deploy cadence is often convenient in a monolith-ish codebase, but if you want to decouple the deploy timings, services aren’t the only answer: you can also make internal packages with strong interfaces and deploy more quickly or less quickly than changes to their callers’ code, even if they end up in a single binary.

Finally, separation of compute. I’ve even seen several cases where the same exact code is deployed to multiple services that receive different traffic patterns. This can be nice to avoid one noisy neighbor hogging resources from other work, to provide stronger failure isolation, for different hardware requirements, to be thoughtful about data locality (e.g., it can be helpful to colocate a cache with code that uses it), to have more control over server lifetimes, and probably more that I’m not thinking of right now. But this alone doesn’t solve the other two at all! And of course there are costs — sometimes large ones — to turning function calls into network calls.

I find it helpful to be specific about which (or which combination) of these goals is the desired result when discussing splitting things out, to be precise about what we’re solving for at any given time. The details often matter and it’s easier to talk about them if we’re specific about what benefit we’re trying to get.