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

推荐订阅源

Y
Y Combinator Blog
MyScale Blog
MyScale Blog
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
V
V2EX
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
U
Unit 42
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
H
Help Net Security
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

Synthesist in the Shell — A blog by Linghao Zhang

A Taxonomy Is a Theory of What Differences Matter Evolving Memory Systems: An Eval-First Approach Memory Systems Are Evolved, Not Designed Code as Config: The Start of Software Speciation The Bespoke Flywheel The Negative Space of AI Memory My 2025 Games of the Year My 2025 Games of the Year Why You Should Probably Work on AI Engineering AI Assisted System Design Interview Prep Hotel California Hotel California How To Be Great 101 Lessons Learned Building LLM Applications Why is ML Runtime Infra So Hard Naming Matters: DRI vs. Owner in Software Projects Becoming a Staff Engineer Demystifying TLMs Learnings as a Tech Lead Notes: Staff Engineer Self Awareness with Tools Editing Technical Direction Rethinking Pessimism Grow @ Google 03: 文档意识与培养新人 我的时间管理系统 Notes: A Philosophy of Software Design 「程序员」和「软件工程师」是一回事吗? Grow @ Google 02: 「能用就行」还远远不够 Excerpts from Permanent Records David Perell 关于在线写作的建议
Superficial Similarity
2022-06-16 · via Synthesist in the Shell — A blog by Linghao Zhang

I've been working on a migration for about 5 months. Things were going well, until we are now left with two remaining pieces which turn out to be rather challenging. Then everybody involved with the project had the same epiphany: we could have taken a different approach which makes solving the two pieces trivial.

Why didn't we think of that in the first place? Because we didn't write a design document. We executed a very similar migration a year ago and everybody agreed we'd just follow the same path. One colleague actually thought of the alternative approach but dismissed it based on an incorrect assumption which could have been easily verified under 5 minutes. Had we gone through a proper design and review process, we very likely could have avoided not choosing the better approach.

The exact same thing happened during my first project at Google. I was working on yet another migration where somebody else had written the design but didn't capture the most challenging aspect of the project due to its superficial similarity with previously executed migrations. I even wrote a blog post about the danger of being blinded by superficial similarities.

Recently, I've been reading Staff Engineer by Will Larson. In one chapter he gave a few rules of thumb on deciding whether you need a design document or not. One of them is to require a design if the project takes more than one month of engineering time. Did I think the migration I'm working on would take more than one month? Absolutely. Even the previous migration which we all thought to be so similar took more than 6 months. Still, even if I had wanted to follow Will's rule dogmatically, I probably would still make the mistake because I was so blinded by the superficial similarity.

All rules have exceptions. All theories only work within a certain context. However, next time, maybe we'll benefit more from consisently adhering to rules that have stood the test of time instead of convincing ourselves that "this is the time to make an exception".