An ex-Googler's guide to dev tools (2020)
sourcegraph.com
sourcegraph.com
There's been a ton of evolution in dev tools in the past 3 years with some old workhorses retiring (RIP Phabricator) and new ones (like Graphite, which is awesome) emerging... and of course AI-AI-AI. LLMs have created some great new tools for the developer inner loop—that's probably the most glaring omission here. If I were to include that category today, it would mention tools like ChatGPT, GH Copilot, Cursor, and our own Sourcegraph Cody (https://cody.dev). I'm told that Google has internal AI dev tools now that generate more code than humans.
Excited to see what changes the next 3 years bring—the pace of innovation is only accelerating!
Given that code is not an asset but a heavy liability the elephant in the room is the question: Who is going to maintain all that huge piles of generated code?
Wake me up when there's an AI that can safely delete code… That would be a really disrupting achievement!
Big tech already has depandabot-like bots doing this: dead code removal, refactoring and other things a linter can warn you about all get turned into automated pull requests (or PR comments). These are things a linter would tell you - if you had the patience to wait several hours to lint a gigantic monorepo; there probably will be more tooling support based on LLM trained on the huge code bases.
Like said: Wake me up when when you can show me metrics where the use of AI shrunk code-bases by significant large amounts. For example going from 500 kLOC to 100 kLOC, or something like that. (Of course without loosing functionality; and at the same time making the code-base easier to understand). That would be success.
Everything that goes in the opposite direction is imho just leading inevitably to doom.
wondering how good it is? any googler using it can compare it to copilot?
I don't have access to copilot so I can't compare but I'd wager it works a lot better for Google internally because the training data is customized to Google.
*Surely* at your place of work, the cleaning staff is familiar with the CTO's dearest tools and vice versa?
Snarky replies comparing CTO to cleaning staff don’t even begin to apply.
You're the downvoter here so why does my comment bother _you_ so much?
Please don't do this blindly. Your new organisation likely won't be similar to Google. If a xoogler would onboard with this attitude that any other tooling and process must be inferior, they wouldn't last long.
Bazel is a perfect example. Bazel projects are horrifically (arguably impossibly) hard to use to collaborate with other Bazel projects outside of your control, and its abilities encourage you to do (useful!) things that don't hold up outside its little isolated world. It's a super great system in a lot of ways, but it is anathema to open source development.
At times it feels like it's probably extremely destructive in aggregate, particularly as more and more companies blindly mimic it, and that worries me.
That's also the conflict between external libs/frameworks vs. NIH. Yeah, sure. Sometimes NIH is a matter of arrogance, but it's also a fact that something you build yourself can work far better in your environment and with your constraints than something you took in and then banged on until you have a reasonable fit.
The corollary is of course that open-sourcing such a thing is often rather useless at first, especially if the company that does it (and Google imho is one of the worst offenders here) doesn't really put in the work to make it useful for a wider audience. Which is partially a function of the companies' devs being more used to working with very fitting tools. With those tools which are useful enough you often see a period of adjustment then. A few releases which don't bring much in the direction of new features, but "only" things you need to make it work in more environments.
To your last sentence: I think that in general it's a bad idea to blindly use or emulate what some (especially big) company did. Just because it works well in their use cases, doesn't mean it will work well for others. It's cargo cult programming, which is unfortunately rather popular in our hype driven industry ("New fancy library by x, we have to use this too or we will be done for in six month!")
OP didn't talk at all about intentions. OP talked about results.
> ...but with every tool you suffer from a conflict of goals:
Sure. But it seems to me that OP notices that Google's really, really bad at choosing the "Make it so that people who aren't working in a megacorp who can afford teams of dedicated tool wranglers can easily use the tool and interoperate with others who use the tool." option when presented with it.
And like, why would they ever choose that? They have zero need to, because they are a megacorp who can (and do) hire teams of dedicated tool wranglers.
I mean, very few people use Bazel so you're likely to have to implement Bazel support for any projects you use, but that's no different to other build systems (e.g. until it became a de facto standard I frequently had to implement CMake support for third party C++ libraries I used).
Having been at facebook prior led me to believe that we can definitely 2x productivity if tools made by these large organizations are open sourced and maintained.
I will probably write my thoughts like the author (if anyone cares), but the bottom line is I consistently find many existing open source projects missing critically useful features and/or don’t focus as much on real developer productivity (I admit that can be very subjective).
Eg Bazle is fantastic when it works (all deps are accounted for) but it is not unusual to find github comments that tell users to add patches because the maintainers (core and contrib) haven’t fixed the problems (some over 2-3 years old) or because they hardcode a version of Go….
Another example is VS Code. facebook (now meta) offered everyone to its heavily extended VS Code. While I didn’t use that as much since I am a terminal and a Vim developer, now that I use VS Code almost daily at work for writing Go, I really do appreciate the customization facebook engineers did - because too often someone (both engineers and non-engineers) would come to us and complain about some issues with the built-in git UI, trying to figure out how to construct a working workspace settings, switching between git and arcanist. The facebook’s version had all this figured out really nicely. With minimal training someone could submit code very quickly without ever touching the terminal.
I can go on and talk about how awesome ods is compared to prometheus and its query UI. Finally, I miss Scuba too (and Honeycomb founders were involved building Scuba).
Sure, facebook tools don’t always work and there are issues and bugs like any software, but overall I felt more productive.
Maybe it is because I did’t maintain them - now I do as a full time engineer at work, I feel the pains. But then again, if google and facebook maintain these as open source would be really nice.
How would you rate VS Code for Go? I use the official Go extension but am not impressed. My main gripe is that I often have to manually add a local import that should have been found and suggested when I typed the name of a variable or function exported from an adjacent package. I much prefer Goland, but use VS Code because it is the only editor my company's internal AI code assistant supports.
IMO: gopls is only just barely good enough to stop people from building an actually good replacement. Highlighting and build error stuff is reliable, but it regularly misses extremely straightforward type lookups, navigation, and autocomplete hints and that makes it untrustworthy in pretty much all cases. Basically everyone I know who uses it (somewhere between 50 and 100 people that I've talked with about this) relies on plain text search to get around and find things rather than doing type-driven stuff, because otherwise they fail to discover a lot.
All of which means it's insane and awful to me, barely better than "it doesn't support Go but Go looks close enough to C that it mostly works"-style ctags. And sometimes worse: even unsupported-language-fallback stuff in random tools sometimes gives much better autocomplete than gopls, which for me semi-routinely fails to hint things defined in the same file.
---
GoLand by comparison is wildly more capable, stable, and controllable. It actually works, and e.g. if you "find usages" you get a complete and precise result. Highly recommended if you do a lot of Go work. The single exception is that it doesn't support GOPACKAGESDRIVER (because it isn't gopls), so if e.g. you've got a complicated/abnormal Bazel setup it won't integrate well.
But Python? I hate the testing setup. We have a mono repo, while not as big as meta’s, full discovery eats cpu. So we had to tweak our settings, per team, to only discover team specific dirs. Also, there is no way to kill a running test (at least no obvious shortcut or button-wtf)
Google didn't copy Microsoft, and Netflix didn't copy Amazon, and Apple and Microsoft and Yahoo do their own thing also. Every big tech company claims its culture and tooling is the best and yet they mysteriously share none of it.
And in any case, your company isn't Google. And it doesn't succeed or fail based on using this or that tooling.
Identify your own pain points and solve those instead. Maybe you need a code search tool and buy it from the author, maybe you don't.
But tooling is a sad joke. Hell, we can’t even paste a git diff into a Teams chat because the crappy RTF box mangles the output. And Microsoft literally owns GitHub. But we go home early, the stock is up, everyone is Mormon-level nice to each other. Hard to complain.
But I left Google early this year to work at a startup. I can tell you that the confidence I have with Google's tooling, testing infra, presubmits etc. are miles ahead of the confidence I have with our current pre-commits. But at Google we had millions of daily-actives and at the startup we have dozens, so if something breaks it's not too bad.
Post from 2022: https://news.ycombinator.com/item?id=32134038
An ex-Googler's guide to dev tools (2020) - https://news.ycombinator.com/item?id=32134038 - July 2022 (139 comments)
An ex-Googler’s guide to dev tools - https://news.ycombinator.com/item?id=25217291 - Nov 2020 (211 comments)
My experience with zabbix was just the opposite, BTW. Ugly, but practical. The defaults let you quickly set up monitoring, and then nagstamon or other alerting allows you to forget it exists until bad things happen. Then you browse trough the templated graphs where a spartan but interesting indicator of what happens will exist somewhere
In fact, I truly hope no one has a screen with Grafana in their office. I agree: if anyone has those - you are probably not doing it right.
The only thing it cant do is handle large amount of logs
I believe it's called Ohome and is an ancient tool still used in Windows/office org
That being said most of them were overkill for startup or small teams. Found it kind of funny even though the tools are "open source" all the name's are different the documentation is non-existent.
Some of the open source stuff is just better anyway.
Note I said "less critical." Some of the important ones were really excellent, e.g. Dremel.
CodeApprove was built to make GitHub PRs a lot more appealing to those who miss the Critique workflow (among others audiences).
Github < Critique < Azure DevOps (or actually, I think it's called Azure Repos)*
*might have changed because I was at MSFT until mid 2021, but development and review used to look sort of like this: https://www.youtube.com/watch?v=dGCid5W-HK0. I just felt the UX was really clean and clear, plus it immediately tied into the walled garden of tools like private package repos, CI, and Azure deployments.
For reading code, I tend to use `highlight -O xterm256 "$1"|less -R` or `source-highlight -f esc -o STDOUT -i "$1"|less -R` in a shell function.
How does code navigation work in such a setup?
You are not Google and neither is your startup.