3,669 karma · joined May 13, 2009
Ex-Google, ex-Etsy
Writing: https://www.bitlog.com, https://www.clientserver.dev Email: jakevoytko@gmail.com Twitter: @jakevoytko
I'm relying purely on memory, but all of the reasons were super public at the time. The internal Java editor tooling team decided that they weren't investing any more time into Intellij. And then a few months later, the Android team relaunched Android Studio using Intellij with full internal support. The existing Java tooling squad put up some amount of fuss saying that they had already made the decision, and the Android team gave a long and diplomatic response that could be compressed down into, "we don't report to you and we don't care what you think." This coincided with the entirety of Google becoming mobile native, so the mobile team were given free rein to call the shots.
> IMO IntelliJ never worked very well in google3
YMMV, we had some people in Docs/Drive who invested a lot of time into making Intellij usable for everyone, and following their system, it worked way better for us than Eclipse did. All of the "Let me sing you the song of my people ::UI freezes::" memes were very true in my experience.
Here's how a big tech reporting chain sees this situation when everything is smooth sailing: "We're growing 3x year-over-year? After 2 years, the cost will be an order of magnitude higher no matter what solution we pick. The constant factor doesn't matter that much. But we have such an incredible roadmap that we will book more than an order of magnitude of revenue, backed by this new ledger project. The cost will always be a nonissue because of growth."
And then 2 years go by, and this incredible product growth adds a bunch of ledger entries that weren't there 2 years ago, someone nudges your reporting chain with the question, "this is pretty expensive.. what gives?" and then someone with a good combination of social and technical skills points out that a migration to your existing storage solution would be a cost effective way to continue growing.
At every step of the way, everyone is generally happy with what's going on.
Random observations from my first one: - presenting my idea visually helped crystallize my thinking in a way that writing doesn’t. And writing was already very good at crystallizing my thinking. - even making a bad video was a lot of work - making a video presentable is a deep subject. Subtle changes were throwing off my setup. Now I understand why so many influencers are fitness and lifestyle; the demand side is obvious, but when you’re already camera-ready you have a huge advantage on the supply side - described something I built felt natural. I do that for a living. The intro was like 45 seconds and took me like 45 minutes to film because it was acting and I don’t know how to do that - learning about video editing features had an immediate payoff because video is so long
[0] I’m posting the videos at https://m.youtube.com/@bitlog-dev . I said if the first one got to 100 I’d commit to making at least 10, and I just crossed that threshold
Programs didn’t auto save and regularly crashed. It was extremely common to hear someone talk about losing hours of work. Computers regularly blue screened at random. Device drivers weren’t isolated from the kernel so you could easily buy a dongle or something that single-handedly destabilized your system. Viruses regularly brought the white-collar economy to its knees. Computer games that were just starting to come online and be collaborative didn’t do any validation of what the client sent it (this is true sometimes now, but it was the rule back then).
From the starting population of overweight people, only 3% of people dropped down to, and stayed, a healthy weight.
I’ve gotten some success iterating on the one-shot prompt until it’s less work to productionize the newest artifact than to start over, and it does have some learning benefits to iterate like this. I’m not sure if it’s any faster than just focusing on the problem directly though.
It underperformed banning the word "password" from a Google Form.
So that's what they went with.
He used to blog about pretty innocent stuff; his wife making fun of him for wearing pajama pants in public, behind the scenes on drawing comics, funny business interactions he'd had. But then he started getting taken out of context by various online-only publications, and he'd get a burst of traffic and a bunch of hate mail and then it'd go away. And then he'd get quoted out of context again. I'm not sure if it bothered him, but he started adding preambles to his post, like "hey suchandsuch publication, if you want to take this post out of context, jump to this part right here and skip the rest."
I stopped reading around this point. But later when he came out with his "trump is a persuasion god, just like me, and he is playing 4d chess and will be elected president" schtick, it seemed like the natural conclusion of hill climbing controversy. He couldn't be held accountable for the prediction. After all, he's just a comedian with a background in finance, not a politics guy. But it was a hot take on a hot topic that was trying to press buttons.
I'm sure he figured out before most people that being a newspaper cartoonist was a downward-trending gig, and that he'd never fully transition to online. But I'm sad that this was how he decided to make the jump to his next act.
Obviously you need to consider both net worth and cash flow when making a decision like that, but don’t underrate the difference that improved cash flow makes!
What has changed in the past ~15 years? Many libraries and plugins have their own compilers nowadays. This increases the difficulty of successfully integrating with Bazel. Even projects that feel like they should be able to properly integrate Bazel (like Kubernetes) have removed it from the project as a nuisance.
Back when it was first designed, even compiling code within the same language could be a struggle; I remember going through many iterations of DLL hell back when I was a C++ programmer. This was the "it works on my machine" era. Bazel was nice because you could just say "Download this version of this thing, and give me a BUILD file path where I can reference it." Sometimes you needed to write some Starlark, but mostly not.
But now, many projects have grown in scale and complexity and they want to have their own automated passes. Just as C++ libraries needed special library wrappers for autotools within Bazel, now you often need to write multiple library compiler/automation wrappers yourself in any context. And then you'll find that Bazel's assumptions don't match the underlying code's. For example, my work's Go codebase compiles just fine with a standard Go compiler, but gazelle pukes because (IIRC) one of our third-party codegen tools outputs files with multiple packages to the same directory. When Etsy moved its Java codebase to Bazel, they needed to do some heavy refactoring because Bazel identified dependency loops and refused to compile the project, even though it worked just fine with javac. You can always push up your monocle and derisively say "you shouldn't have multiple packages per directory! you shouldn't have dependency loops!", but you should also have a compiler that can run your code just like the underlying language without needing to influence it at all.
That's why most engineers just need command runners. All of these languages and libraries are already designed to successfully run in their own contexts. You just need something to kick off the build with repeatable arguments across machines.