TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: Resources on how Google/Facebook etc. approach software design?

148 点作者 tinktank将近 6 年前
A friend once told me Google starts software design by designing data structures. I'm looking for information on how FAANG companies approach software design, are there any resources out there?

15 条评论

notacoward将近 6 年前
The design process at Facebook is, to put it charitably, a bit minimal. "Move fast" is taken to mean start writing code immediately, then iterate on that to approach the desired outcome. Developers are rewarded for landing code in production each review period, even if that code provides little benefit, will need to be rewritten, and might even be buggy. In the rush, careful design and testing (which might delay landing in production and result in a bad review) get pretty short shrift. Some might say that there's risk or waste either way, and that velocity rules all. I'm not going to say they're wrong, but it makes "software design at Facebook" a bit of an oxymoron.
评论 #20041016 未加载
评论 #20048163 未加载
Communitivity将近 6 年前
There are a number of blog posts by people such as Tim Bray, Steve Yegge, and others - as well as internal engineering blogs (at least there is one at Facebook and several at Google). I read these on a regular basis (Yegge&#x27;s hasn&#x27;t been updated in a while), but only to take away ideas and learn about new technologies.<p>Their approach is almost certainly not the right approach for you, because you are not Google ( <a href="https:&#x2F;&#x2F;blog.bradfieldcs.com&#x2F;you-are-not-google-84912cf44afb" rel="nofollow">https:&#x2F;&#x2F;blog.bradfieldcs.com&#x2F;you-are-not-google-84912cf44afb</a> ). That said, if you are looking for a position at these places, then the blogs might help you, in a number of ways. If you want to work there though, focus on the sound engineering techniques applicable anywhere (maps, hashing, trees, graphs, algorithms) and build a reputation through Open Source contributions to the projects the companies are involved with.<p>* Tim Bray &#x2F; Amazon &#x2F; <a href="https:&#x2F;&#x2F;www.tbray.org&#x2F;ongoing&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.tbray.org&#x2F;ongoing&#x2F;</a><p>* Steve Yegge &#x2F; Ex-Googler &#x2F; <a href="https:&#x2F;&#x2F;steve-yegge.blogspot.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;steve-yegge.blogspot.com&#x2F;</a> and <a href="https:&#x2F;&#x2F;medium.com&#x2F;@steve.yegge" rel="nofollow">https:&#x2F;&#x2F;medium.com&#x2F;@steve.yegge</a><p>* Facebook Engineering Blog &#x2F; <a href="https:&#x2F;&#x2F;code.fb.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;code.fb.com&#x2F;</a><p>* Google Developers Blog &#x2F; <a href="https:&#x2F;&#x2F;developers.googleblog.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;developers.googleblog.com&#x2F;</a>
SwSwinger将近 6 年前
A group of early ex-Facebook engineers&#x2F;directors have recently collaborated with Software Engineering Daily to produce a podcast series about the engineering philosophy behind the core product. I think these talks are a little more raw and direct than you would find from official corporate talking points. <a href="https:&#x2F;&#x2F;softwareengineeringdaily.com&#x2F;category&#x2F;all-episodes&#x2F;" rel="nofollow">https:&#x2F;&#x2F;softwareengineeringdaily.com&#x2F;category&#x2F;all-episodes&#x2F;</a>
评论 #20048576 未加载
评论 #20048883 未加载
ex_amazon_fc将近 6 年前
Ex Amazon here. Amazon has some solid principles that often go against popular belief.<p>- No waterfall-ish process where design is handed down from architects to senior engineers to juniors. The same people do design, implementation, ops and so on.<p>- Measure everything and always. People are encouraged to define metrics and goals and create dashboards before writing code<p>- Simplify: decreasing complexity is taken more seriously than in other companies. Do not use a database when you can use a file, or a message passing library when you can use a socket, or 200 lines of code when you can for out to &quot;grep | sort&quot;. This can be surprising to new hires.
评论 #20050116 未加载
brian_spiering将近 6 年前
John Ousterhout&#x27;s &quot;A Philosophy of Software Design&quot; is a good book on the subject. He has worked with Google.
评论 #20063126 未加载
munchbunny将近 6 年前
Are you looking for wisdom to apply to your day to day work? In that case, keep in mind that Facebook&#x2F;Google practices are tailored for Facebook&#x2F;Google problems, so their practices might not fit your situation.
LawnboyMax将近 6 年前
Really good overview: <a href="https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1702.01715" rel="nofollow">https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1702.01715</a>
repolfx将近 6 年前
I used to be at Google, years ago. I don&#x27;t know if any of this is still relevant.<p>The design process at Google started with a design document. There was a template that I think was available online a long time ago but (ironically) I can no longer find it. The template was relatively lightweight and had some headings like so: Introduction, Goals, Non-goals, Overview, Detailed design, Security, Privacy, Testing. Compared to other design doc templates I&#x27;ve seen it wasn&#x27;t heavy on software engineering theory. Of course the bulk of the writing would be in the &quot;detailed design&quot; section and subsections.<p>Good design docs were very detailed. One I wrote ended up being, I think, about 40 pages by the end when printed out, and that was not an especially large or unusual document. Design docs for critical systems could be larger still, or more frequently, split into many other docs. The quality of writing was generally high and they were maintained in version control. There was a mailing list where design docs were posted for company-wide review, though by the time I was there, this process had degraded quite a bit and a lot of stuff was done in team-specific design docs in Google Docs, with relatively minimal or no peer review. I felt that it was common for the less &quot;serious&quot; teams to do this, e.g. teams working on the latest chat product or on Google Apps itself. Those docs tended to be shorter, only partly filled out, or non-existent. The closer to the metal, older-school stuff was all hand-written HTML.<p>Good design docs would be kept up to date as the design evolved, although I&#x27;d say that was the minority. Most designs were the work of a small number of people or just one person. There were not many design review meetings that I recall, though probably that varied a lot by team.<p>Diagrams were minimal, possibly because there weren&#x27;t any good diagramming tools available internally (well, there was graphviz and TeX).<p>Data structures would often be designed up front as long as they were either protocol buffers (i.e. inter-server comms or long term data storage), or fundamental to what the system did as with BigTable, indexing, index serving, ad serving etc. Systems where the data structures weren&#x27;t fundamental to the design didn&#x27;t necessarily plan out every structure in advance of course, by no means. For many products the user interface or network protocols were more important, so that&#x27;s where the design docs would dwell.<p>The most senior engineers were very familiar with the performance costs of things, e.g. the cost of an L2 cache miss vs a disk seek, and that deeply informed the design of many systems.<p>That&#x27;s about it.
pm将近 6 年前
Data structures are the basis of what you start off with for any program. The key is to understand the domain you want to model. It&#x27;s hardly unique to FAANG.
评论 #20049127 未加载
maxxxxx将近 6 年前
My theory is that they have more people who understand and respect software design in higher management levels compared to other companies. So it’s easier to do good work without constant pressure from the “business” people to take shortcuts.
评论 #20048854 未加载
fma将近 6 年前
I was thinking about this the other day, because I&#x27;m kicking off a new project. How do big companies start their code base. Do they have 1 person write a platform and everyone builds on top..and then iterate. Or several people contribute to the platform. The example in java being, someone needs to layout some skeleton package structure (a hello world controller, DAO)...?<p>My previous projects were me coming onto an existing project, or were small enough that I had 50% of the code done before the next person helped out :)
评论 #20048847 未加载
评论 #20054933 未加载
dunkelheit将近 6 年前
Take any information (blog posts, articles) that comes from the company itself with a grain of salt because it is essentially marketing and so will downplay the downsides of their approach and paint a rosier picture of the process than what really happens there.
jision将近 6 年前
I am not sure how facebook and google or any of the big companies measure the design practices to be better what we do at pickmysolar is we try out few design patterns for poc and check it flexibilty then decide on the framework or the design
purpleidea将近 6 年前
I didn&#x27;t know that they spent much time on good design :&#x2F;
评论 #20049330 未加载
D3m0lish将近 6 年前
wow there are places like that for real?<p>i&#x27;d say it comes down the maturity of individual engineer or group how they&#x27;d approach a problem. some problems are worth spending time most aren&#x27;t and every problem is not at global scale trust me.