Vico, Descartes, and decay of knowledge in software.

This is the second post in the series dedicated to ontologies in systems engineering:

  1. Perdurantism in systems engineering standards
  2. Vico, Descartes, and decay of knowledge in software

Making is knowing, it makes things intelligible. This is the foundation of epistemology of the Napolitan philosopher Giambattista Vico, and it explains why we lose the knowledge of software faster than it decays technically. I am overviewing Vico's philosophy as a system/software engineer, highlighting connections with our daily work, and raising concerns about AI code generation.

TLDR

  1. Software decays epistemically before it decays technically. The code still runs, but no one remembers why it runs that way – why that ugly function has ten arguments, why that branch exists, why that test does something weird. The knowledge vanished while the code kept working.
  2. Save your mistakes. When you make a decision, write down what you didn’t do. "We chose A over B,C,D because…" Without the rejected paths, the choice is a mystery for the future you as well as for others.
  3. Read old code like a detective. Before you refactor, ask: what made this sensible six months ago? You’ll either learn something or earn the right to rewrite.
  4. An LLM cannot give you a genuine rationale (it has no intentions). You must force agents to produce a trace of decisions and alternatives that a human can validate. Otherwise, you’re accumulating unintelligible artifacts.

Lost rationale

"What I cannot create, I do not understand"

– quote found on Richard Feynman's blackboard at the time of his death in 1988

We, who proudly wear the mental scars of engineering a large project, who have seen code creatures bizarre and unthinkable, who slew dragons and learned to kill hydras without cutting their necks, who grew weary and wise and know when not to start a fight and just let the beast remain in their cave, to us I address this lamentation. For we know what it is like to tend to our own work from months ago, trying to figure out its grand design. For we understand that there is something we lose when we complete the act of making. The cord is severed, and the most intimate connection between the maker and their creation disappears.

While I'm making, I know my decisions. Some pieces accidentally fall to the right places, but others I am placing deliberately. I name variables, functions, types; I carve up interfaces; I structure the types; I choose or create algorithms; I use specific languages and tools. All these moments will be lost in time. Another day comes and I stare back at my work in disbelief. You must be joking, Mr. So-and-so, this function has 10 arguments? Don't you know anything about design?

But I glimpse at my scars and I know better, and I do not touch it. Otherwise I am likely spending the rest of the day trying to fix it just to rediscover that, because of some contextual reason, this ugly monster of a function was the lesser evil in a freak zoo. If I'm lucky, the context has changed enough since that time: some dependencies or hardware updated, some compiler bug fixed. Then I can properly rewrite the code. Good for the codebase, bad for me, as it provides an intermittent reward to my risky behavior. My code winks back after a facelift. Here's another type which clearly does too much work, how about we decompose it?

The fever intensifies when I touch other people's work, but me from a year ago and my colleague from yesterday aren't that different. The cause is still the lost rationale. If I don't understand why this function was made with 10 arguments, I don't really know it. And so I attempt to rediscover this lost knowledge, studying the context and inferring the missing bits. I recover some scraps of rationale, and I should be content with it.

Old code may look ugly, dumb, complex but the real problem is that it is not intelligible, because its causal history is gone1. Sometimes it is not ugly, but situated code, carrying scars from real contact with the world, a platypus growing a beak because that was its best shot at survival. That function with 10 arguments, it was also chosen among a few alternative options, and likely for a good reason. Maybe grouping the arguments into structural types or decomposing the function would hit the performance on a specific version of compiler or runtimes, or trigger some compiler bug, or destroy interoperability with some weird 3rd party module. I only wish someone wrote that somewhere.

Struggle of makers

When we were finishing a semester course in Modern Philosophy, our teacher, Michał Kozłowski, chose "The New Science" by Giambattista Vico as the final text. Vico, a XVIII century Neapolitan professor of rhetoric, is a rather niche read for philosophers, and a totally unknown character for engineers. Professor Kozłowski was barely holding his excitement: "This is a very different kind of philosophy, unlike anything we've read so far." So far, we've had read a diverse selection: from Bruno, Descartes, Spinoza, to Berkeley, Hobbes, and Rousseau. Intriguing.

And he was right – it was unlike anything that we've read of that time. My first pass at Vico got me really confused, but one thing resonated with me in Latin words: Verum esse ipsum factum, The truth is the made. The maker really knows what they did. Understanding a man-made thing is understanding its history and the rationale behind it.

These words ring true to any engineer, let alone a software one. Code is among the most Vichean artifacts humans produce: artificial, linguistic, historical, institutional, and made by a collective rather than individuals. Modern software moves faster than a bullet and gets birthed to live on a life support of programmers blood. It is a pure human thought implanted into an operating machine, all man-made – or it was, before the overwhelming rise of LLMs.

vico.jpg
Figure 1: Giambattista Vico himself

Vico is a paragon of a longstanding Maker's Knowledge tradition2, as a scholar Maurizio Esposito puts it. This millenia old tradition connects thinkers that associate knowledge of things with making them. So what is so special about Vico?

