算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
scaling-fallacy【设计与创意】Apply the principle of avoiding the Scaling Fallacy — the assumption that a system that works at one scale will work at a different (smaller or larger) scale. Use when scaling a feature from prototype to production, designing for an unfamiliar user volume, evaluating whether a process that works for 10 users will work for 10,000, or planning a launch…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Definition. The scaling fallacy is the tendency to assume that a system that works at one scale will also work at a different scale — usually larger, sometimes smaller. The assumption is wrong often enough that it's worth treating as a default suspect rather than a default expectation. Designs that work for 10 users frequently break for 10,000; designs that work for one team frequently fail for an entire company; mockups that look right on a single screen frequently fall apart in production data volumes.
The fallacy is named because it's so common in engineering and design discussions: "We've tested this with 5 users in a session and it works great" → "Therefore it will work at full launch volume." The inference is unwarranted. Scale changes things in two distinct ways: it changes the load on the system (volume of data, volume of users, volume of operations), and it changes the kinds of users and use cases the system encounters (broader audience, more diverse use cases, more edge cases).
Both kinds of change can break a design. The skill is anticipating which assumptions might fail at scale, testing them deliberately, and not assuming that small-scale success predicts large-scale success.
The Lidwell taxonomy distinguishes two kinds, and the distinction is useful.
Load assumptions. The system is asked to handle more (or sometimes less) data, traffic, transactions, or operations than it was designed for. Performance degrades, components fail, costs explode, infrastructure breaks.
Interaction assumptions. The user base grows or changes, encountering use cases, edge cases, and behaviors that weren't anticipated. Designs that worked for the original audience fail for a broader one.
Both are real; both deserve attention. Most scaling discussions focus on the first (will the servers handle it?) and underweight the second (will the design accommodate the new users?). The second is often the harder problem.
Scaling problems hurt because:
The discipline is to anticipate scaling problems before they bite, not to discover them in production.
Lists that work with 10 items and break with 10,000. A feed designed to display all items fails when "all" is now 10,000. Need pagination, virtualization, or filtering.
Search that works on a small corpus and fails on a large one. Linear search across 100 records is fine; across 100 million records, it's not. Need indexing.
Notifications that work for one user and overwhelm at scale. A "we'll send you an email when X happens" feature fine for individual users; toxic when X happens 10,000 times a day to a single user.
UI that works in mockup and breaks with real data. A design with placeholder text "User Name" works perfectly; the same design with "Dr. Jonathan Christopher Worthington-Smythe III" wraps awkwardly.
Workflow that works for 5 team members and fails for 500. A process that depends on "everyone reviewing each other's work" doesn't scale to large teams.
Pricing that works for one customer segment and fails for another. A free-tier model that scales to enterprise customers without limits is a financial disaster.
Feature discoverability that works for 10 features and breaks for 100. A "show all features in the navigation" approach is fine for small apps; it becomes overwhelming and unsearchable for large ones.
Before assuming a system will scale, ask:
What's the actual scale we're targeting? Be specific. 10x current users? 100x? Across what time period?
Which components are linear vs. exponential in load? Some scale gracefully; others scale catastrophically.
What edge cases will become common at scale? A one-in-a-million event happens daily at scale-of-a-million.
What use cases will become more diverse? The new users will use the product in ways the original users didn't.
What dependencies have their own scaling limits? A third-party API with a 1000 req/sec limit doesn't help when you have 10,000 req/sec.
What design choices were made for the small case that won't survive the large? The "display everything" pattern fails at scale; the "manual moderation" pattern fails at scale; the "everyone gets notified" pattern fails at scale.
A startup builds a feed showing all activity in a user's account. With early users (10–100 events per account), the feed loads instantly and is useful. As the product grows, accounts accumulate thousands of events. The feed takes 30 seconds to load, then crashes the browser.
The fix: pagination + virtualization (only render visible items) + filtering (let users find specific kinds of events). The original design assumed everything could be shown; at scale, "everything" is too much.
A product sends an email when "something interesting" happens. For early users with one teammate and a few projects, "interesting things" happen weekly. For enterprise customers with 100 teammates and 50 projects, "interesting things" happen 100x per day. Users start ignoring all emails and the value is lost.
The fix: digest emails (batch into daily summaries), notification preferences (let users tune what's "interesting"), and intelligent filtering (machine learning to predict relevance). The original assumption of "low frequency = always notify" doesn't survive at scale.
A design uses placeholder "Jane Doe" for user names. The design fits perfectly. In production, real names include long ones, hyphenated ones, ones with non-Latin characters, ones with diacritics, and titles. The design wraps awkwardly, breaks layout, or truncates important information.
The fix: design for variable name lengths and character sets from the start. Test with real-world name examples (long, short, multi-script, special characters). Don't assume placeholder = reality.
A document tool's collaboration feature works wonderfully for 5 simultaneous editors: changes appear in real time, conflicts are rare, the cursor positions of others are visible. The same feature with 50 simultaneous editors becomes a flickering mess of cursors and conflicting changes.
The fix: design collaboration patterns that scale. Active vs. passive participation; section-based locking; awareness controls. The 5-person assumption doesn't survive.
A SaaS product offers a generous free tier ("up to 1GB of storage, unlimited collaborators"). It works fine for individual users. Enterprise customers sign up under the free tier and use it for hundreds of employees, costing the company more in infrastructure than they could ever charge.
The fix: tier-based limits that scale with usage. Pricing tiers that grow with the customer's actual cost to serve. The "unlimited" assumption doesn't survive enterprise.
A simple full-text search over a database table is fine for 1,000 records. At 1 million records, queries take 30 seconds. At 100 million, queries time out entirely.
The fix: dedicated search infrastructure (Elasticsearch, Algolia, or similar). The query patterns also need to change — fuzzy matching, ranking, filtering all become essential. The "just search the table" assumption doesn't survive scale.
"It works in dev, ship it." Local testing rarely captures production scale. Pre-launch testing should explicitly target production-scale data and load.
Assuming linear scaling. "If it works for 100 users, it'll work for 100,000 because we'll just add 1000x more servers." Many systems have non-linear scaling characteristics; doubling load doesn't always require doubling capacity.
Ignoring the long tail. "Most users will only have a few items." True, but the few users with many items will have a terrible experience, and they're often your most valuable customers.
Designing for the median user. The median experience may be fine; the experience for users at the upper extreme of usage may be broken.
Underestimating diversity at scale. "Our users are all engineers in their 30s in San Francisco." At scale, your users will be retirees in Korea, students in Brazil, and professionals across the entire spectrum of jobs and circumstances. The original audience assumptions don't survive.
Optimizing only for current scale. A system optimized aggressively for current 10K users may be hard to re-architect for 1M. Plan for the next 10x even if you're not there yet.
When designing a system or feature, ask: What scale am I targeting in 6 months? In 2 years? Be specific. Which components scale linearly, and which non-linearly? Identify the non-linear ones and stress-test them. What edge cases will become common at scale? A 0.01% event happens daily at scale-of-a-million. What user diversity will I encounter? New users will be different from current users. Have I tested at the actual target scale, or just smaller? Small-scale testing doesn't predict large-scale behavior.
references/lineage.md — origins in engineering, biology, and software systems.scaling-load-assumptions/ — sub-skill on load and capacity scaling.scaling-interaction-assumptions/ — sub-skill on user-base and behavioral scaling.