01 — About this document

TallyWorld: what we are building, and how it is being built.

Nine chapters · about an hour.

This is a factual account of a software project. It describes what the project is, why it exists, the commitments that shape its design, the architecture those commitments forced, the way the work is actually done, and where it stands today.

It is written to stand alone. It assumes you have built or run serious systems, and it assumes nothing else — not familiarity with our company, not familiarity with our products, not familiarity with the markets we serve. Everything the document relies on, it introduces.

A few words on what this document is not. It is not a pitch, and we have tried to keep the register of one out of it. Where we make a strong claim, we give the reasoning and, where one exists, the measurement — with its limits stated. Where something in the project is unresolved, we say it is unresolved, because the project's own design records say so, and an account that hid that would misrepresent how the work is done.

The document asks for about an hour. We have tried to earn that hour by being specific rather than long: the project's internal design record runs to thousands of pages, and what follows is a deliberate selection — enough, we hope, for an experienced reader to form their own judgment of the engineering character of the thing, which is the only judgment that matters here.

One stylistic note, so it does not surprise you later: several positions in this project depart from the standard practice of large-system engineering. Where they do, we state the departure and the derivation behind it. Some of those derivations may still be wrong — the project treats its own frozen positions as carrying named revision conditions, not immunity — but none of them is casual, and we would rather you disagree with our reasoning than with a summary of it.

02 — We should introduce ourselves first

We should introduce ourselves first.

You have no particular reason to know who we are, and the rest of this document does not make sense without it. So, briefly.

We are Tally Solutions, an Indian software company. For close to forty years we have built one kind of software: the software a small business runs itself on — its accounts, its inventory, its taxes, its payroll, its dealings with banks and with the government. Our current product, TallyPrime, is used every day by millions of businesses, the large majority of them in India: traders, distributors, manufacturers, transporters, retailers, professional firms — businesses that mostly have no IT staff, no consultants on call, and no patience for software that needs either.

Two things from that history matter for this document; the rest of our past does not.

The first is what those decades taught us. Business software at this trust level is not an app; it is the record a business files with its government, shows to its bank, and feeds its family from. The businesses that run on it are wildly more diverse than any schema drawn in an office: a textile trader in Surat, a pharmaceutical distributor in Hyderabad, a temple trust, and a steel re-roller do not keep books that differ in configuration — they differ in shape. We did not learn this from research. We learned it by being used, daily, for decades, and by carrying the consequences when we got something wrong. Whatever else is uncertain in this project, the picture of the customer is not theoretical.

The second is a limit, and we want to state it plainly. TallyPrime, for all its reach, serves on the order of one percent of the audience this project is aimed at. The product is deep where it is deep — principally in India's statutory and commercial reality — and its architecture carries assumptions from the era it was born in. The project this document describes is not an upgrade, a rewrite, or an internationalisation of TallyPrime. It is a new system, built from the operating system up, because the commitments described in chapter five cannot be retrofitted onto an existing codebase — ours or anyone's. We tried the gentler readings of that sentence for some years before accepting the hard one.

A word about how this project is run, because it colours everything that follows. Tally is a private company, and this project is run on a long horizon — its own planning language is decades, not quarters. It is staffed deliberately small, and progress is measured internally by whether stated properties of the system have become true, not by feature counts or dates. We mention this not as a virtue but as context: several design positions in this document are only rational for an organisation that can hold a position for many years, and it is fair that you know this one intends to.

That is who is writing. The next chapter says what is being built.

03 — What TallyWorld is

A business-management system, and a network, for two hundred million businesses.

TallyWorld is two things that only work as one thing: a complete business-management system — the software a business actually runs on — and a network through which businesses transact with each other directly from their books.

The system part is the familiar surface, stated without ornament: accounting, inventory, statutory compliance, payroll, banking — the operational record of a business, kept exactly right, on whatever device the business owns. The network part is less familiar and is the easiest way to feel what the project is really attempting: when one business on TallyWorld sends an invoice to another, that invoice arrives inside the receiving business's books as a live, structured, actionable entry. Not a PDF to re-key. Not an import wizard. Not a compatibility prompt. The two businesses have never coordinated their software versions, never agreed on a data format, and never will — and the transaction still carries its full meaning from one set of books into the other. Most of the architecture described later in this document exists to make that one sentence true at scale, permanently.

The constraint setThe number, taken seriously