As I kept reading Vico, and about Vico, Verum factum revealed itself as more than a trivial "Dude, made things have history of making!" Rather, it is a foundational principle of Vico's epistemology, a bit like Cartesian Cogito ergo sum, and with far reaching implications. My obsessive nature took the bait and so I began a journey. The most important works related to Verum Factum are:

  • On the study methods of our time (De nostri temporis studiorum ratione, 1708)
  • On the most ancient wisdom of the Italians (De antiquissima Italorum sapientia, 1710)
  • The New Science (La Scienza Nuova, 1725)

The first steps, however, led me to the familiar land of Descartes.

Cartesian metaphysics

Vico contrasts with Cartesian project so much that some labeled him a counter-Enlightenment figure. Scandalous, given Vico is very much an ally of rationality and science. For example, in On the study methods of our time (De nostri temporis studiorum ratione) he explicitly praises the progress achieved thanks to advances in geometry and physics, and the value of Cartesian method (he calls it the critical method), for example, the application of algebraic methods in geometry. It solved some problems that turned out too hard for "synthetic", Euclidean geometry.

descartes.jpg
Figure 2: René Descartes

What Vico opposes is Cartesian dogmatism, which advertises the Cartesian approach as the only possible, and universal, metaphysical foundation of the true knowledge. Vico argues that the critical method is essentially incomplete, not suitable for domains like medicine, arts, humanities. He also proposes an alternative – the maker's knowledge approach manifested in Verum Factum principle. Let me first recap what exactly Vico critiques.

Foundation for sciences

Cartesian project aimed at providing reliable foundations of sciences – that is, metaphysics. Sciences require metaphysics to define their subjects, so metaphysics must be rock solid.

In Meditations on First Philosophy, Descartes builds metaphysics as follows:

  1. He starts from a skeptical stance of radical doubt, which treats everything uncertain as if it were false until proven otherwise.
  2. Descartes can doubt everything, but he can not doubt that he exists. The very act of doubting is a sign of something happening, so something exists. Descartes concludes that "the thinker" exists3. This is the cogito argument.
  3. Then, through a rather convoluted argument, at times reminiscent of Anselm's ontological proof of God's existence, Descartes proves that God exists and is benevolent.
  4. God gave us cognitive faculties, and in virtue of his benevolence he does not want us to be deceived. Therefore, as long as we use our minds correctly, they will arrive at the correct conclusions – God makes good stuff.
  5. How to use our minds correctly? We have to perceive our ideas clearly and distinctly. For Descartes, this is criterion of truth.

So, metaphysics rests on cogito, God as a guarantee of adequacy for our mental machinery, and reconstruction of the knowledge suspended during the radical doubt phase.

The clearest ideas are, of course, mathematical. Cartesian ego, detached from everything of the material world, can prove theorems just fine.

Unlike abstract mathematics, science has to deal with the material world, which is what exactly? In the famous wax argument from the second meditation, Descartes strips away all noisy signals from the senses – color, warmth, smell – until only one property remained: extension.

So, fundamentally, matter is simply stuff that takes up space, res extensa. That idea seemed clear and distinct enough, so it had to be true. It follows that the properties of bodies are geometric-ish, and science can be done with the precision of mathematics.

I am gladly engaging in Cartesian-flavored fantasies about software, imagining it as something with clean abstractions, implementing coherent formal models, with total specifications, no ad-hoc mess. After all, software is a product of the mind, substrate-independent, like mathematics. Such dreams are most pronounced in the mathematician-adjacent tribe who praises formal verification, abstract programming language theory, elaborated static typing to enforce correctness universally and ahead of execution. But real systems are large and complex, historical, contingent, patched, negotiated, and path-dependent, defying clean categorization and modeling.

Certainty and universality

Certainty is a key concept for Descartes. He sees ideal knowledge as universal, eternal, objective. Concrete, situated knowledge is unstable and often subjective. In opposition to it, Descartes strips away everything subjective by refining an imaginary ego disconnected from anything physical, a pure mind capable of clear and distinct thought.

The resulting framework aims to be devoid of anything opinionated. From one viewpoint, it is a victory: normally, humans disagree because they perceive the world differently, so a Cartesian framework allows people of different backgrounds and persuasions to discuss questions and converge on answers. This comes with a price: a Cartesian ego, cut from material world, does not have a clear path to know anything beyond itself.

Cartesian framework throws a situated, concrete knowledge into exile. The ten-argument function violates a general rule in any interface design textbook. History may reveal that it preserved ABI compatibility, avoided allocations, worked around a compiler bug, matched generated code, or protected a hot path. Can any clear, distinct theory account for all such situations? A critique ignorant of the context may be clear, distinct, and wrong.

Vico against Cartesian dogma

The influence of Descartes was such that in the centuries after him most thinkers followed his road: the clear and distinct ideas, the method of radical doubt, the mind detached from the mess of the body and the world. Not a perfect road, and there was always reasonable critique of it, but the alternatives were few and less attractive. Vico, too, made his critical move, but he didn't reject Descartes wholesale – he was too good a thinker for that. He simply pointed out that the Cartesian method, for all its power, has no exclusive claim on knowledge, and certainly was not the best method for understanding the things humans actually make and do. What follows is Vico's case against the dogma.

