-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Software Engineering at Google #212
Comments
SEAG Chapter 2: How to Work Well on Teams This chapter is largely a short version of Debugging Teams by the
This is similar to advice in Peopleware.
|
SEaG chapter 3: Knowledge Sharing The problem of "all-or-nothing expertise" (page 44)
They reference The five keys to a successful Google team
a Google-internal version of a Stack Overflow-like website g3doc is pretty neat. Described more in: The Knowledge: Towards a Culture of Engineering Documentation https://codelabs.developers.google.com/ This stuff on readability is interesting, since the Google meaning of
|
https://www.dougengelbart.org/content/view/115/000/ "Bootstrapping Organizations Into the 21st Century" is largely about knowledge sharing |
SEaG chapter 4: Engineering for Equity In discussing "technology to scan, capture, and identify people
I asked for more info: https://twitter.com/planarrowspace/status/1317130678643941379
|
SEaG chapter 5: How to Lead a Team
Both of these (and the Tech Lead Manager, when one person does both
Google Takeout is a public-facing tool
This seems... incomplete.
On page 95, the emphasis on asking questions (rather than giving |
Chapter 6: Leading at Scale
They reference BRAC (Basic Rest-Activity Cycle)... I'm not sure |
Chapter 7: Measuring Engineering ProductivityThe "Triage: Is It Even Worth Measuring?" section starting page 125 On page 127 they imagine "there's a major funding deadline On page 129 they start talking about Goals/Signals/Metrics (GSM). They Page 129 also references Dijkstra's
|
Chapter 8: Style Guides and Rules
I didn't know Google used the term "code janitor"... I found at least Page 149 mentions Starlark, which I don't think I'd heard of
I used to like the NumPy comment guidelines, but these days I prefer I hadn't realized that Google had their own Python autoformatter, as |
Chapter 9: Code Review
GitLab does this, but only for single-line changes, as far as I
|
Chapter 10: Documentation
And they focus a lot on staleness etc. being connected to ownership.
|
Chapter 11: Testing Overview
Benefits:
The Google Testing Blog includes their "testing on the toilet"
pH: Project Health |
Chapter 12: Unit testing
That is, test the result, not how it's achieved.
"given, when, then" or "arrange, act, assert"
DAMP (Descriptive and Meaningful Phrases) rather than pure DRY (Don't
|
Chapter 13: Test doublesThe tl;dr on page 280 is a pretty good summary:
They talk about dependency injection, which I think is generally a I hadn't known about "automated dependency injection frameworks" - Are there any for Python? At least one: I'm not sure I want to use it... It seems mostly for very The book also says:
I mean, I guess so, but I don't love that style either. I agree more with this:
Techniques for using test doubles:
But: Prefer real implementations ("classical testing")
aka "change-detector tests" The tl;dr on page 280 is a pretty good summary:
|
Chapter 14: Larger testing
On page 286 they mention "C/J Build" as Google's "first continuous On page 289, I think they may have their math wrong. They say two 10% They advocate "record/replay proxies" as a testing technique, rather
They refer on page 299 to bug bashes. Google has Catzilla, which is analogous to Chaos Monkey.
Google has published about Dapper, which I think is a fancy system This chapter had the most glitches (typos, a paragraph that appeared |
Chapter 15: Deprecation
I thought 20% time was supposed to be more fun than that. There isn't an obvious deprecation system in Python, as far as I know. |
Chapter 16: Version control and branch managementThe chapter is by Titus Winters, and he refers to what Google does as I was reminded of the bad old days at a previous employer, where for A commit is like an instantaneous lock/edit/unlock.
Hard to not want to nit-pick the focus on time (cf. Time, Clocks, and
Google's main version control system, for the giant monorepo, is
Seems like Java "shading" is (a little bit) like Python's dunderscore On page 343 they reference The Phoenix Project: A Novel About IT,
I like not having to be connected all the time.
Agree. They really advocate "for interrepository dependencies to be |
Chapter 17: Code searchThe old "external Code Search" is described on Wikipedia. Hmm! There is some public Google code search, not mentioned in the Hmm! Google's Ah! I thought so! Yegge was behind Grok, which became/merged with One page 353 they advocate "using named types rather than generic On page 354 they mention "how to compute a fingerprint for integer On page 357 there's a screenshot of a log viewer that seems to be They have a surprising reference for the "responsive if latencies The code for the old internal Google code search is up, and also The reference to searching 20GB/s is now searching 1.5TB/s! Had to go Wayback, but there's also a bunch on substring matching. Summarizing Google's code search history:
They describe moving the inverted index from memory to flash storage, On page 369 they mention "low recall accuracy" and go on to say that |
Chapter 18: Build systems and build philosophyDid they seriously just have a whole chapter on build systems and not There's some disconnect between their "engineers love the build
They point out that the artifact-based input/output structure of Bazel They mention C++ can include other files and that this is an issue for They mention "the 1:1:1 rule" on page 391 but don't really explain it.
So that's 1 directory, 1 target, 1 package.
A thought I had in connection with all this monorepo stuff is: Is this The advice (page 396) to mirror external dependencies so you don't |
Chapter 19: Critique: Google's code review toolOn page 400 they reference Google's "web-based code editing tool". On
Nice to have in a pinch; could allow abuse but still. They mention on page 403 that their diff does move detection, which I saw somebody online who likes Critique and they said Apparently Critique does screenshot diffs of UIs generated by code,
This "Zapfhahn" test coverage tool seemed to be mentioned (page 406) I like this behavior of Critique:
On page 414 they say "each commit is reviewed separately" but I think |
Chapter 20: Static analysisGoogle's static analysis system: Tricorder
This is different from most usages of "scaling" that I've seen. "We Also on page 423, they make it sound like analysis is always
On page 421 they mention Refaster, which has been eaten by
I hadn't thought of this before! How crazy: My plug-in has plug-ins!
Some humans do work at Google!
|
Chapter 21: Dependency managementC++ has a one definition rule.
Russ Cox stuff:
On page 439 they mention Boost as a library with "no compatibility promise" that is "particularly risky"—which makes me wonder whether this is why Google has its own linalg packages, including (at least) gemmlowp. "SAT" as in "SAT-solver" is an unsatisfying name because it is not
I was interested in the example of open-sourcing gflags, which It does kind of seem like a lot of Google's pain with regard to
The author advocates for using testing to resolve empirically whether |
Chapter 22: Large-scale changes
The author's paper: Non-Atomic Refactoring and Software Sustainability
Rosie is "An internal tool for doing large scale cleanups and code
|
Chapter 23: Continuous IntegrationTAP (Test Automation Platform) playing a key role again here...
They reference The Evolution of Automation at Google (oh right! The SRE book is online!) There's this idea of "green head" as the point just behind head in the Borg: The Predecessor to Kubernetes Rapid (the release automation tool) is in the SRE book too. They mention on page 485 that tests to run can be "selected based on a On pages 494-495, she mentions a "Build Cop" role as the person who
Benefits of things being slow. |
Chapter 24: Continuous Delivery
This seems to be traceable really to a military quote from
|
Chapter 25: Compute as a ServiceLarge-scale cluster management at Google with Borg On page 519 they mention Prometheus and Grafana somewhat
On page 522 they mention LMCTFY, which I think I wasn't aware of.
Fast key-value stores: An idea whose time has come and gone
On page 536 they mention OpenWhisk and Knative. Looks like
Interesting to see a mention of Zimki, the short-lived PaaS... Afterward
|
closed by b8ec78e |
SEAG Chapter 1: What is Software Engineering?
JohnK notes: "I don’t even think clever in programming should be a compliment most times. Elegance deserves a compliment, though."
I haven't thought about it much before, but if consensus isn't
unanimity, it's hard to define.
Also, page 24 adds "assumption."
Discussion page 22 of whether to use an existing thing, fork it to
modify it, or build your own...
The text was updated successfully, but these errors were encountered: