Imagining version control for APIs

Versioning is, right now, merely a human label. We have helpful conventions like semver, but one still relies on human judgment as to the definition of a “notable” change...

Three ways the new iOS ad blocking hurts Google

Apple’s ad blocking API is good for users and bad for Google, in 3 ways:..

Three outcomes of the adpocalypse

It appears that Internet advertising is going through a bit of a shakeout...

Improve the median, not the mean

I like seeing Google Fiber prompt incumbent dinosaurs into boosting speeds. It’s great...

Liquidity, open source and security

Jeff has a thoughtful post about open source, security and incentives. A few points stood out to me...

Statements are statements, and expressions are expressions (in Go)

I got trolled by a facetious article on Go on April 1. But it did trigger a conversation about why Go doesn’t do certain things other languages do...

Theory of the firm: opt-in initiatives

I’ve become adamant about making internal initiatives opt-in for the following reason: it brings more information to bear...

Bugs are a failure of prediction

We think of bugs as flaws in code. This is incorrect, or at best, banal...

The legacy ad industry is wrong about ad blockers

I was recently directed to a couple of papers on browser ad-blocking software (here and here)...

Embedding a struct declaration in a text template in Go

Here’s a nice little technique I came across in developing gen. Say you have a text template, and that template is intended to output Go code...