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

推荐订阅源

博客园_首页
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
雷峰网
雷峰网
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Y
Y Combinator Blog
J
Java Code Geeks
S
SegmentFault 最新的问题
罗磊的独立博客
爱范儿
爱范儿
F
Full Disclosure
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
G
Google Developers Blog
腾讯CDC
美团技术团队
Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
B
Blog
Recorded Future
Recorded Future
月光博客
月光博客
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
aimingoo的专栏
aimingoo的专栏
W
WeLiveSecurity
Recent Announcements
Recent Announcements
P
Palo Alto Networks Blog
Apple Machine Learning Research
Apple Machine Learning Research
MongoDB | Blog
MongoDB | Blog
G
GRAHAM CLULEY
A
Arctic Wolf
AWS News Blog
AWS News Blog
Project Zero
Project Zero
博客园 - Franky
V
Vulnerabilities – Threatpost

Hacker News

Introducing Claude Opus 4.7 Qwen Studio The Future of Everything is Lies, I Guess: Where Do We Go From Here? GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis Moving a large-scale metrics pipeline from StatsD to OpenTelemetry / Prometheus GitHub - Nightmare-Eclipse/RedSun: The Red Sun vulnerability repository GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - macOS26/Agent: Any AI, replaces Claude Code, Cursor, OpenClaw. Over 18 LLM providers (Claude, OpenAI, Gemini, Ollama, Zai, HF, Qwen) wired into a native Mac app that writes code, builds Xcode projects, bumps versions, manages git, automates Safari, use AppleScript, JS or Accessibility, extend Agent! w/ MCP Servers, run tasks from your iPhone via Messages. YouTube now lets you turn off Shorts I Made a Terminal Pager Burgers | マクドナルド公式 Commands — HackerNews CLI documentation ChatGPT for Excel PiCore - Raspberry Pi Port of Tiny Core Linux Live Nation illegally monopolized ticketing market, jury finds Google Broke Its Promise to Me. Now ICE Has My Data. Founding Engineer at Adaptional | Y Combinator CRISPR takes important step toward silencing Down syndrome’s extra chromosome GitHub - saffron-health/libretto: The AI toolkit for building reliable browser automations US v. Heppner (S.D.N.Y. 2026) no attorney-client privilege for AI chats [pdf] Unexpected €54k billing spike in 13 hours: Firebase browser key without API restrictions used for Gemini requests Retrofitting JIT Compilers into C Interpreters IPv6 – Google The Accursèd Alphabetical Clock Cybersecurity Looks Like Proof of Work Now Fragments: April 14 Cal.com Goes Closed Source: Why AI Security Is Forcing Our Decision | Cal.com - Scheduling Software for Online Bookings Laravel raised money and now injects ads directly into your agent When moving fast, talking is the first thing to break Too much Discussion of the XOR swap trick – Heather Cafe Introduction to Spherical Harmonics for Graphics Programmers The Grand Line Building a Z-Machine in the worst possible language High-Level Rust: Getting 80% of the Benefits with 20% of the Pain GitHub - duguyue100/midnight-captain: Inspired by Midnight Commander, tailored to my taste. How to build a `git diff` driver · Jamie Tanna | Software Engineer Center for Responsible, Decentralized Intelligence at Berkeley The Local Universe’s Expansion Rate Is Clearer Than Ever, but Still Doesn’t Add Up - A new synthesis of astronomical measurements confirms a persistent mismatch that could point to physics beyond current models The air throughout our homes is infused with microplastics. But there are things you can do to breathe less of them The disturbing white paper Red Hat is trying to erase from the internet – OSnews The Future of Everything is Lies, I Guess: Annoyances ‘Abhorrent’: the inside story of the Polymarket gamblers betting millions on war Productive procrastination — Max van IJsselmuiden maps, territory and LMs 447 Terabytes per Square Centimetre at Zero Retention Energy: Non-Volatile Memory at the Atomic Scale on Fluorographane Show HN: Pardonned.com – A searchable database of US Pardons 20 Years on AWS and Never Not My Job The Seasons are Wrong Artemis II crew splashes down near San Diego after historic moon mission We gave an AI a 3 year retail lease in SF and asked it to make a profit | Andon Labs How a dancer with ALS used brainwaves to perform live On filing the corners off my MacBooks Installing every* Firefox extension OpenClaw’s memory is unreliable, and you don’t know when it will break Steve Blank Nowhere Is Safe Chimpanzees in Uganda locked in vicious 'civil war', say researchers watgo - a WebAssembly Toolkit for Go linux/Documentation/process/coding-assistants.rst at master · torvalds/linux GitHub - callumlocke/json-formatter: Makes JSON easy to read. Founding Product Engineer at Bild AI | Y Combinator A compelling title that is cryptic enough to get you to take action on it GitHub - Keychron/Keychron-Keyboards-Hardware-Design: Industrial design files for Keychron keyboards and mice. 100+ models with CAD assets in STEP, DXF, DWG, and PDF. Source-available, with commercial use allowed for original compatible accessories within the license terms. [ANNOUNCE] WireGuardNT v0.11 and WireGuard for Windows v0.6 Released 1D-Chess Helium Is Hard to Replace Cooperative Vectors Introduction | Evolve Keeping a Postgres queue healthy — PlanetScale Our response to the Axios developer tool compromise Do Americans read print books, e-books or audiobooks more? The Zettelkasten Method in Obsidian: A Practical Setup Guide Artemis II Is Competency Porn and We Are Starving For It WeakC4 Flight Viz — Cockpit View A Mexican surveillance giant you’ve never heard of is now watching the U.S. border Surelock: Deadlock-Free Mutexes for Rust RISC-V 101 – what is it and what does it mean for Canonical? | Ubuntu The Problem That Built an Industry How Much Linear Memory Access Is Enough? | Solidean Investigating Split Locks on x86-64 Simplest hash functions Sybilproof reputation mechanisms (2005) [pdf] What is a property? How Complex is my Code? Static code analysis in Kotlin — tools overview Toffoli gates are all you need PGLite evangelism dcmake: a new CMake debugger UI Clojure on Fennel part one: Persistent Data Structures Fragments: April 2 Python Release Python install manager 26.1 The Life and Death of the Book Review - Liberties Introducing Database Traffic Control — PlanetScale Bitcoin miners are losing $19,000 on every BTC produced as difficulty drops 7.8% God sleeps in the minerals Building slogbox Apple Silicon and Virtual Machines: Beating the 2 VM Limit Who was “Not Even Wrong” first? Pokemon Evolution Vs Darwinian Evolution The APL Programming Language Source Code
Granularity comes at a cost | Sidhant Bansal
Sidhant Bansal · 2026-06-20 · via Hacker News

