惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
雷峰网
雷峰网
Recent Announcements
Recent Announcements
月光博客
月光博客
G
Google Developers Blog
腾讯CDC
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
T
Tenable Blog
云风的 BLOG
云风的 BLOG
W
WeLiveSecurity
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 聂微东
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
MyScale Blog
MyScale Blog
K
Kaspersky official blog
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
aimingoo的专栏
aimingoo的专栏
I
Intezer
Vercel News
Vercel News
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
Latest news
Latest news
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tor Project blog
S
Security Affairs
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
美团技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
Security @ Cisco Blogs
L
LINUX DO - 热门话题
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
D
Docker
L
Lohrmann on Cybersecurity
F
Full Disclosure

Sophie Alpert

There are no lossless transformations of natural-language text Deconstructing “services” I don’t want AI agents controlling my laptop Materialized views are obviously useful TODOs aren’t for doing Everyone is wrong about that Slack flowchart Hire me to empower and upskill your eng team How React Changed the Web Forever: A Documentary Fast and maintainable patterns for fetching from a database React Conf: “Building a Custom React Renderer” Why review code? Yak shaving and fixing Voice React Conf: “React Today and Tomorrow” Why we host conference talk dry runs React Podcast: Inside React Type errors with inference need stacks Observable programming React 16: an API-compatible rewrite Hi, I’m trans. Initializing on the main thread using dispatch_once A near-perfect oninput shim for IE 8 and 9 Using React to speed up the Khan Academy question editor What I did at Khan Academy, 2012 edition Preventing XSS attacks when embedding JSON in HTML Rolling back to an old revision in Mercurial (like git reset)
Metrics by proxy
Sophie Alpert · 2018-12-04 · via Sophie Alpert

It’s usually hard to measure the things we care about. So we compromise.

What makes a metric good? In an ideal world, you could pick the thing you want to make better (say, “How productive are my users?”) and then measure it precisely. But since it’s rare to be able to take realistic measurements in reply to such a question, we need to come up with something else that we can actually measure. If you look around, you’ll find that most metrics we use are only an approximation of the real thing we care about. So I’ve been calling these proxy metrics.

I’ve noticed this pattern in several places, so in this post I’ll walk through how this works from multiple angles.

The technical side: Let’s take web performance. We care about how long things take on real users’ devices. But it’s hard to track that. Even if you set up the telemetry to collect performance numbers, they’re usually noisy.

  • If you’re trying to decide if a particular change regresses page load time, production data is very accurate but it likely won’t detect small changes.

  • So maybe you set up a controlled environment where there are fewer sources of noise. This means your numbers are more repeatable but they’re less accurate (since the lab machines may be unrepresentative). Reducing the noise like this helps, though in my experience it’s still hard to measure small regressions.

  • So maybe you use a tool like Valgrind’s Cachegrind to make your benchmark runs even more repeatable, so that you can detect 0.05% changes or smaller. This also isn’t a free lunch: Valgrind simulates a CPU but it won’t behave identically to the real ones you care about – so it is yet more precise but still perhaps less representative.

  • I tend to think that using Valgrind is a pretty good place to end up. It’s a good compromise between accuracy and precision. But there’s also another direction you can go. Sometimes it’s nice to just have a really understandable, predictable, precise metric that people can drive down. Like file size.

    If we send fewer bytes of JS to the client, our pages will generally be faster. And this is an easier goal to rally people around – people can look at a piece of code and think about what they need to do to cut down on its size. It’s can be a lot easier than predicting if something will run faster. If you get 20 people to cut down 5kB each, you’ve removed 100kB. And that’s almost certainly a practical improvement. Even though it’s not directly correlated, it’s easy to count and it’s usually directionally accurate. That is, improvements in file size tend to improve performance, and regressions in file size tend to regress performance. So it turns out to be useful.

The management side: Let’s say you’re running a company and you’re trying to figure out how to evaluate your employees. Your ideal metric might be, “How much value did this employee generate for the company during this time?”

  • You can’t measure that, so you try to look at what you can measure. You reward people for improving performance metrics and for improving product metrics. (That’s one reason that you want to be able to measure performance improvements precisely. These metrics themselves are a proxy for “How well is the company doing?“) You reward employees for the number of interviews they did, and the number of new people they mentored. It’s not an actual formula, but it’s an attempt to be fair and relatively repeatable.

  • Many managers know the struggle of saying, “Spending time on that would be useful, but it probably won’t count for much at performance review time”. That represents a mismatch between the actual value to the company and measured value to the company. If that happens a lot, it probably means your proxy metric is bad and you should find something better to evaluate people on.

  • When designing a performance review system, the tragedy of the commons can bite you. If no individual person feels that a particular type of work is rewarded, it likely won’t get done. For example, take testing. If creating automated tests isn’t valued by The System, people won’t write them. And then you have no tests. If you need those tests to keep the machine well-oiled – well, you’re gonna have a bad time. So you, the performance management overlord, notice this and revise your system. You realize that the menial work of writing tests, refactoring, and fixing bugs is undervalued. So you amend your measurements to count this sort of work explicitly and avoid the negative externality. If you do it right, your problem with bad engineering practices might start to go away.

The engagement side: About those product metrics I mentioned. Let’s say it’s 2004, and you’re building Facebook. How do you know if you’re doing a good job? Maybe your first instinct is: if people use the site more, they’re probably getting value out of it. (Note: This might not be how things actually happened. I work at Facebook, but not on this.)

  • You want to know whether your changes are making the site better or worse, so you set up your A/B testing tool to measure how much people are using the site. In practical terms, you’re looking at metrics like the number of likes, the number of comments, the amount of time spent on the site. You figure that this isn’t a perfect representation of “Are people getting value out of this?”, but it’s a step in the right direction. It’s directionally accurate.

  • One day, you reflect and realize that those aren’t the best metrics. People are spending a lot of time on your site and they don’t feel that time is well spent. You run research studies, and you find that people who spend a lot of time passively consuming content aren’t as happy. So you decide that you want more “time well spent” and more “meaningful social interactions”, that the way to do that is to emphasize “friends, family, and groups”.

  • Well, what does that actually mean? Your research tells you that people value receiving comments more than likes. (Say, about twice as much.) And that people value interactions with friends more than with non-friends. So you come up with a formula that looks something like 3 × (2 × friend comments + friend likes) + (2 × other comments + other likes). And then you find out that people think reactions are more meaningful than likes, so you weigh reactions higher in your formula too.

At the end of the day, you’ve created some formula that purports to measure how meaningful people are finding their interactions. The formula looks silly. Dry.

Could it possibly know what people are feeling? Well, it actually kinda does! Because your user research told you that people value comments twice as much as likes. And so your formula is your best attempt at actually codifying that into science. It’s not perfect, but it’s based in human interaction.

It’ll have to do. At least until your next big realization, when you’ll pick a better metric.


(Thanks to Ada Powers for reviewing.)