The target is two hundred million businesses. We use that number not as ambition decoration but as an engineering input, because it forces three properties to hold at the same time — and it is the simultaneity, not any one of them, that defines the project.

  • The scale and diversity of the consumer internet. Businesses differ along four directions at once: geography (each with its own statutory framework and language of commerce), industry (each with its own accounting logic), size (one person to many branches), and the character of the business itself. These directions multiply rather than add. At this scale the diversity is not merely large — much of it cannot be enumerated in advance, because it only becomes visible after the software reaches markets that did not exist at design time. A product built by enumerating its market is structurally finished before it ships.
  • The exactness of serious financial software. What this software produces is what a business files, is audited on, and borrows against. "Mostly correct" is not a lower grade of correct; it is a different category of product, and not this one. Exactness has to hold across all of the diversity above simultaneously — not in the best-supported geography, on the best-supported device.
  • A price near zero, honestly accounted. The majority of the target audience cannot cross a meaningful price line, and there is no wealthier cohort behind them to subsidise the rest. The discipline this forces is broader than the licence fee: the customer's whole cost of owning the product must stay near zero — including the hardware it demands — and our cost of serving each business must stay near zero too, or the economics fail quietly somewhere around the first few million customers. Neither cost may grow in proportion to scale. That single constraint disqualifies entire families of architecture before any code is discussed, as the next chapter shows.

Operating conditionsThe world it must work in

Two facts about the audience's world are treated in this project as permanent operating conditions, not as transitional inconveniences.

The first is the device. The design floor is the hardware the target audience actually owns: a decade-old desktop with a spinning disk, or a low-cost Android phone. The project's performance standard — internally, "Tally grade": every interaction effectively instantaneous, no loading states — is measured on that floor, not on developer hardware. A separate, dispiriting convergence reinforced this: the affordability analysis and the product-delight analysis, run independently, both ended at the same device — the cheapest Android handset in the most constrained market.

The second is connectivity. For a large fraction of the audience, connectivity failure is not an event; it is the weather. The system is therefore designed for a permanently occasionally-disconnected world: a business must be able to work through an ordinary network interruption as if nothing happened, with the system reconciling when the connection returns. What "offline" must mean is engineered precisely — chapter six returns to it — but the headline is that needing the network to function is treated as a design defect.

DeliveryThe shape of the delivery

TallyWorld ships natively on fourteen platform targets — the Windows, Apple, Android, and Linux families across desktop, server, and mobile device classes, plus a unikernel deployment for our own cloud infrastructure — from one codebase, on one linear release sequence, concurrently. "Natively" is meant literally: a Windows user gets a Windows application, an iPhone user an iPhone application, each exploiting its platform fully, none reduced to the common denominator of the rest. The machinery that makes one codebase and fourteen genuinely native targets compatible claims is described in chapter six.

The deployment splits into two worlds with different design constraints. Premise is everything running on hardware the customer controls — defined by its constraints (no assumptions about the machine, the connectivity, or the operator) rather than by physical location. Space is the always-on backend we operate — structured into regions so that data residency is an architectural property rather than a policy document. A family of applications spans the two, from the end-customer product itself to the trust roots that sign binaries, the schema tooling, and the operations surface through which a small team runs the whole infrastructure.

Depth of the buildThe depth of the build

One more fact completes the picture, and chapter four spends its whole length justifying it: TallyWorld is a full-stack greenfield project in the literal sense. Between our code and the hardware there is the operating system, and nothing else of consequence that we did not build. The database engine is ours. The network protocol is ours. The execution runtime and the language above it are ours. The build and schema tooling is ours. We are aware of how that list reads to an experienced engineer — it is the most expensive sentence in this document — and we did not arrive at it by preference.

04 — Where we depart from standard practice

Where this project departs from standard practice, and why.

An experienced reader will already have noticed absences: no browser front-end, no third-party database, no TCP in the native path. Each absence is a derived position, not a taste. This chapter states the major ones with their derivations, because they are the places where your experience and our conclusions are most likely to differ — and they deserve reasons, not assertions.

A note on the standard we hold these derivations to. In each case the conventional choice was the starting assumption, and it was abandoned only when a stated project commitment could not survive it. If you find a flaw in one of these chains, that is a conversation we genuinely want; the project's record-keeping is built to make such chains checkable rather than rhetorical.

Departure oneWe do not deliver through a thin client

The cheapest way to reach fourteen platforms is to reach none of them: render on a server, treat every device as a window. We examined it and set it aside for two independent reasons. First, the performance standard: instantaneous interaction on a decade-old device cannot be guaranteed across a network round-trip — the architecture caps the experience precisely where the project must win. Second, the permanently-occasionally-disconnected world: an architecture that requires a live connection fails at exactly the moments these businesses most need their books. Either reason alone forces native execution on the device; together they end the discussion. The cost of that conclusion — managing genuinely different platform stacks in one codebase — is paid with the Platform Isolation machinery described in chapter six.

Departure twoWe do not use a cross-platform UI toolkit