I used to assume that more granularity in a system is usually a good thing. More price points, more time slots, more ways for users to express what they want, all of this sounds like efficiency.

But two recent examples, one from financial markets and one from booking a sports court, made me realize that granularity is not free. In strategic systems, finer choices can create new ways to game priority or reduce the incentive to participate honestly.

Disclaimer: These are my personal thoughts and not the views of my employer.

In financial markets - a relatively dull example

Note: This section gets a little finance-lingo-specific. If you are not interested in markets, you can skip to the sports-court example, which is more real-life and completely unrelated to trading.

In the markets, we have an order book where people are quoting to buy and sell a stock at certain price points. Say one user is willing to buy AAPL at \$100.00, another at \$100.10 and similarly some are selling it at \$101.00 and \$101.50 respectively. The difference between the best ask and best bid is called the “spread” (in this case it’s 101.00 - 100.10 = 90 cents).

Now obviously you can come in and quote at \$100.20 and make the spread smaller. The “tick size” is the smallest increment in price that a stock can be quoted at. If the tick size is \$0.10, then you can quote at \$100.20 but not at \$100.15. The smaller the tick size, the more granular the market is. One would think that this means more price points = more competition = tighter spreads = cheaper spread to pay for retail.

Intuition: Think of the spread like an implicit fee retail investors pay when they trade.

This Nasdaq article makes a point I found counterintuitive: if a stock’s spread is “too many ticks wide,” then the market may actually be paying a cost for excessive granularity. Say the tick size is \$0.01, but the average spread is \$0.50. That means the spread is 50 ticks wide, so traders can jump ahead of each other in the queue by improving the price by just one cent. This makes life worse for liquidity providers. When you post a quote, you are taking adverse-selection risk: maybe the market moves against you before you get filled. In return, you hope to earn the spread. But if someone can cheaply step ahead of you by improving your quote by a tiny amount, then you still bear part of the risk while someone else can capture part of the reward. So liquidity providers may respond by quoting wider, i.e. less aggressively, or only when they have stronger conviction. In other words, smaller ticks do not automatically mean better markets. There is a sweet spot: ticks should be small enough to allow price competition, but not so small that queue priority becomes meaningless and liquidity providers stop quoting aggressively.

Too many ticks graph
Stocks in grey have a spread > 10 ticks, they could benefit from larger tick size. (Credits: Nasdaq article linked above)

In booking a sports court - a more fun example

For this example, I’ll anonymize the sport and the NYC platform I was using.

