Notes · The Algebra of the Interface
seedling
The Spreadsheet Always Wins
The spreadsheet is the requirement. Why the rewrite loses, and what a workbook would have to be so nobody needs two tools.
… in a manner and in a sequence that are logical to him for solving the problem, without regard to the logical order of the program required for the computer to execute it.
— Rene K. Pardo and Remy Landau, "Process and apparatus for converting a source program into an object program," US Patent 4,398,249, filed August 12, 1970
Cite this
Mangalapilly, Y. J. (2026, August). The Spreadsheet Always Wins. Saṃhitā Notes. https://yesudeep.com/blog/the-spreadsheet-always-wins/ @online{mangalapilly2026the,
author = {Yesudeep Jose Mangalapilly},
title = {The Spreadsheet Always Wins},
journal = {Sa\d{m}hit\=a Notes},
year = {2026},
month = {August},
url = {https://yesudeep.com/blog/the-spreadsheet-always-wins/},
urldate = {2026-08-13},
} Yesudeep Jose Mangalapilly. “The Spreadsheet Always Wins.” Saṃhitā Notes, 2026. https://yesudeep.com/blog/the-spreadsheet-always-wins/. TY - ELEC
AU - Mangalapilly, Yesudeep Jose
TI - The Spreadsheet Always Wins
T2 - Saṃhitā Notes
PY - 2026
UR - https://yesudeep.com/blog/the-spreadsheet-always-wins/
Y2 - 2026-08-13
ER - The largest specimen in the arc on the machines hiding in everyday interfaces. The checkbox was the smallest control there is, and it still turned out to be a finite-state machine with a hidden coordinate. The spreadsheet is the other end of the range: the most widely used programming environment ever built, and the one interface users refuse to give up. This piece takes it apart the same way, and the dissection is unusually clean, because a single rule turns out to govern three layers that look unrelated.
By the end you will know:
- why the grid's coordinates are inherited page layout rather than a data model, and why that accident is what lets sorting silently retarget a formula;
- what a formula should point at instead, and why resolving it once at admission collapses a six-operation rewrite catalog down to one;
- why the same identity-over-position rule decides whether two people can edit one sheet without losing each other's work — and where keys alone still leave a tie;
- why a dependency graph is not a performance mechanism but the reason a sheet feels alive, and why the replacement feels dead without anyone having chosen that;
- and what thirty-five years of research establishes about all of the above — including the four findings that argue against this piece's own conclusion, which get a section of their own rather than a footnote.
The tool nobody can take away
Start with the thing the rewrite never replicates — and start by holding it. The grid below is not a screenshot. It is the workbook this piece dissects, running in the page: click a cell and type, double-click or press F2 to edit in place, write =B2*C2 and watch it evaluate, sort nothing and break nothing. Every mechanism named later in the article is running in this figure, which is the point: this is the bar a replacement application has to clear before anyone agrees to switch, and it is the bar most rewrites quietly miss.
= and press an arrow and the sheet outlines the reference you are building. The title stretches across all four columns as one merged cell — arrow through it and the cursor treats the whole stripe as one stop. Everything the rest of this piece explains is happening in this box.A spreadsheet is the only software that never tells you "you can't do that." There is no schema to migrate, no deploy, no ticket, no permission. You get a surface and complete authority over it, and the machine keeps up at the speed of typing.
That is a research finding and not only an impression. Simon Peyton Jones, Alan Blackwell and Margaret Burnett state the mechanism in one sentence: "the commercial success of spreadsheets is largely due to the fact that many people find them more usable than programming languages for programming-like tasks" (ICFP 2003). Their framing of what a sheet is matches the engine model this piece will arrive at exactly: "the entire program is a single flat collection of equations of the form 'variable = formula'."
The population is large, and the honest number is smaller than the slogan. Scaffidi, Shaw and Myers estimated approximately 90 million American end-user workers for 2012 against fewer than 3 million professional programmers, and over 60% of American end-user workers reported using a spreadsheet or a database (VL/HCC 2005). The authors then take their own number apart: they call the innovation-diffusion assumption behind the projection "somewhat suspect", say plainly that 90 million "represents a lower bound", and report two studies suggesting the sheets are simpler than the headcount implies — one found 47% of studied spreadsheets used the IF function, and a corpus of web-collected spreadsheets showed 44% "contained any formulas at all". Microsoft, describing its own product, claims Excel formulas are written by "an order of magnitude more users than all the C, C++, C#, Java, and Python programmers in the world combined". Take the three together and the shape is clear enough to build on: the audience for a grid is enormous, the audience that writes formulas is a subset of it, and the audience that would author rules for other people is smaller still.
Underneath the convenience is something more specific: legibility as a source of confidence. Everything is visible at once. No hidden state, no black box. You can check the arithmetic yourself. That visibility is what earns the trust.
Then the sheet gets important, and important means scale — more rows, more people, more consequences. Engineering rewrites it as an application with a schema, an API, and a form. The rewrite is better at exactly one thing: it scales. It is worse at restructuring, worse at ad-hoc questions, worse at showing its work, and usually worse at letting two people work at once. So the spreadsheet does not go away. It becomes the shadow system where the real thinking still happens, and the application becomes the place where numbers are typed in again, later, by hand.
Two systems. One reconciliation job nobody owns.
A shadow system is a sheet or small database that staff build to do work the sanctioned application cannot, and that management never approved. Four research communities named the same artifact separately: workaround, misfit, shadow IT, and feral information system. Learn more in Behrens and Sedera's case study of why they appear after an ERP rollout.
That artifact has been studied for forty years under four different names, which is itself a finding: four research communities each discovered it separately and each gave it a word. Steven Alter calls the general move a workaround and defines it without requiring a computer at all (Communications of the AIS, 2014). Enterprise-systems researchers call the underlying condition a misfit and treat it as a premise rather than a discovery: packaged software "is designed to support generic rather than specific requirements, and hence [is] likely to be an imperfect fit in any particular instance" (Strong and Volkoff, MIS Quarterly, 2010).
The distinction that decides what a builder should do about it is whether the sheet appears because the application is unpleasant or because the application is inexpressive. The literature leans to the second, with a caveat worth stating in the same breath. Sandy Behrens and Wasana Sedera set out to explain why shadow systems exist after an enterprise rollout, coded their interviews without deciding the categories in advance, and produced codes for business-process mismatch and for inadequate functionality — and no code for interface usability at all. Alter's first workaround type is "inadequate IT functionality", and the example he chooses is a schema limit rather than an interface one: a system that could not issue a zero-dollar purchase order, so the organization invented a five-dollar minimum for anything a vendor gave away free. The caveat is that no study measured the two causes against each other. The ranking rests on which categories researchers found worth creating, which is weaker evidence than a count, and a later section returns to a measurement that cuts the other way.
The counterweight, quoted carefully
A dissection that only praises its subject is advertising. Two things are wrong with the grid, and one of them is the reason the rewrite gets funded in the first place.
The first is errors. The best source is a peer-reviewed critical review by Stephen Powell, Kenneth Baker and Barry Lawson of Dartmouth's Tuck School of Business (Decision Support Systems, 2008). Across the seven most recent field audits they reproduce, covering 88 operational spreadsheets, 94% contained at least one error, and the weighted average cell error rate over the 43 sheets with cell-level data was 5.2%. That pair of numbers is the most-quoted statistic in the field, and it must never travel without the three objections its own source raises: three of the seven sources are unpublished; most gave "little or no information on their definition of errors or on the methods used to find errors"; and the single source accounting for 70% of the cell-error sample did not report a cell error rate at all. The same authors record that no accepted taxonomy of spreadsheet errors exists and that "essentially no research has been conducted on the impact of errors in spreadsheets." So the direction is well supported and the magnitude is not, and every circulating dollar figure for what spreadsheet errors cost traces to press reports rather than to audited measurement. This piece therefore quotes no such figure.
There is a dissent, and it is awkward, because it comes from the paper this article leans on hardest later. Powell and colleagues record that the one study concluding errors are not a problem is Bonnie Nardi and James Miller's, whose interviewees "routinely track down errors before they can do any real harm" — and they discount it on method, because that conclusion rests on what developers said about themselves rather than on an audit of their sheets. Both halves belong on the record.
The second defect is structural, and the same ICFP paper quoted above names it: spreadsheets "lack the most fundamental mechanism that we use to control complexity: the ability to define re-usable abstractions." Everything the grid does well, it does by having no abstraction barrier. That is not a bug somebody can patch out; it is the same property, read from the other side.
An accident we inherited from paper
The word is the clue, and it predates the computer by decades. A spread sheet meant a grid of columns and rows in an accounting ledger — the usage is attested at least as early as 1906 — and the name comes from the physical thing: a spread across the facing pages of a bound ledger, or oversized analysis paper about twice the width of an ordinary page. Columns got letters and rows got numbers because that is how you tell a colleague where to look on a page you are both holding.
That is presentation. It was designed for humans reading paper, and it is very good at that. What happened next is the accident: when the ledger became software, the coordinate system came along, and a typesetting convention became the data model. B7 stopped being a way to point at a place on a page and started being the way a formula names a value.
An identity is what makes something the same thing over time, even as its properties change. A coordinate is where something currently sits. Conflating the two is the root of a large family of bugs — the same confusion that makes array indices unstable under insertion.
Everything that follows is downstream of that. When you sort rows, the notes stay where they are and the addresses move, so a formula that said B7 now means a different row's value — and it says nothing, because B7 is still a perfectly valid address. Nothing renders differently. The sheet looks exactly as trustworthy as it did before it became wrong.
What a formula should have pointed at
Before reading on, commit to an answer. The first row's total is a formula over that row's quantity and price. Sort the table by quantity — the row moves. What does the formula compute now?
The repair is to give every row, column, and cell a stable identity that outlives its position, and to make the coordinate a lens over that identity rather than the identity itself. A formula resolves to identities when it is admitted. Sorting then changes a view order, and no formula needs rewriting merely because rows moved.
This sounds like bookkeeping until you notice what it costs to get wrong and what it buys when right. Position-as-identity is why moving a row can silently retarget a reference. Identity-as-identity is why a selection can survive a sort, why undo can be a semantic operation rather than a diff of rendered cells, and — as it turns out — why two people can edit at once.
The catalog that collapsed
There is a way to check whether a rule like this is real, and it is not argument. It is counting how much work it deletes.
Every spreadsheet has a reference-transformation catalog: the table of what each form of reference does under each structural edit. Four notations — A1, $A1, A$1, $A$1 — under copy, fill, move, insert, delete and sort, plus what a deleted target does. That is where spreadsheet defects live, and the implementation plan for the workbook described here named it as the single largest risk in the project. Tedious rather than hard, and the tedium is what decides correctness.
The catalog is the spreadsheet equivalent of a conformance table: not an algorithm, but an exhaustive enumeration of cases whose only defense is that somebody wrote every row down and tested it.
Building it produced one row.
Sorting, reordering, moving, inserting and deleting appear nowhere in the finished code, because there is nothing for them to do: the reference names a subject, and none of those edits change which subject it is. Copy is the only survivor, because a copy means "the same shape somewhere else," and shape is a claim about coordinates rather than about identities. So the function that shifts a reference exists for exactly one caller, and the deleted-target row became a typed refusal rather than a rewrite.
The budgeted tedium was tedium the decision had already eliminated. That is the strongest evidence available that identity-over-position is load-bearing rather than tasteful: it did not make the catalog easier to write, it made most of the catalog not exist.
It happened a second time, one level up. A workbook has several sheets, and the obvious model gives each one its own coordinate space, with cross-sheet references as a separate mechanism spanning them — a reference that carries a sheet and a coordinate. Look closely and that is the original mistake wearing a different hat: the pair names a cell only relative to a grouping, and a grouping is exactly the sort of thing a reorganization changes.
The same substitution appears in filesystems. A path names a file relative to a directory tree; an inode names the file. Hard links and atomic renames work because the inode is the identity and the path is the lens.
So a sheet is a grouping over cells, not a space of its own, and identities are unique across the whole workbook. A reference already names one cell without saying which sheet holds it. Cross-sheet references then need no mechanism at all: the evaluator cannot tell that a boundary was crossed, because there is nothing in the reference that records one. `Ledger!A1` is a lens, exactly like `A1` — it says whose coordinates to read, and then it is gone.
Two things fall out that are worth more than the implementation convenience. Renaming a sheet touches no formula, because the name was never in the formula. And the same formula reads Ledger!A1 from one sheet and A1 from another, because "foreign" is a fact about where the reader is standing, not about the reference.
The dollar sign is an instruction
If copy is the one edit that acts on coordinates, then the author needs exactly one lever over it, and every spreadsheet already ships that lever: the $. Under the identity model its meaning becomes precise. A1 in a copied formula says "translate me — keep my shape relative to where the formula lands." $A$1 says "do not translate me." The dollar sign is not decoration on an address; it is a per-axis instruction to the single surviving coordinate transformation.
Spreadsheets call $A$1 an absolute reference and A1 a relative one, with the mixed forms $A1 and A$1 pinning one axis each. Microsoft's own reference guide describes the four forms; F4 cycles a reference through them while editing.
That precision forces a storage decision that is easy to get wrong, and this workbook got it wrong first. A dependency held (subject, lens) and nothing else — which reference the author wrote, A1 or $A$1, was not recorded, because for every operation except copy the two are indistinguishable. The formula evaluated identically. The sort survived identically. The defect surfaced only at the third hop: commit a formula, copy it, and a reference the author had pinned moved anyway, because the pin existed only in the editor's draft and the draft was gone. The repair widened the stored dependency to carry two anchor flags per axis — for a range, per corner of its normalized rectangle — so the instruction survives the trip through storage, through the wire bytes, and back out to the copy that finally consumes it.
The general lesson is worth lifting out of the spreadsheet. When one operation in a system consumes an attribute that every other operation ignores, that attribute will tend to fall out of the model, and its loss is invisible until the one consumer runs. The test that catches it is a round trip through the layer that forgot: write $A$1, commit, read the formula back. A sheet that answers A1 has discarded an instruction while preserving every value.
Positions are not operations
Here is where the same rule shows up again, one level down, and where building it taught me something the design document had not said out loud.
Two people editing one sheet is the normal case rather than the advanced one, and that has been the measured position since 1991. Bonnie Nardi and James Miller interviewed spreadsheet users at Hewlett-Packard Laboratories and reported, in their own emphasis, that "spreadsheet co-development is the rule, not the exception" (International Journal of Man-Machine Studies, 1991). Their explanation is a claim about the grid's shape: "the division of the spreadsheet into two distinct programming layers permits effective distribution of computational tasks across users with different levels of programming skill." One person owns the domain and the numbers, another writes the formulas, and the grid is what lets them divide the work without a meeting. A rewrite that ships a single-writer form has not merely dropped a feature; it has dissolved that division of labor.
Second on their list of observed cooperative activities: users "transfer domain knowledge via spreadsheet templates and the direct editing of spreadsheets." Nobody needs to be persuaded that a template can carry expertise. People have been doing it for thirty-five years, informally, with nothing checking the transfer.
Two people are looking at the same sheet. Both insert a row after row three. Each sends the other "insert at position four."
Apply mine, then theirs: my row lands at four, theirs lands at four and pushes mine down. Apply theirs, then mine: the mirror image. Same two edits, two different sheets. The operations do not commute, so the two people now disagree about what the document says, and no amount of careful merging afterwards recovers the intent — the information was lost when the edit was described as a position.
Two operations commute when applying them in either order gives the same result. Commutativity is what lets replicas exchange edits without agreeing on an order first — the property underneath conflict-free replicated data types. Learn more in “A comprehensive study of Convergent and Commutative Replicated Data Types.”
The fix is the same rule as before. An insertion must carry a stable key for where it goes, computed once against the state its author actually saw, rather than an index interpreted against whatever state it happens to arrive at. Give positions dense fractional keys — keys with the property that there is always room for another key strictly between any two — and insertion becomes commutative. Both rows survive, both people see the same order, and nobody had to be the server.
That is not a collaboration feature bolted onto a grid. It is the same sentence as before: identity, not position, applied to operations instead of to references.
There is a wrinkle worth knowing about, because it is easy to miss until something is actually built. Two people inserting into the same gap, each looking only at the neighbours they can see, compute the same key — the key is a function of those neighbours, and they agree about them. So keys alone leave a tie, and a tie is an ambiguity about order. The repair is small: order by the key first and by the participant's own stable identity second. Identity does the work twice, once to say where and once to break the tie.
Two workbooks, one document
The demonstration above is a model of the problem. Here is the mechanism itself, running, on a network that is trying to break it. The two grids below are both real workbooks — the same component as the figure at the top of the piece — over one document, joined by a simulated wire. You are both participants: type in either grid and the edit lands there immediately, joins that seat's pending run, and crosses the strip drawn under the grids. The colored outline with a name on it is the other participant's cursor, in that participant's own color; your own cursor keeps the ordinary accent in both grids.
You control the wire. The selector offers three of them. Fast delivers in 150–450 milliseconds and loses nothing. Lossy, the one the figure opens on, delivers in 150–1200 milliseconds and loses one delivery attempt in five. Hostile takes 300–2400 milliseconds and loses nearly half. Every delay and every loss is drawn from the seed beside the selector, so a run is reproducible: the same seed replays the same schedule, mark for mark, and "New schedule" moves to the next one. Nothing in the figure calls the platform's clock or its random number generator directly; both are capabilities the demonstration is handed, which is also how the tests replay a failing schedule.
Optimistic replication lets a replica apply its own edit at once and reconcile with its peers afterwards, instead of asking permission first. The delay you can see between the two grids is the window in which the replicas honestly disagree. Learn more in Saito and Shapiro's survey.
Watch the strip rather than the sheets for a moment. Each mark is one delivery attempt, travelling in its sender's color, from that sender's end toward the other. Because every attempt draws its own delay, two marks can cross: the second edit you made can arrive first. A mark that draws a loss stops where it failed and stays there as a small ×, and a resend re-enters from the sending end as a diamond rather than a dot — so a repair is legible as a repair. The counter under each name reads in flight, dropped, redelivered, and the indicator on the control strip says converged only when both sheets, compared cell by cell, actually agree.
Losing an operation would be a broken workbook, not a chaotic one, so the wire repairs what it drops. The repair is deliberately the simplest correct one: each seat keeps re-offering whatever is still pending until an exchange lands. A seat's pending run is its unacknowledged set — the exchange clears it exactly when it lands — so the repair needs no acknowledgment channel and no sequence numbers, and a resend that arrives after the exchange already landed changes nothing, because an exchange with nothing pending is a no-op. That last property is what makes reordering harmless at the transport layer, and it is the same idempotence the merge relies on above it.
Now the sheets. Edit both grids before either delivery lands — easy on Hostile — and the two runs are genuinely concurrent, exactly the situation that made position-carrying operations disagree. Nothing here carries a position. Each operation names the row and column subjects it touches, the merge puts both runs in one canonical order — the kind of operation, then the identity it names, then the participant — and both replicas compute that order independently and agree. That order is a property of the operations, not of the wire: it is computed from what each operation names, so no schedule of delays, drops, and resends can reach it. Arrival decides nothing, which you can now check by being genuinely unfair rather than politely so.
The same identity rule is why a structural edit on one side cannot corrupt the other side's work. Delete a row in one grid while typing into a different row in the other: the deletion names the removed row's subject and the write names its own, so the merge has no coordinates to confuse, in the same way the earlier sort had no references to retarget. And when the two of you genuinely collide — different values, one cell, one window — the merge does not pretend otherwise. The canonical order picks the same winner on both grids, and the notice line under each reports whose value was kept and whose was set aside, because a lost intent the loser was never shown is how a shared sheet stops being trusted.
And once more, in the renderer
The rule turns up a third time, in the least expected place.
Build the demonstration above as a widget and you will probably render it the obvious way: on every state change, throw away the controls and rebuild them from the current state. It is simple, it is easy to reason about, and it is wrong for a reason that has nothing to do with spreadsheets. Browser focus is attached to a node, not to a position in the markup. Destroy the button somebody is standing on and recreate an identical one in the same place, and their focus does not move with it — it falls back to the top of the document. Everything looks right. A mouse user notices nothing. A keyboard user is thrown to the start of the page every time they answer.
The fix is the sentence again: keep the node's identity and change its properties, rather than replacing it with something that merely looks the same. Three layers — references, operations, DOM nodes — and one rule. That is usually the sign that the rule is real rather than a convention someone chose.
Only the answers somebody asked for
The other reason the rewrite happens is scale, and scale in a spreadsheet usually means recalculation. A sheet that recomputes everything on every edit gets slower in proportion to how much work you have done in it, which is a cruel gradient: the more valuable the sheet, the worse it feels.
A dependency graph records which values are computed from which other values. Recomputing only a changed value's dependents — its cone — is what makes incremental evaluation proportional to the change rather than to the document.
It is also unnecessary, and has been unnecessary for longer than the personal computer has existed. Rene Pardo and Remy Landau built LANPAR — LANguage for Programming Arrays at Random — in the summer of 1969, for a Bell Canada budgeting problem, and its distinguishing feature was natural order calculation: you write the relationships in whatever order makes sense to you, and the machine works out the order it has to evaluate them in. Their patent, filed in August 1970, is blunt about the grievance it addresses — that until then "the programmer was forced to concern himself with the order in which the formulas of his program were executed by the computer."
A decade later, the spreadsheets that won the market — VisiCalc, SuperCalc, the first Multiplan — recalculated left to right and top to bottom, which is why a sheet with a forward reference had to be recalculated repeatedly until the numbers stopped moving. The good idea was not missing. It had been patented, shipped, and left behind.
Natural order calculation evaluates cells in dependency order rather than in reading order, so a formula may refer to a cell defined later. It is the same idea as topological ordering in a build system.
A million-cell workbook does not need to calculate a million cells to open. It needs to calculate what is on screen, what is being edited, what a screen reader is currently reading, and what those depend on. Everything else can wait until somebody asks.
Before reading on, commit to an answer. A sheet has thousands of rows, each with a formula, and you are looking at six of them. How many of those formulas have to run?
The count does not move because nothing about the unseen rows is cheaper — they are simply never asked for. This is worth separating from the usual framing, because "make it faster" and "make the cost proportional to the question" are different projects. The first is an optimization you can run out of. The second is a shape, and once the shape is right the sheet stops caring how large it gets.
Why the replacement always feels dead
The dependency graph is usually filed under performance. It is really what makes a spreadsheet feel alive, and that is the part the rewrite loses without ever deciding to.
A spreadsheet is reactive by construction. The graph is not a feature somebody scheduled; it is the only way the thing can work at all, so every value in the document is live for free. Change an input and everything downstream is simply correct, including the parts you were not looking at.
Now write the replacement. It has a database and it has forms, and a form is a request: fill it in, submit, wait, re-read. Nothing is downstream of anything, because there is no graph — there are handlers. Liveness in that architecture is a thing you build, one dependency at a time, by hand, and each one is somebody's ticket. So it doesn't get built. Not because anyone chose a dead interface, but because reactivity stopped being free the moment the graph was replaced by request handling.
That is why the rewrite so reliably feels worse in a way its authors find hard to name. The spreadsheet's recalculation was its interactivity. Throw away the dependency graph and you have not merely made it slower to update — you have made liveness a budget item.
The sheet as a component
Put the three together — stable identities, key-carrying operations, demand-driven calculation — and the choice the rewrite was supposed to resolve stops being a choice.
D8 into the box left of the formula bar and press Enter to jump. Nothing here is holding a coordinate.The headers come off the coordinate lens. The visible rows are a logarithmic lookup into the row axis rather than a scan, so the cost of showing a window does not grow with the sheet behind it. The keyboard map is a table separate from the machine it drives. And every cell is editable, because locking is a rule you add rather than a default you relax — a locked column is one carrying a rule that refuses, and it can therefore say which rule.
The obvious objection to a component is function parity: a real spreadsheet ships hundreds of worksheet functions, and a component that ships thirty is a toy. The Enron corpus answers that more cheaply than argument does. Felienne Hermans' account of the 16,189 unique spreadsheets recovered from that company's email reports that across all of them only 134 distinct functions appear, and roughly 75% of the sheets use only the top fifteen. Parity with the catalog is not the same requirement as parity with the work, and the gap between the two is where a small, well-chosen function set lives.
One keystroke, three meanings
The part of a spreadsheet that feels most like muscle memory — type =B2*, press an arrow, watch a reference appear — is a small machine with a sharp rule, and writing it down is what makes the behavior specifiable rather than folklore. While a cell is being edited, an arrow key means one of three things, and the mode decides which:
| mode | entered by | an arrow key |
|---|---|---|
| enter | starting to type into a cell | commits the draft and moves the cursor |
| point | typing =, or a caret after an operator | moves a second cursor that writes a reference |
| edit | F2, or opening the cell with a double-click | moves the text caret through the draft |
The rule that keeps this honest: point is derived, not remembered. The editor does not carry a flag saying "we are pointing now." It looks at the draft and the caret — is the character before the caret one a reference could legally follow? — and the mode falls out. A remembered flag drifts from the text it describes; a derived one cannot. Edit is the single sticky mode, because F4's cousin F2 is a deliberate statement that the arrows belong to the text, and a deliberate statement should not evaporate on the next keystroke.
Point mode also explains why the sheet outlines cells while a formula is half-typed. The reference under construction is a pair of subjects — an anchor and a moving head — held exactly the way the selection holds its cells, and the outline is that pair projected back onto the grid. The text =A2:A4 growing in the draft and the dashed rectangle growing on the sheet are two renderings of one value, which is why they cannot disagree.
One more small surface carries a load-bearing distinction: the formula bar shows a computed cell's source while the grid shows its result. Those are two honest readings of one stored value, and a sheet that shows only the result has made the formula unreachable — the reader can see 20 and has no path back to the =B2*C2 that produced it, which is how an accidental keystroke erases work nobody was shown.
If a workbook has a real semantic core, then a table, a data grid, an admin index, and a lightweight sheet are all the same thing with different capabilities switched off. An application can embed a workbook view bounded to the columns and the editing policy it needs, and the people using it keep the interactivity and the collaboration they had. The engineering team gets its schema and its scale. Nobody keeps a second spreadsheet on the side, because nothing was taken away.
The obvious objection is that you cannot always embed. Some data belongs to a system you do not own, and the sheet has to meet it somewhere. The tempting answer is to synchronize the two — and it is the wrong one, because a sync loop does not remove the second source of truth. It automates the reconciliation nobody owned, and turns visible disagreement into silent drift.
The honest shape at a boundary you cannot dissolve is a projection with a direction. The workbook reads the other system as a bounded, dated observation rather than as a peer to be merged with, and writing back is a proposal against the owning system that may be refused. Refusal is the load-bearing part. An adapter obliged to produce a write will always produce one, including when the other schema cannot represent what the sheet meant — so an adapter that cannot refuse is not an integration, it is a divergence generator with good manners.
That is the actual claim: the spreadsheet keeps winning because it is the requirement, and the way to stop losing to it is to stop trying to replace it.
Where the record argues back
A dissection that hides its counterexamples is a sales pitch. Four things in the verified record cut against the argument above. Each is stated here at full strength rather than in a footnote.
The incumbent answered the abstraction problem the other way
A language is Turing-complete when it can express every computation any computer can. The price is that no procedure can decide, in general, whether one of its programs will ever finish. Learn more.
The counterweight earlier named the grid's structural defect on Peyton Jones, Blackwell and Burnett's authority: no reusable abstractions. On 2021-01-25 Microsoft Research announced its answer. The LAMBDA worksheet function, authored by Andy Gordon and the same Simon Peyton Jones, lets an author name a function in the formula language and call it, including recursively. The announcement does not hedge: "With LAMBDA, Excel has become Turing-complete. You can now, in principle, write any computation in the Excel formula language" (Microsoft Research Blog).
That runs against the direction this piece has been building toward. A sheet that is also an embeddable component with rules attached wants those rules to be decidable: a template installed from a stranger should be answerable in advance about what it can refuse and what judging one edit costs, and neither question has an answer over a language in which a guard may fail to terminate. So the honest position is that the dominant vendor, advised by one of the researchers whose diagnosis this piece adopts, made the opposite call and published it as progress. A constrained rule language is a position to be argued rather than the obvious default.
The distinction that survives the concession is narrow, and it is worth having exactly because it is narrow. LAMBDA extends the formula language, whose author writes it, runs it in their own session, and bears its costs personally. A template's rules are received: somebody else's grammar judges your edits, on your data, on every keystroke. Expressiveness serves an author; decidability serves a reader. No study tests whether that distinction holds up in practice, and this piece does not claim one does.
Feasibility was settled twenty years ago, and nobody adopted it
Martin Erwig's group at Oregon State University built the constrained-template idea two decades before this article. Gencel supplies a template language, a table calculus, and a type system (Journal of Functional Programming, 2006); ClassSheets supplies an object-oriented template notation from which a spreadsheet application is generated (ASE 2005). The project's own claim is stronger than anything argued above: a user may modify a generated sheet "only in the anticipated ways, so that spreadsheets evolving from templates will provably never contain any reference, range, or type errors" (the Gencel project page).
The line is intellectually mature and commercially invisible, and that reorders the problem this article is really facing. The open question is not whether a constrained grid can be built correctly — that was answered, with proofs, in 2006. It is whether a domain expert will accept the constraint. No evidence of production adoption for those systems was located, and no survey of what became of them was located either — which is an absence of a positive finding rather than a measured failure, and the difference matters. One claim must not be made in either direction: Gencel's guarantee is a type-system guarantee about three error classes in generated sheets, and no research establishes that a template reduces the errors real people make on real tasks.
A quarter of the shadow systems had no expressiveness excuse
The argument above rests on misfit — the sheet exists because the application cannot express the work. One study inventoried 99 shadow systems across three organizations and classified each by whether the enterprise system already held its data and could already do its job (Systems, 2016). Inside their grey zone the authors report a one-directional finding that supports the argument: they found sheets whose data the enterprise system already held and whose function it could not provide, and no instances of the reverse.
Then the number that does not support it. Twenty-seven of the 99 were fully dependent: the enterprise system could provide every function of the shadow system and already held its data. For roughly a quarter of the instances the application could express the work, and somebody built the sheet anyway. Access, permission, latency, habit, and not knowing what the application already does are the remaining pool of explanations, and no source separates them. A product that fixes only expressiveness leaves that quarter exactly where it found it.
Somebody already paid to put the grid beside the application
Revealed preference is the rule that what a buyer pays for is better evidence of what they want than what they say they want. Learn more.
The strongest market evidence for the demand this article describes is also a caution about the remedy. Salesforce acquired Quip — a product combining documents, spreadsheets, task lists and team chat — in August 2016, announcing consideration of approximately $582 million in stock and recording $412.0 million, of which $357.6 million was goodwill. It then spent years wiring live, writable CRM records into those documents. Companies do not pay that for something their users do not want.
Salesforce is now retiring it. Its own help documentation states that new paid, free and trial Quip accounts stopped being available on 2026-02-17, and that "Quip End of Renewal will be effective March 1, 2027", with the use cases directed to Slack and Agentforce Sales (Salesforce Help). Salesforce never disclosed a Quip revenue, seat or customer figure, and recorded only that Quip revenue was "not significant" in fiscal 2019 and 2020. The shape repeats elsewhere: Google built the structured grid as Tables, and its own support page says "the product was turned down on December 16, 2025" (Tables Help Center); Airtable and Rows both sold a spreadsheet-shaped pitch and both dropped that framing on the way up-market.
Three disciplines apply to those two paragraphs, and they are why the paragraphs sit here rather than in the argument.
First, Salesforce did not grow as a grid. The word "spreadsheet" appears zero times in its 2003 Form S-1 and zero times in its FY2008 Form 10-K; the filings credit multi-tenant delivery and, later, a metadata platform. Quip arrives a decade after the growth anyone would need it to explain.
Second, Salesforce has a formula language, and any claim that it does not is false. Its own training material compares writing one to "creating a formula in a spreadsheet cell". The defensible statement is about shape: a formula field is declared once per field on an object, is scoped to the record and its relations, and is read-only — "these fields are defined by a formula, which is an algorithm that derives its value from other fields, expressions, or values" (Salesforce object reference). That there is no user-authored cell-to-cell dependency graph follows from those documented semantics — it is an inference from what the documentation describes, not a denial the documentation makes, and it is marked as an inference here for that reason.
Third, and most uncomfortably: none of this is evidence that the answer in this article works. "A grid beside the schema was retired, therefore a grid that is the schema succeeds" is a non-sequitur. Quip's end state removes one rival explanation and supplies no support for the alternative, because nobody has shipped the alternative at commercial scale. The shadow-systems literature's own usual remedy runs the other way as well: absorb the shadow system into the system of record, or govern it where it stands — rather than hand the domain expert authority over the application's shape. That literature diagnoses the disease this piece is treating and prescribes a different medicine.
What survives all three is one modest sentence, and this piece claims nothing past it: people keep the grid beside the application, four research communities have documented that for forty years, and a mature vendor paid heavily to bring the grid inside and is walking it back out.
Lessons
- A spreadsheet is a specification written by the people who understand the domain. A rewrite that discards its properties is discarding requirements, and users notice.
- The grid's coordinates are inherited page layout. Treating a presentation convention as a data model is what lets sorting silently retarget a formula.
- Identity over position is one rule with four applications: references resolve to identities, operations carry keys rather than indices, sheets group cells rather than owning coordinate spaces, and rendered controls keep their node identity rather than being rebuilt. The second is what makes concurrent editing converge; the third is what makes cross-sheet references cost nothing; the fourth is what keeps a keyboard user from losing their place.
- A rule is load-bearing when it deletes work rather than organizing it. Twice here the expected mechanism turned out not to be needed at all — the reference-rewrite catalog, then cross-sheet addressing — and in both cases the reason was the same: the thing that would have needed fixing was never written down.
- Dense keys settle where, but not who. Two participants looking at the same neighbours compute the same key, so a stable participant identity has to break the tie — otherwise the order is ambiguous exactly when two people act at once.
- Recomputation should be proportional to the change, not to the document. Demand decides what is worth computing.
- The dependency graph is not only a performance mechanism; it is what makes a sheet live. Replace it with forms and handlers and liveness stops being free — it becomes a budget item, which is why the replacement feels dead without anyone having chosen that.
- Integrating two systems by synchronizing them does not remove the two-sources-of-truth problem, it hides it. Either embed one view over one truth, or make the boundary declare its direction and be allowed to refuse. An adapter that cannot refuse will always write something, and the two systems drift.
- When one operation consumes an attribute every other operation ignores, the attribute tends to fall out of the model — and the loss is invisible until the one consumer runs. The
$in a reference is the spreadsheet's instance: only copy reads it, so only a copy-after-commit round trip can prove it survived. - An editor's modes should be derived from the text, not remembered beside it. A remembered flag drifts from what it describes; a derived one cannot. The one sticky mode is the one a person asked for by name.
- The grid's virtue and its defect are one property read from two sides. It never tells you no because it has no abstraction barrier, and having no abstraction barrier is exactly what it lacks.
- Quote the error literature with its caveats or not at all. 94% of audited operational spreadsheets contained an error, and the review reporting that figure also reports that most of its sources never said how they defined or found one, and that essentially no research measures what the errors cost.
- Feasibility was never the open question. A constrained template with proofs existed in 2006 and went nowhere commercially, so the risk worth arguing about is whether a domain expert accepts the constraint, not whether the constraint can be built.
- What a company pays for is evidence about demand, and never evidence about the remedy. A grid beside the schema being retired says nothing about whether a grid that is the schema works, and treating the first as support for the second is the error to watch for in your own arguments as much as in somebody else's.
- "Embeddable" is a consequence of getting the core right, not a feature added later.
Practice
The checkpoints above are recognition; these are production — work them where the model has to come out of your hands:
- Excavation. Find a spreadsheet at your organization that an application already replaced. List what the sheet does that the application cannot. That list is the specification the rewrite dropped, written by the people who understood the domain.
- Diagnosis. Take a sheet with formulas spanning rows and sort it by a column. Before looking, predict which formulas still mean what they meant. Check. Then explain which of the two accounts of a reference your tool implements.
- Measurement. Estimate how many cells your largest sheet recomputes when you change one input. Then work out how many needed to be recomputed. The ratio is what demand-driven evaluation would recover, and it is usually larger than people guess.
- Design. Two people, one sheet, both insert a row in the same place at the same time. Write down what your tool does, what it discarded, and what on screen would have told the loser.
Priority claims in early spreadsheet history are contested, and this piece makes none. It claims only what the patent and the record establish: that natural order calculation existed, was patented, and was not what the market-winning spreadsheets shipped a decade later.
References
- Rene K. Pardo and Remy Landau. “Process and apparatus for converting a source program into an object program.” US Patent 4,398,249, 1983. — natural order calculation; filed August 1970, granted August 1983, and the source of the epigraph
- “Spreadsheet.” Wikipedia. — the 1906 attestation of spread sheet as an accounting grid, the facing-page origin of the name, and LANPAR versus the left-to-right recalculation of VisiCalc, SuperCalc and early Multiplan
- Marc Shapiro et al.. “A comprehensive study of Convergent and Commutative Replicated Data Types.” INRIA, 2011. — commutativity as the property that lets concurrent insertion converge without a coordinator
- Simon Peyton Jones, Alan Blackwell and Margaret Burnett. “A User-Centred Approach to Functions in Excel.” ICFP 2003, 2003. — the usability account of the grid's commercial success, and its structural lack of reusable abstractions
- Scaffidi, Shaw and Myers. “Estimating the Numbers of End Users and End User Programmers.” VL/HCC 2005, 2005. — the population estimate, carried with the authors' own lower-bound and diffusion caveats and their formula-usage findings
- Bonnie A. Nardi and James R. Miller. “Twinkling lights and nested loops: distributed problem solving and spreadsheet development.” International Journal of Man-Machine Studies 34(2), 1991. — co-development as the rule, the two programming layers, and domain knowledge transferred through templates
- Stephen G. Powell, Kenneth R. Baker and Barry Lawson. “A critical review of the literature on spreadsheet errors.” Decision Support Systems 46(1), 2008. — the 94% and 5.2% figures, the three objections that must travel with them, and the absence of any research on what errors cost
- Felienne Hermans. “Enron's spreadsheets.” felienne.com, 2015. — 16,189 unique spreadsheets, 134 distinct functions across all of them, about 75% using only the top fifteen
- Andy Gordon and Simon Peyton Jones. “LAMBDA: The ultimate Excel worksheet function.” Microsoft Research Blog, 2021. — Excel's formula language becoming Turing-complete, announced 2021-01-25; the URL's spelling of "ultimatae" is the publisher's own
- Erwig, Abraham, Cooperstein and Kollmansberger. “Gencel: a program generator for correct spreadsheets.” Journal of Functional Programming 16(3), 2006. — a template language, a table calculus and a type system that rule out reference, range and type errors by construction
- Engels and Erwig. “ClassSheets: automatic generation of spreadsheet applications from object-oriented specifications.” ASE 2005, 2005. — the object-oriented template notation from which a spreadsheet application is generated
- Steven Alter. “Theory of Workarounds.” Communications of the AIS 34, Article 55, 2014. — the workaround typology, inadequate functionality first among its types, and the five-dollar purchase-order example
- Diane Strong and Olga Volkoff. “Understanding Organization–Enterprise System Fit: A Path to Theorizing the Information Technology Artifact.” MIS Quarterly 34(4), 2010. — misfit as a premise of packaged software, with usability one of six misfit domains
- Sandy Behrens and Wasana Sedera. “Why Do Shadow Systems Exist after an ERP Implementation? Lessons from a Case Study.” PACIS 2004, 2004. — the coded causes of shadow systems, in which interface usability is not a category
- Melanie Huber, Stephan Zimmermann, Christopher Rentrop and Carsten Felden. “The Relation of Shadow Systems and ERP Systems — Insights from a Multiple-Case Study.” Systems 4(1), 2016. — 99 shadow systems inventoried, the one-directional grey-zone finding, and the 27 that were fully dependent
- “Quip Retirement (article 005299603).” Salesforce Help, 2026. — new accounts closed 2026-02-17, end of renewal 2027-03-01, use cases directed to Slack and Agentforce Sales
- salesforce.com, inc.. “Form S-1.” U.S. Securities and Exchange Commission, 2003. — the multi-tenant, anti-packaged-software positioning, in which the word spreadsheet does not appear
- “Tables Beta Update and FAQ.” Google Tables Help Center, 2025. — Google's own statement that Tables was turned down on 2025-12-16
How to cite
Mangalapilly, Y. J. (2026, August). The Spreadsheet Always Wins. Saṃhitā Notes. https://yesudeep.com/blog/the-spreadsheet-always-wins/ @online{mangalapilly2026the,
author = {Yesudeep Jose Mangalapilly},
title = {The Spreadsheet Always Wins},
journal = {Sa\d{m}hit\=a Notes},
year = {2026},
month = {August},
url = {https://yesudeep.com/blog/the-spreadsheet-always-wins/},
urldate = {2026-08-13},
} Yesudeep Jose Mangalapilly. “The Spreadsheet Always Wins.” Saṃhitā Notes, 2026. https://yesudeep.com/blog/the-spreadsheet-always-wins/. TY - ELEC
AU - Mangalapilly, Yesudeep Jose
TI - The Spreadsheet Always Wins
T2 - Saṃhitā Notes
PY - 2026
UR - https://yesudeep.com/blog/the-spreadsheet-always-wins/
Y2 - 2026-08-13
ER - Webmentions
Annotations
Thank you — your note is held for review and will appear once approved.
Thank you — your note is published.
Please sign in below to leave a note.