Radical doubt and certainty

The Cartesian journey starts with a radical doubt which arrives to cogito. The purpose of cogito is to provide a skeptic-proof foundation for metaphysics, and then, transitively, sciences.

First, Vico believes in two distinct modes of cognition: consciousness (coscienza), grounded in basic awareness of having a feeling, and causal knowledge (scienza). They map to conscience and science, to certainty and truth.

Anyone can read a class diagram and become aware of what are the classes; one can even read the code after that. But why did we chose to structure the class hierarchy this way? That question is harder.

Cogito further exemplifies this distinction and reveals a mistake of Descartes. We are aware of our existence, but we do not know it. We are certain that we exist but still oblivious to how we came to be, or why we are, or how thinking operates. We do not know our causes. Cogito is a sign of our existence, but not its cause.

Second, Vico remarks that when skeptics have a toothache, they do not doubt what they feel – they doubt the possible causes of the toothache. In contrast to what a reader of Descartes might expect, skeptics do not actually doubt any of the following:

  • That they think.
  • That they exist.
  • That they perceive appearances.
  • That they may cognize mathematics.

Skeptics suspend their judgement of causes. So skeptical attacks on cogito would attack the causes of our thinking, not the fact that thinking itself happens. Cogito says nothing about the causes, so it misplaces the line of defense.

Two things follow. First, cogito does not help building a skeptic-proof foundation for the natural sciences. Second, because 1) science studies causes and effects, and 2) cogito says nothing about our causes, we conclude that cogito is neither a model, nor a standard, of scientific knowledge.

The distinction between truth and certainty, as Vico understands them, applies to the mind/body separation. It is wrong to assume that thinking is the cause of our existence. We are embodied minds, therefore we think, not the other way around. Otherwise, thinking would have had to be the cause of a body too. Thinking is a sign of having a mind, giving us certainty that we have one, but not automatically enabling the knowledge of the mind.

So, the true is the object of science, the certain belongs to conscience and to particular human facts. The cogito gives certainty, therefore belongs to conscience. It reassures me that I think and exist, but does not reveal how my thinking came to be, what causes it, or what I am.

In software, reading code gives consciousness of behavior. Recovering rationale gives causal knowledge of design. I may know that the code takes this branch in a given situation, but why does the branch exist? I know what a test checks, but perhaps it tries to prevent a specific behavior somewhere else? I know how a type may enforce a constraint, but which tradeoff produced the constraint? I know what a feature commit changes in the code, but which alternatives were rejected?

Imbalance of pure analysis

Another line of attack is an overemphasis on the critical analysis which is only useful when our imagination sometimes feeds it with meaningful ideas.

Vico starts On the study methods of our time by endorsing Cicero's "Ars Topica", a book exploring how to be a good orator, and an adaptation of Aristotle’s topical method, but with a more practical, rhetorical, and juridical emphasis. Vico himself was a professor of rhetoric, hence the choice, I guess.

Cicero writes: "All methodical treatment of rational discourse involves two skills, invention and judgement". In today's terms, designing a speech involves brainstorming and critical selection. This is a common design strategy: divergent thinking followed by convergent thinking. Think about how diverse were early cars or mobile phones, and how similar they all look now: selection favored optimal shape, and now the diversity manifests elsewhere.

Then Cicero focuses on a method of invention: how to systematically explore the design space of possible arguments for a speech by using some anchor concept. For example, analyze the precise definition of this concept; decompose the concept; try to negate it or compare it with similar concepts, and so on. The gain is in systematic exploration which helps to produce better arguments and to unblock the author. The orator then critically selects the most coherent and suitable arguments for the speech.

Today, the closest exploratory approaches in engineering that I know of are Morphological analysis, TRIZ and Systematic inventive thinking. Neither are a common knowledge, I daresay.

Cicero shows a balanced approach. Contrary to him, the contemporaries of Vico overemphasize critical skills over invention, throwing students out of equilibrium. Descartes made a lasting impression on scholars by using radical doubt to reach the foundational principle of metaphysics (Cogito). For Vico, youth is the time when imagination and creativity blossom, and universities are neglecting their development in favor of analysis. Then, students are forced to concentrate on abstract logic4 to become good in critical selection, but they can't generate any original ideas to select from. Deductive reasoning becomes sterile, leads to abstract intellectualism and the overall progress in society stalls.

Additionally, Vico pushes an argument familiar to us, about the limits of control over our powerful tools. Modern science provides us with technology, but we need practical wisdom to use it for good. To Vico, the practical wisdom comes with the study of history, philosophy, poetry, law. A universal, refined, human-less rationality needs phronesis5.

I wonder, is it a danger for a new generation of engineers, who will attempt to create systems mostly by reviewing AI generated code? How will they be able to critique specific contextual decisions without sufficiently engaging in the generative practices in their careers? Will they be generally less capable to come up with novel solutions, architectures, technologies?

Attempt at universality