Given native execution, the next conventional economy is a cross-platform UI framework. The objection is not ideological; it is the intersection problem. A toolkit that spans platforms expresses, in practice, the intersection of their capabilities — which short-changes the premium device (capabilities present but unreachable) and the constrained device (an experience that is functional but foreign) simultaneously. The project's position is a superset instead: a single loadable UX definition expressed in a vocabulary that spans more than any one platform offers, resolved at runtime against each platform's full native capability — substituting a native equivalent where a capability is absent, and degrading by design rather than by accident where it cannot. This position was not reached cheaply: the project shipped years of work on a major cross-platform toolkit before concluding that its abstractions collided with the native-experience commitment, and discontinuing it. We record that history because a position that has survived a reversal is worth more than one that has never been tested.

Departure threeWe do not use a relational database

This is usually the first departure an experienced reader challenges, so we will give it the most room. The commitment that kills the relational model for this project is permanence: any data file ever written by any version of TallyWorld must be readable and writable by any other version, forward and backward, forever, with no migration event — because at two hundred million businesses there is no such thing as a managed migration, and a single broken percent is two million broken businesses. Three properties of the relational model fail this commitment, not at the edges but at the core: relational keys are meaningless outside the table that issued them, and do not survive structural change; relational migrations are one-way in the general case; and a migration discipline that is routine at thousands of installations is structurally impossible at hundreds of millions. What replaces it is an object store built around identities that are forever unique and never reused, schemas that may only evolve additively, and data that carries its own meaning — so that a newer system reading older data, or an older system reading newer data, is the designed normal case rather than an exception. Chapter five gives this its full treatment, because it is less a storage decision than the project's central commitment.

Departure fourWe do not build the native path on TCP, HTTP, or SSL

TallyWorld's processes talk to each other over a protocol of our own, carried on UDP. The derivation, briefly. TCP maintains per-connection state and pays a handshake per connection; at hundreds of millions of intermittently-appearing endpoints, the backend spends itself on connection state that carries no business value. TCP's congestion control reads packet loss as congestion; on the satellite and last-mile links this audience actually uses, loss is weather, and the protocol's response — slow down — is precisely wrong. TCP's in-order delivery means one lost packet blocks everything behind it, where our traffic is independent events that must not queue behind each other's losses. And layering our requirements above HTTP would simply rebuild the protocol with the overhead kept: a layer above HTTP that adds everything we need is the protocol we built, minus the parts we did not. We note, for calibration rather than as authority, that the industry's own newest transports — QUIC, HTTP/3 — moved to UDP and reimplemented reliability above it for closely related reasons.

Security is integrated into this transport rather than wrapped around it. The project's data-in-transit layer (DIT) makes a packet unintelligible to anything outside its intended boundary, with time-shifted keys so captured traffic cannot be replayed, and with the cheap rejection of garbage traffic engineered in deliberately: a malformed or hostile packet is discarded after a handful of arithmetic operations, before any expensive cryptography runs. Against the conventional SSL stack, this layer measured roughly thirteen times faster at equivalent protection — a number we state with its scope attached: it is a benchmark for our packet sizes, our key schedules, and our threat model, not a general claim about cryptographic libraries.

Departure fiveWe do not treat migration as a way of life

Most large systems accept a standing tax: translation shims between versions, schema registries consulted at runtime, compatibility matrices maintained per customer. The project's cost constraint — neither the customer's cost nor ours may grow with scale — rejects the entire category, not just its worst members. Compatibility in TallyWorld is required to be a structural property with zero runtime cost: data is self-describing, identities resolve directly without lookup tables, and version compatibility is detected once, at startup or first contact, rather than mediated on every access. This is why the project owns its database and its protocol: guarantees of this kind cannot be underwritten across infrastructure that does not carry the semantics.

The patternA pattern worth naming

These five departures share one structure, and seeing it will make the rest of the document read faster: in each case a commitment stated in plain commercial language — never break an installed business, work on the device they own, work without the network, cost nothing per additional customer — turned out to have an exact technical consequence, and the project followed the consequence even when it was expensive. The next chapter describes the three commitments at the root of all of these.

05 — Three commitments

Three commitments that everything else is derived from.

Underneath the departures of the last chapter sit three architectural commitments. Internally they are called the Three Founding Pillars: Universal Schema, Identity Architecture, and the Trust Chain. This chapter states what each one is, and — just as important — the order in which they force each other, because the order is the argument.