Let us assume there is a booking system that has the following rules:

  • You can book a court for a 1-hour session between 9am and 5pm. The possible time slots are: 9am-10am, 9:30am-10:30am, 10am-11am, 10:30am-11:30am, …, 3:30pm-4:30pm, 4:00pm-5:00pm.
  • Obviously, if the court is booked by user A for a 1hr slot, no other user can book it for any overlapping time slot.
  • The platform does not object if users play before or after their booked session, as long as the court is not booked by someone else. It does not charge users for this extra time.
  • The platform has captchas and rate limits to prevent bots from gaming the system.

Now, given these rules, think through:

  • How you could still try to get an edge in booking the court to get the most value for your money?
  • Is the platform’s design optimal? Should they also allow 30-minute bookings at half the 1hr price or alternatively less granular/more granular time slots from a profitability perspective?

You can quantify profitability as being directly proportional to the total duration of the bookings, i.e. if the court was booked for 7 hours out of the 8 available hours, then their profitability is 7/8 = 87.5%.

Think on this for a couple of minutes before reading on, it’s a good thought experiment.

Spoiler:

The immediate strategy is: suppose the court is booked from 9-10 and 12-1, then instead of booking 10-11 or 11-12 you book 10:30-11:30. Because the system only allows 1hr sessions, no one can book the remaining 30min slots at either side, so you effectively know the court is going to be free for those 30mins, i.e. from 10-10:30 and from 11:30-12. Of course, you are not guaranteed to get the full extra hour. The 9–10 players might overrun into 10–10:30, and the 12–1 players might arrive early for 11:30–12. But structurally, the platform has created two unbookable 30-minute pockets. If you are optimizing for value rather than etiquette, booking the middle slot gives you free optionality on both sides.

The platform has accidentally also created a new game. Because it allows 30-minute start times but only sells 1-hour sessions, certain gaps become unbookable. A strategic user is no longer incentivized to book the exact slot they want as early as possible. Instead, they may wait for nearby slots to fill, then book around them to create free slack on one or both sides. If you book too early, someone else can later book back-to-back with you and remove that slack. But if you wait until the schedule is partially filled, you can choose a slot that maximizes your chance of extra unpaid court time.

Now add two more rules:

  • The platform allows one to cancel their booking up to 24hrs before the session starts with a full refund.
  • The platform opens each slot for booking exactly 5 days in advance. So the 9am slot on day X opens at 9am on day X-5, the 9:30am slot on day X opens at 9:30am on day X-5, and so on.

Given these booking and cancellation rules, suppose I wanted to game the system to get the 2pm-3pm slot on a Saturday (assume it’s a popular slot), what can I do?

Again, think like someone trying to game a system, and give it a shot before reading on.

Spoiler:

Assume that simply racing for the 2pm Saturday slot when it opens is noisy. Other people want it too, and you may lose the click-speed lottery. Well, since the platform allows unlimited cancels you could just keep a “lock” on the last available slot. So here is the strategy (disclaimer: this no longer works on the platform I saw it at, they have patched it since and rightfully so) - On Tuesday, suppose the 11-12 slot of Saturday is free when the current time is 11:05, just go ahead and book it. Now run the following:

11:05  Book 11:00–12:00
11:30  11:30–12:30 should unlock, but it is blocked by your current booking
11:40  Cancel 11:00–12:00 and immediately book 11:30–12:30
12:10  Cancel 11:30–12:30 and immediately book 12:00–1:00
...
2:10   Roll into the desired 2:00–3:00 slot

Did you see how we slid our booked slot from 11-12 to 11:30-12:30 while taking minimal risk of losing the slot? I don’t need to spell it out, but yeah, just keep maintaining this running lock on the last available slot till you hit 2pm-3pm, and you are golden. It is hilariously naive to execute, but it does require a bunch of free time and constant checking on your phone.

Again, the 30-minute granularity is what makes this rolling-lock strategy possible. If the platform only offered non-overlapping slots: 9–10, 10–11, 11–12, and so on, there would be no overlapping reservations to slide forward. The user would have to compete directly for the slot they actually wanted. The platform could also release all slots at once or limit repeated cancellations.

A simple product idea: “Let’s allow users more granular time slots so they have more flexibility and we get higher utilization”, ended up backfiring. It made the system more gameable and less profitable.

Drake meme

Conclusion

The lesson is not that granularity is bad. Granularity often does improve flexibility and competition. But it is not a free lunch. Once users are strategic, finer increments can lower the cost of strategic repositioning.

More granularity gives users more moves. Sometimes those moves are exactly what you wanted. Sometimes you just built a more elegant game for the most annoying person in the room.