Socrates in a scriptorium, standing beside a long row of monks all copying from one single book on a central lectern. He is looking at the one book, not at the row. Warm editorial illustration style, burnished gold and brown tones.

How Many of Them Were the Same One?

engineering-culturearchitecturelanguageconsultingcognitive-biases

The applications had been written by different people over more than a decade, and it showed. Some were vanilla PHP with the logic and the markup living in the same file. A few had been started on Yii2 and abandoned somewhere in the middle, so the framework was present but not in charge. jQuery was everywhere. One of them rested on a library whose last release was thirteen years old, sitting at the bottom of the stack, unmaintained since before anyone currently on the project had been hired.

The job was to standardize. Nobody was going to pay to rewrite everything, so the goal was narrower: give the next ten years of work one shape instead of nine.

The choice was components rather than a framework. Laminas components, selected one at a time for what each one actually had to do, wired into a bootstrap template that new work would start from. Not the full MVC stack. The parts. An estate like that cannot be moved into a framework, because a framework wants the entrypoint, the container, the routing, the configuration and the database layer, and accepting it means rewriting each application around it rather than modernizing it where it stands. Components let the old code stay where it was and get replaced one layer at a time.

Two applications were rebuilt that way. Then a meeting happened.

Why hadn’t we gone with Laravel? Laravel is the de-facto standard. It is the most used. Everybody knows it.

Nobody in that room had ever written a single line of Laravel in their life.

What were they actually asking?

Clients ask this constantly, in a form so ordinary it never gets inspected. What are the best practices for this kind of thing?

The phrase does something strange if you slow down on it. Best is a superlative, and a superlative admits exactly one. Practices is plural. So if there are several, which one is best? And if one of them is best, what is the plural doing there?

The phrase contradicts itself inside its own grammar. It has been worn so smooth that nobody hears it anymore, including the people saying it. They say the plural and they mean the singular. They want the one.

And is the question being asked the question that needs answering? What is most used in the field? What do other people do? One of those is a question about quality and the other is a headcount, and only one of them was actually spoken out loud.

When did those two become the same question? Or do they only look the same on the occasions when the answer happens to be the same?

How do you prove one book was copied from another?

There is a discipline that has spent two centuries on exactly this problem. A text from antiquity survives only through copies, the original is long gone, the copies disagree with each other, and somebody has to reconstruct what the lost original said. Textual criticism. Its central method builds a family tree of the surviving manuscripts, a stemma, and works backwards up the branches toward the thing nobody can read anymore.

The counterintuitive part is which evidence counts.

Agreement on correct readings is worth nothing. Two scribes working in different centuries can both copy a passage correctly without either one having seen the other’s work, because correctness is reachable independently. Getting it right leaves no fingerprint. Everyone who is careful arrives in the same place, and arriving in the same place proves only that they were careful.

What proves descent is a shared mistake. The discipline separates errors that arose once, which it calls monogenetic, from errors that could plausibly have arisen independently more than once. Only the first kind is evidence. An identical, specific, unlikely blunder sitting in two manuscripts means one descends from the other, or both descend from a parent that already had it.

The evidence of lineage is never the part that is right.

What do you do with a copy?

Once descent is established, the method performs an operation with no equivalent in any engineering meeting anyone has ever sat through. It is called eliminatio codicum descriptorum, the elimination of copied manuscripts. If manuscript B can be shown to descend from manuscript A, and A still survives, B is struck from the record entirely.

B might be beautiful, careful and complete, and it is still struck, because it is not a witness. It carries no information that A does not already carry.

Twelve manuscripts descending from one parent are one witness and eleven photocopies.

So a count is worth something only after that operation has been run on it. Who has ever run it on “everyone does it”? When somebody says a hundred thousand teams use this, how many of that hundred thousand reasoned their way there? How many arrived because it was what the tutorial used, what the last job used, what the agency template shipped with, what the model suggested at half past four in the afternoon?

And which of those numbers was the one being quoted in the meeting?

Whose parts is the standard made of?

Laravel’s composer.json is a public file. In version 11 the require block lists forty dependencies. Twelve of them are Symfony components: http-foundation, http-kernel, routing, console, finder, process, mailer, mime, error-handler, var-dumper, uid, and a polyfill.

The de-facto standard is a composition of components maintained by somebody else.