A remark on how these three were arrived at, since "pillars" is the kind of word that usually decorates a slide. They were not chosen. The project ran several independent lines of reasoning — from sustaining two hundred million businesses, from native execution with a single release line, from the diversity problem, from the cost constraint, from the speed requirement — each followed from its own starting commitment with one question at every step: not "what would be useful here?" but "what does the previous step force?" The lines were not aimed at a common destination. They converged on the same three requirements anyway, several of them arriving at the third pillar independently from entirely different directions. We treat that convergence as the strongest form of confirmation independent reasoning can provide — and it is also why these three are frozen in the design while almost everything else carries revision conditions.

Pillar oneUniversal Schema — data that never needs migration

The commitment: every piece of data in TallyWorld carries a consistent, interpretable meaning across systems, across versions, and across the entire life of the data — not data that can be migrated, but data that never needs migration, because its meaning travels inside it from the moment it is created.

This is what makes the diversity problem survivable. Four multiplying directions of business diversity cannot be addressed case by case; they can only be made non-destructive structurally, by a governing layer under which any deployment's data is interpretable by any other deployment, regardless of which version wrote it or what customisations applied. It is also what makes the network scene from chapter three possible: the invoice that arrives as a live entry does so because both sides share a context-free vocabulary — an identifier for "ledger name" means ledger name on every device, in every version, in every geography, forever. Schema in TallyWorld is layered (a universal vocabulary; an application structure above it; per-business extension above that), every element has a custodian, and extensions by us, by third parties, and by end users occupy namespaces that cannot collide by construction.

Pillar twoIdentity Architecture — names that never lie

Hold the schema commitment and a second one becomes mandatory rather than optional: every entity — every business, user, device, data object, transaction, extension, and release — must have an identity that is forever unique and forever durable, generated without any central authority, and interpretable without a lookup table by any future component. If identity is ambiguous, the schema's "universal" property quietly dies, because the meaning of every field hangs off the identity of what it belongs to.

The deepest idea in this layer is a distinction the project applies everywhere: ignorance versus misunderstanding. A system that encounters an identity it does not know is ignorant — safe, and correctable by an upgrade. A system that interprets an identity as something it is not has misunderstood — and a misunderstanding cannot even be detected, let alone corrected. The entire identity machinery — versioned identities with dual checksums, lineage checks that expose any fork or gap in a history, a compatibility evaluation that resolves every encounter into exactly one of three states (identical, safely-ahead-or-behind, or diverged) — is designed to make misunderstanding structurally impossible while leaving ignorance cheap. A companion commitment follows: a single linear release sequence, because branched histories produce identities whose lineage cannot be reconciled, and "which version is authoritative" must always have one answer.

Two working axioms sit under this layer, and they explain design choices that would otherwise look pedantic. The first: uniqueness is a myth. No real-world identifier is truly unique; the same physical product, party, or place will sooner or later exist as two records, and what was thought to be one thing will turn out to be two. The system is therefore designed around merge and split as ordinary events, not anomalies: a merged identity is never deleted but becomes a permanent redirect, so that no reference held by anyone, anywhere, ever breaks; a split retires the old identity entirely and re-establishes its relationships against the new ones. The second: completeness is a myth. No description of anything is ever finished; time always reveals more properties. So no representation is allowed to assume it is complete, and shared reference data evolves continuously without any consumer's operations depending on the evolution — a deliberate looseness, so that a correction to a shared record is something a business may adopt, not something that can interrupt it.

Pillar threeTrust Chain — isolation before security

The third pillar is the most often misread, including, at one point, by our own documentation — more on that below. The Trust Chain's primary role is not security. It is isolation as a semantic guarantee: a TallyWorld universe — a deployment boundary within which all identities and schemas share one history — is structurally unable to exchange data with any other universe. Not forbidden by policy; unable by construction. Without that, the identity guarantee fails the moment two independently-evolving deployments touch: their namespaces interleave and "forever unique" stops being true.

The enforcement is structural unintelligibility: data in transit and data at rest are not interpretable outside their boundary — an adversary, or a different universe, or for hosted data even we as the operator, hold bytes that do not decode. The security value of this is real and large — it is why hosting a customer's books is an architectural promise rather than a policy one — but it arrived second, as a consequence. The chain of custody behind it runs from a sealed build process (binaries produced under multi-person control, so that what runs is provably what was reviewed) through the transit and at-rest layers, down to a deliberately manual, multi-person ceremony at the root — on the reasoning that the origin of trust cannot live inside the machinery it anchors.

One historical note, included on purpose. Early project documents stated this pillar backwards — Trust Chain as the foundation, the other two following from it. A later examination caught the inversion, corrected it, and recorded both the error and the correction in the permanent design record. We mention this for what it says about method: the derivation chains in this project are maintained as live arguments that can be found wrong, not as lore.

The promiseForever Compatibility — the promise stated as engineering