Another vulnerability originates in, perhaps, the most powerful part of Cartesian project: the Cartesian method aims at being objective, context-independent, universally applicable. But what about sense-data, phenomenal experience, or anything related to arts, history, human sciences in general? Cartesian method recognizes the first, but turns anything grounded in subjective experience into some kind of illusion.

Not only human sciences are left out without a solid foundation. Cartesian method is too rigid when it comes to stochastic arts 6 like medicine, where no amount of mastery guarantees the result. Everything a doctor does is, in a way, unreliable, doubtful, and can't be grounded in the Cartesian metaphysics. We can't build a unified, strict theory of healing people – it has to be constantly revised according to the experience. As Maurizio Esposito puts it:

The practice of medicine, as well as the art of navigation, requires either a flexible episteme or a systematic technē. Stochastic arts require a fine-tuned equilibrium between experience and theory. They imply some sort of practical wisdom.

Descartes and his followers treated nature as more certain than human culture. Vico turns it around, pointing that subjective has real power. External world always remains external to the human mind, only partially graspable. Humanly known truth is fragmented, for we know it by division, says Vico. But we make our own decisions, generating causes that are hard to doubt. If I cut a toy horse out of a wooden plank, I certainly generated the cause of that horse. And that's the key to verum factum – there is actually more certainty in our decisions than in anything we know about the world. Descartes, and sciences, deal in causality, which might be itself just a construct of human mind, posing for some objective aspect of reality. But our decisions happen in our mind and therefore are immediately accessible to it.

Software engineering is also a practical, stochastic art. Most of us are building systems in an open world and interfacing with other systems of which we have limited control. Developers may execute perfectly but the context shifts, some library becomes obsolete and abandoned, the requirements change so much you can't accommodate for them without rewriting everything from scratch. The user updates their OS, the world moves on and does not support the old version of the protocol you are using anymore. Try browsing modern internet from some old PDA which does not support HTTPS properly. No amount of expertise can zero the infant mortality rate in software.

And, most importantly, Cartesian quest became possible because Descartes came to be into an already existing culture. That culture was a necessary precondition to have any kind of discussion about Cogito and metaphysics in the first place. So which is primary: situated, practical knowledge, or abstract, universal one? In a closed loop, picking either side is a losing strategy.

Truth of the made

So here comes Vico's answer to Cartesian dogma – a complementing principle that you can only truly know what you have built, or what you could build. Knowledge is not attained through observation, nor measurement, nor classification, nor reflection, but through construction and reconstruction. So exploring this principle and its implication gives us, engineers, a non-trivial angle at our daily work – reading docs, building, debugging, refactoring, cursing at the fruits of our own labor, and the code of our colleagues. What we do is much closer related to the act of knowing, making sense of things, making them intelligible, than just mashing things together until they work.

Introduction of the principle

Out of curiosity, I was looking for the first occurrence of Verum factum in Vico's works. I think it appeared in the first chapter of On the most ancient wisdom of the Italians. It begins like this:

For the Latins, verum (the true) and factum (what is made) are interchangeable, or to use the customary language of the Schools, they are convertible. For them, the verb intelligere is the same as "to read perfectly" and "to have plain knowledge." In addition, their cogitare was the same as our vernacular "to think" (pensare) and "to gather" (andar raccogliendo). And for them, ratio meant the reckoning of arithmetical ratios as well as man’s endowment by which he differs from and surpasses brute animals. Also, they commonly described man as an animate being, rationis particepem, that is, as partaking of reason, but not always having full possession of it. Moreover, as words are symbols and signs of symbols, so ideas are symbols and signs of things.

Hence, it is reasonable to assume that the ancient sages of Italy entertained the following beliefs about the true. "The true is precisely what is made" (Verum esse ipsum factum).

Comes as a wrecking ball with some rudimentary philological analysis and loosely related pieces of trivia. But I think this mess does not matter. I see it as an application of Ars topica that Vico likes so much. No matter what inspired an idea like Verum factum, even if Vico had misheard the lyrics of a song, the principle is then scrutinized critically and justified in later works.

The skeptical attacks on causes are themselves suggesting a line of defense. What are the causes that I would doubt the least? I generate the causes myself, I produce stuff, abstract or concrete. It is a practical, concrete certainty, my own awareness of my actions. And if others made something? I can recreate that, or at least study how I could, potentially, do it. I will not properly know what is a specific algorithm, an operating system, browser, game engine, unless I figure out how to implement them. Philosophers would say, that Vico establishes the certainty of technê, not of episteme.

Foundation for sciences

Cartesian metaphysics implies that mathematics provides the most robust kind of human knowledge, because mathematical ideas are the most clear and distinct and can't be corrupted by our imperfect perception of res extensa. Then goes physics, a tier less robust. What will change if we part from Verum factum instead?

First, Vico underlines the distinction:

  1. Science is based on causality is concerned with proper demonstrative knowledge, and we have only such knowledge of the objects we construct ourselves. It is a genetic knowledge: to know a thing fully is to know its causes, to possess the inner blueprint of its making, to be able to reconstruct it from its first principles.
  2. Conscience is based on awareness. We explore the world this way – imperfectly, from the outside, through observation and classification.

