Frontend @ GCP. Prev. led DX @ Airbnb. Before that Chrome, Blink and Grasshopper @ Google. Part time keeper of the web. All posts are my own opinions.

Joined February 2009
66 Photos and videos
Google recently added a ridiculous policy where eng are no longer allowed to run any browser except Chrome. It's totally bonkers, now you can't test locally in Safari or Firefox. I keep asking for an exception because you know I'm a web developer... And security keeps denying it.
2
1
20
1,766
Today: "All P2 bugs must be fixed within the SLA" Also today: "Please don't file bugs since we don't fix them"
211
On the one hand I'm not a fan of all the react directives, on the other TC39 has totally let me down in terms of inline modules and workers so maybe "use worker" and "use module" wouldn't be so bad.
1
2
273
I'm always surprised when I see folks walk away from their laptops in coffee shops without locking them. I feel like security teams are so concerned with fancy attacks, but just following someone to the coffee shop is probably the most effective way to gain local access.
5
343
Having seen many versions of this, I'm not convinced the "everyone gets a database" concept is worth it. It encourages micro service hell and means most folks aren't using production quality test data. I've seen a shared staging DB with real ACLs win every time (at scale).
15 Dec 2024
Poll: Does your dev team do these 3 things? 1. All devs have their own DB instance so we don’t conflict with each other. The DBs run locally, and can be reset via static SQL scripts via a single command. The SQL scripts are committed to source control. This way, we can code without internet, demo the app reliably, reproduce bugs, and write fast, reliable tests. 2. Create a short-lived feature branch for each ticket. Each pushed commit runs tests on CI. CI auto-deploys a dedicated ephemeral (short-lived) environment with a unique URL for each feature branch so people can test and approve *before* merge. Thus, no separate shared environments like UAT or staging are typically required. 3. When a PR is approved, we merge to main. The CI server auto-deploys the main branch to prod. If the feature isn’t ready for public use, hide it in prod via a feature flag.
203
React's error handling is such a misfeature: in a non-react web app a bug might cause a button to not work or the page to render weird, but it doesn't blank the entire page. I sometimes wonder how much money this feature has caused companies to lose without realizing it...
1
2
393
I wish it was only a couple hours. I see 100 page design docs debated for months without building anything.
We had 6 engineers talking for 4 hours about a 2 line code change for an obscure edge case that will never happen. Are all Fortune 500 companies like this?
3
362
A day in the life: People working late hours and weekends to write docs about projects that will take years. Meanwhile multiple customers escalate an issue with a deadline and the response from the eng is "let's chat next week".
2
308
Google seemingly cannot figure out how to move fast. Open Sourcing something takes like 8 approvals, some waiting 10 days with no response. For help you email a list that replies you're "in the queue" and that the list is deprecated (of course) and to use a Google form next time
4
8
1,573
The screams are coming from inside the house.
1
2
216
If we have Iterator and AsyncIterator (and the helpers), then I wonder if adding an abort() method to those would be enough to have a whole new event API without introducing a fourth concept of Observable.
1
1
285
on('click', {signal}) iterator.abort() (which aborts up the iterator tree).
1
145
Of course the next question is can the average dev understand and complex infer soup or fix bugs in the output. (This example isn't so bad, but I already run into AI generated code authors don't grok before committing).
13 Sep 2024
I wanted to take /one/:of/these/:paths and infer a params object off of it. Asked Claude to come up with the TypeScript. Have a working version in 5 minutes. How.
302
I wish the DOM had dispatchEventAsync(e): Promise<Boolean> so userland could dispatch events and get the same microtask handling as native ones. In native handler you can await a promise and still preventDefault() because there's a checkpoint before exit. But custom events can't.
1
1
4
690
I disagree with this one. Going through addEventListener adds up in cost. Like in a table widget if you have listeners on components that are inserted into each cell it quickly turns into many thousands of event listeners. v8 should make the bindings a lot faster though.
1
2
968
This is such sad news, Susan was a personal hero to me. I had the pleasure of meeting her (and hilariously dancing with her at a party) once. She was such a strong and empowering leader. I hoped for her triumphant return to Google someday, and knowing that can never happen is :(
Unbelievably saddened by the loss of my dear friend @SusanWojcicki after two years of living with cancer. She is as core to the history of Google as anyone, and it’s hard to imagine the world without her. She was an incredible person, leader and friend who had a tremendous impact on the world and I’m one of countless Googlers who is better for knowing her. We will miss her dearly. Our thoughts with her family. RIP Susan.
5
336
I love some good comments.. but I'll take good commit messages over comments. Make your blame useful! So often I see folks add no context at all to the commit message.
Not so hot take. Every time you use a tricky things, write a comment explaining why its needed. One of such things is 'Task.Yield()'. Can be very helpful to make an async method really "async", but explanation is very much needed. Found the usage with no comments:
1
2
252
Apparently Google doesn't fix bugs in internal tools anymore (even bugs that have been around 10 years) and only works on "transformative productivity improvements with AI". (╯°□°)╯︵ ┻━┻
1
6
650
I wish Google had a better understanding of the web. So much emphasis on scale and security, but not on being a good citizen of the web. Running a link shortener responsibly means keeping the link redirects alive for decades.
Google shutting down something as simple as a URL shortener is fucking wild. The cost of having one engineer keep it alive can't be as bad as the continued loss of user trust.
8
1,378
Please don't use these bloated libraries. Your customers don't care about theoretical purity/robustness. Focus on customers not engineering purity.
9 Jul 2024
The difference between traverse@0.6.8 and 0.6.9
1
5
420