The three pillars converge in one customer-facing promise, called internally Forever Compatibility: a business's installed state is never broken by an upgrade, and any version can interoperate with any version, in both directions. The project decomposes this into three precise commitments — the stored binary format remains readable forever; every identity ever issued remains resolvable forever; and the meaning of what an identity resolves to is never silently changed. The third is the one that keeps designers honest: a violation of the first two produces an error; a violation of the third produces a wrong answer that nothing detects. There is no two-out-of-three — breaking any one breaks the promise.

Two consequences of this promise are easy to miss and worth stating. First, it must cost nothing at runtime: no translation shims, no registries, no per-version mediation — at this scale a compatibility tax that grows with the installed base is a disqualified design, so compatibility is engineered as a structural property checked at boundaries, not a service performed on every access. Second, it is asymmetric in time: until the project's first committed release, positions can still be revised cheaply; after it, every released interface and identity is permanent. The project's own phrase for that moment treats release as the act of permanently expanding a forever-promise surface — which is the real reason so much design is being settled before the system meets its public, and the honest answer to why a project this size is this old without being loud.

06 — The shape of the system

The shape of the system.

This is the longest chapter, and the most selective. The full design record runs far beyond what an hour permits; what follows is the set of structural decisions that, in our judgment, lets an experienced engineer infer the rest.

The tiersFour tiers, and a rule for what gets compiled

The system is organised in four tiers. At the bottom is the Amrit — the compiled binary, one native instance per platform. Above it the Nabhi — the mandatory loadable baseline that every application type shares. Above that, Applications — the business products themselves, expressed as loadable logic. Above that, Customisations — extensions by third parties and end users. Everything above the binary is data, not code in the conventional sense: authored logic, loaded and executed by the runtime, upgradeable without a binary release.

One rule governs the boundary, and it is enforced as a test rather than a preference: the binary contains only what is structurally forced to be there. Exactly three things qualify — the layer that touches the operating system's sockets (because the data-in-transit guarantee must be applied before bytes leave the process), the layer that touches the operating system's storage (the same argument at rest), and the minimal bootstrap that loads the first loadable logic (because the machinery for loading cannot itself be loaded). Everything else — almost the entire communication stack, almost the entire user-experience stack, most of the data stack, all application logic — lives above the binary and evolves without touching it.

The commercial reading of that rule is the point of it. A binary upgrade across two hundred million businesses on fourteen platforms is a planetary event; every capability placed in the binary is a permanent, irretractable commitment carried by every installation forever. So the binary is kept minimal not for elegance but so that it can be the slowest-moving thing in the product while everything above it moves freely. The boundary decisions are watched commercially, not just technically.

Platform isolationOne codebase, fourteen platforms, proven by bits

Native delivery on fourteen targets from one codebase fails by a thousand small entanglements unless isolation is provable. The project's standard is deliberately brutal: change anything in one platform's code, rebuild everything, and every other platform's binary must come out bit-for-bit identical — not functionally equivalent, identical, because "functionally equivalent" is where contamination hides. Three tests enforce this: a change test (touch one platform, only that platform's binary changes), a clean-rebuild test (no changes, no differences), and an addition test (a new platform requires only its own new code plus build configuration, touching nothing that exists). Meeting these tests forces platform-specific code into completely disjoint compilation units behind a finite, formally specified contract — conditional compilation inside shared files fails the proof and is therefore absent. There is no runtime indirection paying for this; the isolation is resolved at build time.

ExecutionThe execution model: a compiler that cannot fail

All authored logic above the binary compiles to instruction streams executed by the project's runtime. The compilation is split in two on purpose. A build-time compiler does everything that can fail — parsing, validation, cross-reference resolution — and fails there, in front of a developer. A startup-time compiler inside the binary does only what cannot be done earlier — resolving durable identities to runtime addresses — and is constructed so that no step in it involves a decision that can go wrong. The consequence is a runtime invariant the whole loadable architecture leans on: runtime compilation cannot fail. At runtime only two kinds of error exist — the operating system refused something, or the author's logic was wrong — and a third category, "compilation error in production," does not exist by construction. Authored logic is written in a single language across all four tiers, so the person customising an invoice format and the person writing the kernel express intent in the same vocabulary, at different layers.

ConcurrencyThe concurrency model: events pause, threads don't

The runtime's concurrency discipline can be stated in one sentence: units of work pause; threads never do. Every flow of logic is an event that owns its own state and instruction position. When a flow cannot proceed — a lock is held, a disk read is in flight, a peer has not answered — the event parks itself on whatever it is waiting for, and the thread immediately picks up other work. No thread ever blocks on a flow-level wait; there are no spin-locks and no timed locks in the model at all.