Vico agrees with Descartes that mathematics (including geometry) is the apex of certainty, but for different reasons. All of mathematics is made: we define points, we generate lines, complex figures, statements about them, proofs. The human mind arranges elements of such knowledge, therefore causing it. Mathematical truths is what's made out of basic mathematical elements such as axioms, and the basic elements are themselves man-made. We do not need God to validate mathematics for us.

Like Descartes, Vico places physics lower than mathematics because it involves reasoning about the real world. We did not make the world, God did. Therefore we do not have the same grasp of it. To study the world, Descartes proposes to try internalizing it through our apprehension of clear and distinct ideas. Vico, on the other hand, points that we create a science whose elements are transparent to us. We experiment and in so doing we recreate the structures of nature; being more successful in experimental physics means imitating God better. For Descartes, experiments are checks of validity of our reasoning.

The further we go from mathematics, the less certain our knowledge becomes, and the moral sciences are at the opposite side of the spectrum. Descartes and Vico agree on that. However, where Descartes sees uncertainty in opposition to objective knowledge, Vico offers a redeeming foundation: even in stochastic arts, even in arts, history, moral sciences, we know what we made. Man-made things and man-guided processes are fully intelligible only to their maker or doer, or to others who have either made a similar thing or would be able to do it.

In The New Science Vico goes as far as to claim that the natural "science" is impossible. Science is more of a self-knowing process, where the knower explores what they have done, as both object and subject. Physics, from this angle, is a study of models that we create in experimental interaction with the world. So "science" should only be applied to the human world: history, for instance. Physics is then a systematic form of "conscience", an "elaborate witnessing of the world" as Donald P. Verene puts it. That's bold.

God's knowledge

Cartesian metaphysics depends on benevolent God and the proofs of his existence. Vichean system demands a notion of "knowing with certainty", and assumes God as an omniscient maker.

Two things follow. First, we are also guessing the intention and the structure behind the design of nature. We can only hope to guess right. Second, if a human mind can't understand God, the diving knowledge about his work is not only unreachable but also ungraspable to us. In other words, even if God were to explain his plan to us, we wouldn't understand because we are limited. We can observe nature, measure it, build useful models, but that's it.

The act of making is how we mimic God. To a Renaissance thinker, the purpose of knowledge is to produce practical effects on the world, so its standard can not inhabit the world of pure minds. Knowledge enables us to transform nature, and in doing so to control and to understand it.

It is interesting to contrast Vico with Francis Bacon here, who also underlined the importance of connection between making and knowledge. For Bacon, making is aimed at the extraction of knowledge, but for Vico knowing equals making. For Bacon, the goal of knowledge (and sciences) is to make our lives more comfortable; for Vico, a more important aspect of knowledge is the enabled understanding. Technical knowledge without wisdom that draws boundaries of its meaningful, purposeful, ethical applicability, would be characteristic for the barbarism of reflection. Draw from the wisdom of Ancients, read poetry, don't neglect Ars Topica, listen to uncle Gio.

Software requires recreating world from a limited standpoint. When we automate processes of a shop, we think in ontologies to produce a model of the shop with its customers, employees, logistics and so on. The software itself must model whatever real world processes it automates, by Ashby's law: a controller must match the variety of the system it controls. Perhaps this is a part of the charm of our job: it's so much easier to be a software demiurge. For sure we understand the code that we wrote better than its dependencies. And just as physicists at some point can not penetrate further into the structure of the world, perhaps yet, we also need to accept the foundations – some abstraction layer – as a given. If we need to understand it better than the documentation allows, we experiment, extracting a hopefully sufficient synthetic knowledge of it. Perhaps this is why, in my experience, some physicists make really good programmers if they put themselves to it seriously.

Synthetic, analytic, system thinking

In On the Most Ancient Wisdom of the Italians, after introducing Verum factum, Vico explores three activities related to knowledge: ratio, intelligere, and cogitare. Ratio is the quality of rational thinking what differs men from animals. The other two are less obvious.

Intelligere relates to the God's knowledge, a perfect recognition and understanding of the elements of things. God understands things from inside and outside, both in their internals and the external aspects.

Cogitare relates to human knowledge. Applied to nature, it is limited to outside of things, as we do not know how the world is really built. Still, human knowledge is fundamentally about constructing7, composing the object of knowledge of elements – even if only external elements are cognizable by human mind.

In system engineering, we promote system thinking as a kind of superposition of two types of thinking: analytical and synthetic. Knowing a dishwasher analytically means knowing its internals and how they work; it is about decomposition. Knowing a dishwasher synthetically means exploring the roles it plays in supersystems and aggregating this knowledge. For example, which buttons to press to use it, how affordable dishwashers affected the society, how artists depict dishwashers, how engineers test them, and so on. I think Vico could agree that God's knowledge is a limit of systemic knowledge about the world: knowing the inside and outside of every entity, in both structural and operational aspects.

Collective making and lost rationale

