Glean 拾遗
Daily · timeline

A few picks a day.

Fri, Sep 18, 2026 3picks
← 09-17
Calendar ▾
2026 · 09
MoTuWeThFrSaSu ·123456789101112131415161718192021222324252627282930
has picks today
06:01

High Internal Quality Makes Software Cheaper, Not More Expensive

内部质量不是成本:高质量软件反而更便宜

Martin Fowler argues that the familiar quality-versus-cost trade-off does not apply to the internal quality of software. He splits quality into external attributes users can perceive — UI, defects — and internal ones they cannot, such as architecture, naming, and modularity. Customers will pay more for a better interface but cannot judge internal structure, so it is usually treated as a cost to be cut. Fowler's claim runs the other way: internal quality lowers the cost of future change, making software cheaper to produce, not more expensive. A pseudo-graph of cumulative functionality against time shows low-quality projects starting fast and then stalling as cruft accumulates; the developers he canvassed report being slowed within weeks. Even the best teams create cruft — they hold it down with automated tests, frequent refactoring, and continuous integration. He concedes that output cannot be measured, so the crossing point rests on experience rather than data. Written for engineers who need an economic, not moralistic, case for quality.

martinfowler.com · 15 min · Code Quality · Refactoring · Software Engineering · Technical Debt
06:01

Your Database Skills Are Not 'Good to Have'

数据库技能不是加分项:从 2006 年 MySQL 分面搜索说起

A MySQL war story from 2006: a three-person team builds faceted search for New York Magazine's Fashion Week portal, with exact per-tag counts, before Solr facets or Endeca existed. The author tunes MySQL 4 by timing queries and reading EXPLAIN output. Twenty years later he sees the opposite trend: engineers reach for "planet-scale" databases while barely knowing the relational engine they already run. He recounts an e-commerce incident where a product listing page took over 10 seconds even with no traffic, caused by three mistakes at once: no index, ORM loops firing 200-500 queries per page, and SELECT-ing every column. The argument: a modern RDBMS is innocent until proven guilty, and the burden of proof is on you. Includes a troubleshooting runbook and anti-patterns (exotic databases, unnecessary caching, data landfill). For backend and data engineers.

renegadeotter.com · 14 min · Database · MySQL · Performance · Software Engineering
06:01

A Lannister Always Pays His Technical Debts

兰尼斯特有债必偿:先分清三种技术债再动手

The author sorts technical debt into three buckets: aesthetic (import order, naming — annoys you but doesn't touch users or velocity, and tooling can fix it), deferrable (contained, to be crossed off methodically inside normal sprint work), and toxic (a half-finished thing that turns into a workaround magnet, with every new feature built on top of it). Missing tests and missing docs are called out as toxic debt: without an integration suite you won't dare swing a sledgehammer at the codebase, and without READMEs and runbooks every bug repro starts with reverse-engineering the system at real dollar cost. The related advice: TODO comments mean you will never do it, so turn them into actual cards on the board, and tag debt stories so the ratio of features to debt stays visible. The debt column will never be empty — just don't let it run away.

renegadeotter.com · 8 min · Refactoring · Software Engineering · Technical Debt