Two properties paid for this discipline. Throughput: threads stay proportional to cores while live flows number in the tens of thousands, because threads are never spent on waiting. And diagnosability: since every wait is an explicit record on a named object, the system's entire who-waits-for-whom graph is inspectable at any instant — deadlock detection is an exact graph computation, not a timeout heuristic, which is the difference between operable and not at this scale. The conventional alternatives — callbacks, green threads, async/await, thread-per-request — were each evaluated and each fails at least one of: an inspectable flow structure, deterministic state when a thread is lost inside an OS call, or the throughput arithmetic. The cost is equally real: nothing after a possibly-asynchronous step can be written inline, which is exactly why the authored language exists — it reads sequentially and compiles to the pause-resume form.

DataThe data model: ordered per object, never overwritten

Consistency is maintained at the level of the business object. All operations on one object are strictly ordered; operations on different objects proceed in parallel with no coordination — writers on different objects never wait for each other. Writes never modify data in place: every write appends a new version, the previous version remains intact until reclaimed, and recovery after any failure reduces to "the last committed state is the state" — no log replay, no torn writes, by construction. In the operated backend, each dataset lives on four replicas with writes acknowledged by two — four rather than three because the arithmetic of surviving a failure during the recovery from a previous failure demands the margin. Two industry staples are deliberately absent and worth flagging: multiple simultaneously-writable primaries (excluded because the linear version history that compatibility depends on cannot survive write-write merges), and last-write-wins conflict resolution (excluded because business records have meaning, and silently discarding one of two conflicting entries by timestamp is a data-integrity failure dressed as a feature).

OfflineWhat "offline" means, precisely

Chapter three promised that offline is engineered rather than gestured at; here is the engineering. The project separates two properties that are usually conflated. The first — working through interruptions — is a hard requirement everywhere: a transaction begun during a network blip completes locally, immediately, and synchronises later; no ordinary connectivity event may block a business's work. The second — operating disconnected indefinitely — is held as a designed capability rather than a marketed promise: its honest shape is a single device working alone, with connected services unavailable for the duration and connectivity needed at least once at the start of life; what the capability buys the user is freedom from ever having to reason about an "offline allowance." Even creation works offline: a business created with no connection receives a provisional identity — the project's own image is pencil — which is later confirmed, "inked," into the global namespace without breaking a single reference made in the meantime. Reconciliation after a disconnected period is built on the version lineage from chapter five: divergence is detected exactly, not guessed, and resolved by authority and by domain rules — never by timestamp.

The edgesMeaning at the edges: the world's messy data

A system whose data carries meaning internally still has to meet a world whose data does not. Two design surfaces handle this, and both say something about the project's character. The first is what the project calls the masterless experience: a business should be able to refer to a product, a customer, a bank, or a unit of measure as if it already exists — anchored to shared reference catalogues at very large scale — rather than building its own master data before it can record its first sale. Two businesses anchored to the same shared identity interoperate mechanically even though each calls the item something different; and because of the merge-and-split axioms of chapter five, the catalogue can keep correcting itself forever without breaking anyone who anchored early.

The second surface is ingestion — bank statements, government portals, spreadsheets from a supplier who will never be structured — and it is designed worst-case first: the baseline is zero assistance, a user manually shaping arbitrary data, and that baseline must already beat manual re-entry. Assistance is layered above it — learned mappings, shared identities, user-authored rules, suggestion-only matching — under one non-negotiable invariant: assistance never reduces the user's ability to override completely and operate manually. The project is also strict about a distinction most products blur: where a durable shared identity exists on both sides, an alignment made once is a mapping and holds forever without asking again; where only strings and heuristics exist, the system only ever suggests, and calls it matching — because a system that calls everything "mapping" is quietly promising what it cannot keep. The stated objective is two-part: better than manual even with no assistance at all, and every subsequent arrival from the same source cheaper than the last.

CommunicationOne model from same-process to cross-planet

Application logic posts a request to a destination and receives a response. Whether the destination is in the same process, on the same LAN, or across the world behind an unreliable link is invisible at the logic level — absorbed entirely below, by the owned protocol of chapter four, its routing tiers, and its reliability machinery. The same discipline appears at the operating-system boundary, where one lifecycle model with a small set of internal signals absorbs every platform's distinct vocabulary of starting, stopping, sleeping, and being killed; and at the error boundary, where the project's standing rule is that any OS error it cannot interpret with certainty is treated as recoverable and retried with discipline — the code for the unknown failure was written first, and is the code that survives forever.

SpeedSpeed as architecture, not optimisation