As a software engineer, I found Verum Factum, as it appears in On the Most Ancient Wisdom of the Italians, lacking in two ways.

First, the maker is in a privileged epistemic position while they are making, but we forget things with time. My story precisely, as reading my code from way back is an exercise in remembering and reconstructing the rationale. I will refer to this as an epistemic decay.

Second, most of the time we either produce collectively, or base our effort on the work of previous generations. Sometimes we make without a plan, so the outcome emerges out of our loosely coordinated efforts. Most open source software fits this description, but the large movements of the industry as a whole are also emerging due to a combination of factors. The increase of complexity made hardware vendors specialize on different components such as memory or CPU, the market pressure pushed everyone to optimize and speed up their components independently of others, as the result systems acquired specific bottlenecks and we design software around them.

So, to apply Verum factum to engineering, we need to account for the epistemic decay and collective making. Vico has a lot to say about them in The New Science, as he turns towards humanities, which are collectively and historically constructed. His approach to history is not exactly modern historical science, but I find it insightful about making in general. Humanity as a whole is too messy, and complicated to satisfy Vico's model, but an individual engineered system might just be the right fit to apply his framework.

So let's start with how Vico treats collective making through human history. For Vico, civilizations move through recurring cycles – a divine age of myth and ritual, a heroic age of aristocratic codes, then, a human age of reason and democracy.

Historical cycles

The ancient humans are more poets8 than engineers. Their institutions, political structures, mythologies originate in a shared imagination and shared bodily fears, not in reasoning. The makers are inside the thing they are making; making is collective, emergent, not planned, and not fully aware.

A pre-reflective, shared judgment arises within a whole community, an entire people, without any explicit coordination – the shared ground of values, meanings, and bodily gestures that allows for a world to be made in common. Language itself is the supreme artifact of this collective, poetic making. Vico names it common sense (sensus communis) – not in the modern meaning of that term. The proper knowing came much later, through a specific kind of labor.

Ancients make sense of the world by projecting their own passionate experience onto it. So the make the divine by interpreting such phenomena as the thunder – it's Jupiter, a poietic universal, emerging in lack of proper capacity for abstraction. It's not an allegory, it's literally the truth of ancients.

The Age of Heroes converges on a story of what was made. The narrative, owned by the aristocracy, projects ethics and a picture of the natural world order, while plebeians are simply following it. The truth is still made collectively, but not by everyone. In times of Homer, acting justly means acting in accordance with the established, traditional, social and cosmic hierarchy; justice is restoring a distrupted order of things9. The law is heroic, severe, rigid.

Customs and institutions provide stability, enabling the reason and abstraction to grow. They in turn introduce a distance, an alienation, and we stop living inside our customs and become their critical observers. Heroic, arbitrary law is replaced by written codes, grounded in a concept of natural equity and equality. The reflective intellect forgets its own genetic history, mistaking its refined abstractions for the true fabric of reality. The poetic past becomes "error" and "superstition," and we forget that it was the very labor of world-making that made abstract reason possible. Such is the Age of Men.

The modern philosopher, in Vico’s view, commits a massive genetic fallacy, dismissing the poetic "true" because it does not meet the criteria of a later, derivative mode of "truth." This is also a Cartesian fallacy – assuming that the only mode of knowing is through demonstration by clear and distinct ideas, logical deduction, and a correspondence between abstract concepts and empirical facts.

In the Age of Men we fall into the barbarism of reflection: it is an inadequate application of rationality everywhere, reaching into territories where it is unwelcome. Such are to the foundations of politics, ethics, aesthetics. The society saturated with abstraction and formal rationality loses contact with the concrete, the particular, the made. Its institutions become formal and lose track of their goals – they were made by previous generations, and the knowledge about them decays. Then the society collapses, and the cycle begins again. I think Vico would take managerialism as a part of this sorry state of civilization.

Verum factum in light of collective forgetful making

It is time to revise the meaning of Verum factum in light of Vichean account of human history.

First, let's note thah Vico calls a particular modification of the mind a specific configuration of attention, memory, fantasia. If I return to my creation later, that me inhabits a different modification of my mind. To know my own past work is therefore not a matter of looking inward and finding it intact; it is an act of recovery. Vico puts it like that:

"… this world of nations has certainly been made by men, and so its principles must be found within the modifications of our own human mind"

— The New Science, §331

We can come to know what humans have made by reconstructing the collective processes through which it was made – even when the original makers did not understand those processes. So Verum factum means that the deepest intelligibility of the civil world lies in its genesis as a human production. It is a potential for the recovery.

Vico was convinced that we recover what was collectively made through philology – etymologies, fables, legal formulae, ritual residues – read against philosophy. Philology supplies the certain; philosophy supplies the universal pattern. Together, they form the new science.

Collective making is not fully conscious, but the civil world often displays an order that exceeds the intentions of individual agents. For example, people may act out of fear, pride, domination, or necessity, but the result may be stable marriage, burial rites, law, property, political hierarchy, or civic order. Vico introduces a concept of Providence, which is not just a theological device, but technical name for the immanent rationality of collective action, irreducible to individual human plans. Here, Vico has something like an early theory of unintended collective order.