This does not make Laravel worse. Composing well-maintained components is a good way to build a framework, and it is the exact argument that had just been made in that room and dismissed. The position being waved away as obscure was the position the standard rests on.

Their argument, followed one generation up its own family tree, arrives at the thing it was arguing against.

Where do these names come from?

Laminas is the plural of lamina, a thin layer. The project chose it to mean components you can compose or layer into any application. The name describes the method, which is the reason the name exists.

Zend is Zeev and Andi. In 1997 Zeev Suraski and Andi Gutmans rewrote the parser behind Rasmus Lerdorf’s PHP-FI, and the result shipped as PHP 3. In 1998 they redesigned it completely, called it the Zend Engine, and PHP 4 was built on top of it. Every application in that estate, the vanilla ones, the half-Yii2 ones, and any Laravel that might have replaced them, executes inside the thing those two wrote.

Now the caveat, because the alternative is committing the error this whole piece is complaining about. Zend Framework was a separate product from the same company, not the engine itself, and in 2019 Rogue Wave transferred it to the Linux Foundation, where Zend\ became Laminas\. A shared surname is corporate genealogy. It is not a technical argument, and treating it as one would be the same sloppiness under examination here.

The map of the field in that room was still upside down. The choice being called unknown sat nearer the origin of the language than the choice being called standard.

Where does the analogy break?

Here, and it does not get rescued.

Stemmatics is contested inside its own discipline. The common-error method has a known structural defect that produces two-branch family trees almost every time, whatever the real history was, and the logic of eliminatio itself has been challenged in print. It is a powerful instrument and a disputed one. Reaching for it as though it were arithmetic would be borrowing an authority it does not have.

The larger break is simpler. A manuscript and a framework are not the same kind of object, because a copy of a manuscript adds nothing and a user of a framework adds a great deal. A hundred thousand teams on Laravel means bugs found, edge cases documented, security reports filed, packages published, tutorials written, and developers available to hire next week. In a scriptorium the copies degrade the text. Out here, the copies improve it.

So popularity is a real engineering property, not merely a rhetorical one. The count is not nothing.

Which makes the position uncomfortable rather than clever. If the argument in that meeting was bad as stated, was there a good version of it underneath that nobody present could reach?

What were they actually afraid of?

A bespoke bootstrap template is a framework somebody now owns. No documentation site. No external maintainers. No answers waiting on the internet at two in the morning. Every property that made it correct, the flexibility, the fit to that exact scope, the freedom from a vendor’s opinions, is the same property that makes it unteachable to anyone who was not in the conversation where it was designed.

And in an organization of that kind, the supplier changes. That is not a risk, it is a schedule. The next one arrives fluent in the standard and illiterate in yours.

And how much of what you built this year outlives you leaving? Not the code, which will keep running without you. The reasons for it.

They said everyone uses Laravel. What they were unable to say was that they could not staff this one.

Their evidence was a headcount, and a headcount settles nothing about whether an architecture is correct. But when did anyone in that room say correctness was the worry?

Hiring is not a question about correctness. It is a supply question, and for a supply question a headcount is the right evidence, gathered from the right place, pointed at the right thing.

They were counting copies to answer the one question where counting copies works. Did they just thought they were answering a different one?

What did the walkout prove?

The reply took nine words. “If you want to go with Laravel, go for it. But I’m out.”

That sentence ends a meeting. It also demonstrates, in front of everyone, the precise thing nobody in the room had been able to name. The argument for the components lived in one head. When the head leaves the building, what is left standing in the corridor?

Whether the reasoning was defensible and whether it was the strongest available version of itself are two different questions, and only the first one was ever put on the table. Here is the second: the same argument aimed at Symfony components rather than Laminas would have bought identical properties with a contributor base and a hiring pool several times the size. Same reasoning. Better answer. It was not the one on the table.

De facto. In fact. It exists in opposition to de jure, by right, and it has always marked the difference between what holds and what ought to hold. The phrase reached for to say this one is correct states, in its own two words, that correctness is not the claim being made.

They heard authority in it. It is a confession, and it is right there in the Latin.

So when the well-reasoned answer arrives with a population of one and the alternative arrives with a hundred thousand, is anyone in that room comparing two arguments? Or is it an argument against a census, with only one of the two verifiable before lunch?

When you refuse the majority answer, what exactly are you asking them to trust? The reasoning, or you?

And if it was the reasoning, why did it leave the room when you did?