The performance standard on the device floor is treated as a property of the architecture, with three named anti-patterns ruled out at design time everywhere: searching where the design could seek (linear scans against identified data), touching disk where memory serves, and re-translating identifiers at runtime (every durable-ID-to-address translation is paid once, at load or compile time, never per access). Layer-by-layer speed is necessary but not sufficient; the composed overhead of the whole stack is budgeted before construction, because a stack that is fast in every layer and slow in composition is discovered too late to fix. Where the model has been measured, the measurements are kept with their context: a communication-path prototype on a commodity cloud ARM machine sustained on the order of a million protocol-validated packets per second with a quarter of the CPU, bottlenecked by kernel buffer tuning rather than by the design — evidence, not proof, and recorded as exactly that.

07 — How the work is done

How the work is actually done.

Method is usually the least credible chapter of a document like this, because method is easy to claim. We will keep the claims short and spend the space on the mechanisms that enforce them and on evidence from the project's own record.

Design firstDesign is finished before code, and "finished" is defined

The sequence is design, then architecture, then code — held strictly enough that each stage gates the next. A design is considered finished when a builder can construct from it without making a single decision the design did not make: every state named, every failure ordered, every unwinding path stated, the unknown-cause failure designed first at every external boundary. Anything less is direction rather than design, and direction gets completed in code, under deadline, invisibly, by whoever happens to be typing.

The enforcement is concrete rather than rhetorical. Between an interface and its implementation sits an artifact the project calls a skeleton: real, compiling code that expresses the design's flow with stubbed bodies. If a skeleton cannot be written, the design has a hole — found before implementation, by construction. Different people write different skeletons against the same interface, testing the contract from multiple angles before anyone writes the real thing. Exploratory code exists constantly, in scratch space, and never acquires production inertia.

No trade-off reflexThe priority question is refused

When two requirements appear to conflict, conventional practice weighs the trade-off, picks a winner, and documents the loser. This project treats an apparent conflict as a signal that the design has not gone deep enough, and the required response is to go deeper until a layer is found where both requirements hold — or until the question is unasked: dissolved by a decision at a lower layer that removes its preconditions. The canonical internal example: speed and financial-grade privacy looked irreconcilable until the cryptographic boundary was placed so the hot path runs inside it rather than crossing it — after which there was no trade-off left to weigh. The project's hardest wins are mostly problems that no longer exist rather than problems heroically solved, and the previous chapters contain several: data that never migrates has no migration problem; a network protocol with versioning in its first byte has no version-negotiation problem.

Worst case firstThe worst case is designed first

Across the system the same discipline recurs: define the most catastrophic case first, make the system correct under it, and treat the happy path as a special case — never the reverse. The error model is the cleanest illustration. Any operating-system failure the runtime cannot interpret with certainty is treated as recoverable and enters a disciplined retry; that code path — written for the unknown failure — was written first and is expected to outlive every specific classification added later. The same posture produces rules that look opposite and are both derived: the communication layer may never abort the process, because being offline is normal life, while the final document-rendering path must abort rather than continue, because a half-printed artifact cannot be rolled back. Neither rule is a policy; each is the worst case of its domain, taken seriously.

The envelopeTechnology sets the envelope; business chooses inside it

A standing rule governs how commercial considerations meet design, and it is worth quoting in the project's own words: "Business may choose not to do what technology enables — but it cannot do what technology prevents." Concretely: when a capability is designed, it is designed for the full space of what any user could ever need, with configuration layered on top, defaults decided last, and commercial selection recorded as an open business decision rather than baked into the architecture. Where the design record faces a genuine either-or whose answer belongs to the business, it says so explicitly and engineers both branches' shared foundation — there are open questions in the record today held in precisely that form. The discipline exists because the opposite error is irreversible: a business assumption compiled into a foundation forecloses futures that no later business decision can buy back.

AcceptanceAcceptance is owned where the promise is made

There is no QA gate that quality is handed to. Each kind of promise is accepted by the seat that made it: the business accepts that a design position means what they planned on; the product seat accepts that a real user completes real work; the design architect accepts the assembled system's structural outcomes; the build architect accepts the seam between design and construction; the developer accepts proof that the code does what it claims — where proof means tests that demonstrably fail when the code is wrong. Two disciplines wrap this. Forward acceptance: before a consequential design position is built on, it is restated in plain commercial language and confirmed — the internal test being that if a truthful launch-style description of the position cannot be written, the position is not yet understood well enough to accept. And change transparency: no previously accepted position is ever revised silently; a revision is declared, re-accepted, and every piece of downstream work that assumed the old position is flagged. Accountability runs to the bottom of the hierarchy — a junior engineer who detects a design flaw is expected to drive the refactor, and "not my area" is treated as refusal to participate, since every specialist owes adjacent disciplines enough fluency to receive their signals.

The recordThe record itself is the strongest evidence