Legislation considers man as he is in order to turn him to good uses in human society. Out of ferocity, avarice and ambition, the three vices which run throughout the human race, it creates the military, merchant and governing classes, and thus the strength, riches and wisdom of commonwealths. Out of these three great vices, which could certainly destroy all mankind on the face of the earth, it makes civil happiness.

This axiom proves that there is divine providence and further that it is a divine legislative mind. For out of the passions of men each bent on his private advantage, for the sake of which they would live like wild beasts in the wilderness, it has made the civil orders by which they may live in human society.

— The New Science, §132-133

Let's sum it up. We can come to know what humans have made by reconstructing the collective processes through which it was made – even when the original makers did not understand those processes clearly. We may know it only retrospectively, because we did not make it with clear self-consciousness. Knowing is a genetic reconstruction, following the history of design decisions, whether explicit or not, whether individual or emerged from a collective labor. If you want to know anything about human world, it is insufficient to ask for the definition; ask also: what human need, imagination, fear, practice, or social conflict produced it?

Verum factum in software engineering

Verum Factum turned to have two aspects:

  • Intentional makers do have privileged access to knowledge about their subject during the act of making.
  • What was made can be known post hoc through genetic reconstruction.

Where does this leave us, engineers?

I don't think modern historians will take Vico's view on human history as a, uhm, state-of-art. But take a software system, which fits Vico's understanding of history: collectively made, perpetually decaying. I find insightful that software really decays epistemically before it decays technically. The code still runs, is occasionally modified, but the knowledge of its making disappears. Good documentation may offset it, but eventually the software is being supported by new generations of developers who do not know it as well as its makers. Those who do not understand the interfaces of modules will depend on the leaked internal information, pouring gasoline on the fire of Hyrum's law.

Systems are not just 4D objects, they are also histories of contextual decisions. So these decisions are intelligible only against constraints, rejected alternatives, and intended consequences. Code preserves some structural effects of decisions, documentation sometimes highlights the decision itself, but rarely its context. Engineering documentation should preserve the intelligible design rationale behind decisions as a part of the system’s architecture, not as optional prose outside the artifact. One way of improving it is to write Architecture decision records10, but we all know too well how we document in our high pressure, rapid moving industry.

Some people claim that now we need to write more documentation to guide and constraint the agentic AI work. But such documentation describes the outcome of decisions, not the rejected alternatives, not the interested parties, not the ad-hoc constraints that often promote patchwork as the unfortunate best solution.

The rationale of our systems is never fully inside one, or even multiple, heads. It is distributed through oh so many external memory holders:

  • practices, biases, prejudices, conventions, habits…
  • institutional memory, naming patterns, documentations of all kinds,…
  • historical, technical, resource constraints,…
  • accumulated compromises, legacy architectures and interfaces,…

Anyone can read a class diagram and have coscienza (consciousness) of what the system looks like now. Only the person who lived through the making, or who can forensically reconstruct it, has genuine scienza. This means the build pipeline, the history of dependency changes, and the rationale behind deprecated modules, in fact, an important part of the system's truth.

The story of some long-lived software systems bears resemblance to a miniature Vichean narrative, where the first architects are poetically manifesting the foundations of the system through their vision, the early senior developers codify the vision into narratives and laws, and sacred documents, and the newer generations of developers are operating within fragmented vision of specific parts of the system, demanding coding standards, conventions, agreements, APIs. Eventually founders are no more, and the current generations of developers are trying to develop and evolve a system they only partially understand. They did not live through decision making, so they do not understand why this module was not replaced with a 3rd party library 10 years ago. If they attempt to do that, they might, or might not be up for an unpleasant surprise. But they don't know. That's the loose analogy of the barbarism of reflection – not a full equivalence, of course.

Vibe check

It will get more convoluted with LLMs and agentic coding. We control agents by text, which is supposed to communicate the "what" of making. The "how" is left to semi-opaque uninterpretable AI agent. But LLMs have no intentions, they are statistical approximation devices.

Can you ask an agent, why it made this or that choice? It may answer, but it will be a answer to the wrong question. You want to know the perspective of someone who made the decision. But the agent can only look at the generated code and try to reconstruct what someone would have answered when asked a similar question. It is a post-hoc rationalization, not a recollection of the actual intentional decision. The truth is then reduced to "it passes tests"/"it satisfies the spec". Humans do rationalize post-hoc too, sometimes, but they had intentions to reconstruct in the first place, even if wrong ones.

We can, of course, somehow fight it. But it will require humans to get involved. We will have to trace the genesis of the system ourselves, force agents into generating a kind of historical decision making record, and imbue decisions with a rationale that a human will understand and validate. We will have to review the architecture constantly and stabilize it so that errors and semantic drift does not accumulate.

We do not make the code as much as before, but we still might be making software through engineering agents, prompts, processes, interpretations, narratives, rationales. Ultimately, it might be what we would have to do anyway, but what we never had time for. But the payoff would be perhaps a longer living, stable system, capable of evolving and adapting fast without as much decay as older systems.