Everything above could be asserted by any project. What we can offer as evidence is the character of the project's own knowledge base, which is maintained under rules that make honesty structural. Unresolved questions are first-class objects: marked, named, and carried in registers at the top of the design record — including, today, questions as central as the final write-path model between customer premises and our backend, deliberately held open as a business decision on an engineered foundation. Settled and unsettled content are kept on separate pages so that neither false confidence nor defensive hedging contaminates the other. Contradictions between documents are tagged as contradictions rather than smoothed over. Reversals are recorded with their reasoning — the record retains, for example, a documented change of heart on cache behaviour during failures, the corrected causal inversion described in chapter five, and the abandonment of a major UI toolkit after years of investment. Even lost design records are distinguished from open questions, because the two are closed by different means. None of this is decoration. At the scale this project intends, the design record is the institution; a record that cannot show its own tensions would have lost the property the whole method depends on — that any chain can be checked by someone who was not there when it was written.

08 — Where the project stands

Where the project stands.

This chapter is the one most documents of this kind blur. We will state the position plainly: what is settled, what is built, what is measured, and what is openly unresolved — in that order.

The project is in its sixth year. The first five were spent deliberately width-first across an unknown problem space, and the first shell of running code was discarded in its entirety. We state that without flinching because the discard was the price of distillation: what it bought is the permanent floor the project now stands on — the three commitments of chapter five, frozen with named revision conditions; the four-tier composition and the compiled/loadable boundary, settled and recently re-confirmed in a formal registry of the system's components; the platform-isolation machinery; the execution, data, and communication models of chapter six. The project today works from foundations, not toward them.

What is built and measured. The foundational subsystems are in staged construction — the project builds in shells, each shell a running system that proves a defined set of properties end-to-end rather than a percentage of features. Where performance claims exist, they exist as recorded measurements with context: the communication path prototyped at the order of a million validated packets per second at a quarter of a commodity machine's CPU; the transit-security layer benchmarked at roughly thirteen times the conventional stack for our profile; platform validation tracked in explicit matrices in which unverified combinations are recorded as unverified rather than assumed. The same record-keeping that marks open design questions marks open engineering ones — including, candidly, single named blockers on the critical path of end-to-end operation at the time of writing.

What is openly unresolved. Chapter seven described the registers; here are the kinds of things in them today, so the candour is concrete rather than claimed. The final write-path model between a customer's premises and the operated backend is held open as a business decision, with the downstream engineering deliberately built to support either resolution. The deployment-model surface — defaults, switching, migration between hosted and on-premises — carries a register of several dozen open questions, preserved as questions. Two cross-cutting problems are named at the top of the design record as unsolved: how upgrade delivery is scoped so that a change relevant in one geography produces no event at all elsewhere, and how cross-application versioning preserves both a single version line and a bounded blast radius. Several merge-and-recovery flows beyond the foundational cases are explicit stubs. A reader weighing this project should weigh these openly; in our view, what a project admits is open tells you more about whether to trust what it claims is closed than any amount of confidence could.

What release means here. The first release is defined as a proof of properties, not a feature list — the demonstration that the commitments hold together in a shipped artifact for a deliberately narrowed first audience. The project's phrase for the narrowing is "cut audience, not scope": the foundations are not thinned to ship sooner, because everything in chapter five becomes permanent the day it ships. For the same reason this document contains no dates. Internally, progress is tracked as properties becoming true, on multiple independent dimensions so that motion on one cannot disguise stasis on another — and externally we would rather be judged on that discipline than on a schedule we would be guessing at.

09 — If this account leads somewhere

If this account leads somewhere.

We wrote this document because we are looking for a small number of senior people, and because, with the roles reversed, this is the document we would have wanted to read before deciding whether to spend an evening thinking about it.

The team is kept deliberately small — a layered project absorbs depth, not headcount — and it is organised around what each person holds rather than around titles. The seats, plainly: people who design what does not yet exist, at the level where several of this project's problems have no surviving prior art; people who hold the seam between design and construction, keeping specifications and built reality honest against each other across one codebase and fourteen targets; and people who build at the standard chapter seven describes, where compiling and passing tests is where the work starts. Alongside them sit two further kinds of depth: the lived reality of the businesses this is for, and the commercial aspiration the whole effort serves. Decisions that matter are reasoned jointly across these seats — conflicts between disciplines are not brokered; the group goes deeper until a path appears that is honest to all of them.

If something in this account has engaged you — a derivation you want to test, a chapter you think is wrong, a problem here you recognise as yours — write to us about that. The substance of what you would say matters more to us than the form of a CV, and we will read the rest out of how you think.

Please write to us at stella.thomas@tallysolutions.com