Link to perdurantism

I understand how someone who heard something about relativity would try to adopt the unified space-time into their epistemology, if only motivated by "what if". It impresses me how a rhetorics teacher of the early 18th-century came up with this, couple of hundred years before Einstein and Minkowski. Vico already treats a man-made object not as a snapshot, but basically as a continuous slice of time, filled with changes. This echoes the perdurantist approach, and goes even further. But I have to be careful in my claims here.

First, Vico lived in a world before Darwin. At that time, virtually everyone believed that nature had a design and a purpose. Surely something as complex as a dog could not be a result of some mindless, random process, right? It is perfectly logical then to make the goal, the final cause in Aristotelian sense, an important aspect of how you see the world. The concept of Divine providenzia is a good example: the collective order emerges not without an involvement of Divine will.

Today we think that nature is evolving, not designed, even if evolution appear to act towards a goal. Thinking that this specific big rock has a purpose might be just a reflection of our inherent search of meaning that we transfer onto the world as we try to know it. So we disagree with Vico on nature, but we agree that humans develop semi-purposefully, and we can apply his reasoning in engineering.

Second, ontologies based on perdurantism usually describe changes as events of transitions between states. Vico aligns well with that, but for him the transitions are often intentional, imbued with rationales. We are trying to implement a feature, improve a non-functional aspect such as reduce coupling, or reduce complexity, or facilitate further changes, improve readability and so on. Knowing an object is not just its history but why the changes were implemented.

Third, Vico is not claiming that made things are built out of different stuff than natural things. He reasons about knowledge, not about being. Knowing a made thing requires a different method and qualititatively differs from knowing a natural thing. So it is an epistemic statement, not an ontological one.

Perdurantists are making an ontological commitment: objects are, really, four-dimensional, and they span across time. Vico says: the knowledge about objects is the knowledge about their history and design decisions, but he does not commit to eternalism and 4D objects. So let's be careful not to put Vico and perdurantism on the same plane from the start.

For natural objects, observation and measurement are the best we have. For artifacts, we can and must do better, because there is more to them. Imagine Alice inventing a back scratcher by taping a big hook on a stick, and Bob coming up with an exactly same device to grab things from afar. Intuitively, there is something different about these two objects, coming from how we use them, even if right now the scratcher and the grabber are just exact copies. If we continue improving them, scratcher might get another hook, and grabber might get a claw, and their looks will diverge.

We might come back to the identity question after all, because something important about objects is invisible in snapshots, but also invisible in the time slices. This mystery stuff lives in the history of making.

So I got curious, can we make this mysterious stuff into a part of ontology? We are already describing objects as 4D slices of time and space, so we might have the right granularity to refer to the changes inside the descriptions of the rationales. Can we preserve the maker's knowledge, not just as documentation on the side, but as a structural feature of how we describe systems? I will share my ideas on it in the next post in this series.

Sources

If you are curious to learn more about Vico, I recommend checking these sources:

  • Giambattista Vico in Stanford Encyclopedia of Philosophy.
  • Vico's own works:
    • On the study methods of our time (De nostri temporis studiorum ratione, 1708)
    • On the most ancient wisdom of the Italians (De antiquissima Italorum sapientia, 1710)
    • The New Science (La Scienza Nuova, 1725)
  • The book of Maurizio Esposito "Vico and the Maker's Knowledge Tradition: Praxis and History"
  • The book of Donald Philip Verene "Vico's New Science: A Philosophical Commentary"

Vico is not always an easy reading so the professional commentary help a lot; if you read Vico's works, they often are published with a useful introduction.

Footnotes:

1

In this essay I use "rationale" as an engineering name for the historically situated reasons, constraints, rejected alternatives, and purposes. For Vico, the category of "causes" is broader; it loosely corresponds to Aristotelian final and efficient causes.

2

I recommend checking out Maurizio Esposito's book "Vico and the Maker's Knowledge Tradition" – it puts Vico in a context and traces both his inspirations and his influence on later thinkers.

3

But who is the thinker? Descartes honestly answers that he does not know. The later critique e.g. Hume thinking our self is just a stream of perceptions, gradually reduces cogito from "I think therefore I exist" to "I think therefore thinking happens" to "I think therefore something happens".

4

Vico approves that Ancients were teaching logic through geometry. To him, it is less formal and stimulates imagination.

5

φρόνησις – practical judgement

6

In the third century AC, Alexander of Aphrodisias introduced a distinction between stochastic arts and poietic arts in his commentary to Aristotle's Topica.

7

Etymologically cōgitāre comes from con- (together) and agitāre (drive, move), so it seems to hold an element of "putting things together", construction. See this entry.

8

Vico uses poietes, poietic making in the original Greek sense of ποητής (poētḗs) – makers, creators, composers.

9

This rhymes with Macintyrean view on Homer and justice in his time.

10

Besides, not all ADR formats require documenting rationale exhaustively – for example, this template by Michael Nygard or this template using Planguage. There is a collection of ADR templates here, you can check how many actually enforce describing alternative solutions if they had been considered.