The Problem
Two hundred million businesses.
Five minutes. There is no summary at the end, because the point is to read it properly rather than skim to a conclusion.
Stay with that number for a moment before you read on, because the picture it forms in your mind over the next few seconds is the first thing this page is really about.
If the number settled into something like reach, the feeling of one fairly simple product spread very thinly across an enormous crowd, growing the way the consumer internet grows by adding more and more users onto a small shared core, then hold on to that picture, because we are about to set two more beside it that do not normally belong in the same frame.
The second picture is what is actually being counted. It is not a person tapping a screen, but a business keeping its books: its accounting, its inventory, its tax filings, its payroll. All of it has to be exactly right, because a figure that is wrong even by a rounding error, repeated across a whole reporting period, is the figure that ends up filed with the government, shown to a bank to borrow against, and finally used to feed a family. Getting that right for a real business is one of the deepest and most demanding problems in all of software. And it is not deep in just one way. It is deep in four different directions at the same time, because every country has its own laws and its own language of trade, every industry has its own accounting logic, every business runs at its own size from a single owner to many branches, and every business has its own character. Those four directions do not simply add up into a longer list. They multiply into far more combinations than any team, however large, could ever hope to write down.
The third picture is for anyone who instinctively reaches for the usual platform playbook at this point. Of those two hundred million businesses, the overwhelming majority can barely pay anything at all. This is not the smaller budget that a discount might eventually win over; for most of them, price is not a comparison they weigh up but a line they genuinely cannot cross. That means the familiar idea of losing a little on each customer and making it back on sheer volume does not rescue you here. Every new customer you win only deepens the loss, because there is no wealthier group waiting further down the line to quietly cover two hundred million small losses.
So you are now holding three pictures that almost never sit together: the scale of the consumer internet, the depth and exactness of serious financial software, and customers who can pay almost nothing. The real project lives only in the narrow place where all three overlap, and most of the moves your experience would suggest quietly die in that overlap. It is worth walking through the obvious ones, because each fails for a different reason.
- The first move is to build for the average business and let everyone else bend to fit, smoothing over the differences with a few settings at the edges and consultants to fill the gaps. This one dies on the standard the product has to meet, because every business has to feel the software was designed for it rather than merely adjusted toward it, with everything that does not apply to it genuinely absent rather than just hidden from view.
- The second move is to build a separate, tailored product for each kind of business. This one dies on the money, because a thousand different versions kept alive by a thousand different teams is a cost that the ninety percent who can barely pay could never possibly fund.
- The third move is to build the product first and treat affordability as a pricing decision to sort out afterwards. This one dies on its own, because two of the most important things are already decided in the foundation or never at all: the cheap and often years-old hardware these businesses already own, such as an aging desktop, a low-cost phone, or a patchy internet connection, and the basic cost of serving each customer in the first place.
We are not going to resolve all of this for you on this page. We will only tell you that it has in fact been resolved, for every business, without loosening a single one of those constraints, and that it was reached by building it in from the very foundation rather than by patching it together with a clever compromise. For now, we will simply leave the problem in your hands.
Here is a way to tell whether it is your kind of problem. As you read through those three dead ends, did you find yourself reaching for a solution of your own, only to feel it break against one of the other constraints a moment later? That restless back and forth, the wanting to solve it followed by watching each fix collide with something else, is exactly what this work feels like from the inside. If instead the three problems simply sat there on the page without ever pulling against one another in your mind, then this is, honestly, not a problem you need to want.
Stated plainly, with all the framing stripped away, the real problem is this. We want a single system that is genuinely the best product for every one of an enormous and wildly varied range of businesses. It has to be usable by an ordinary person, not a specialist, on the cheap device they already happen to own. It has to be so inexpensive to run that the ninety percent who can barely pay are still not a loss to serve. And it has to let all of these businesses trade with one another as live, connected commerce. Every part of that has to be true at the same time, with none of it relaxed to make room for the rest. In fifty years of steadily more capable software, no one has managed to answer all of these at once, not for any lack of ambition, but because holding them together at this scale requires something that did not exist before.
The next page is about that something: why it cannot simply be borrowed from anywhere else, and why we nonetheless concluded that it can be reached.
Why It Can't Be Borrowed
A problem with no precedent cannot be solved by bolting together things that already exist.
Seven minutes.
On its own that sounds like a slogan. So watch it stop being a slogan and turn into something mechanical, by taking the demands of the problem one at a time and seeing how each one quietly rules out a piece you might have hoped to reuse.
- The first demand is that a transaction has to carry its own meaning. For one business's invoice to arrive inside another business's system as live, usable commerce, when the two have never agreed on a common format and each has shaped its own setup independently, the data itself has to describe what it is and what it means. Ordinary data models cannot do this, because they are built on the quiet assumption that a single owner is in charge of everything and gets to define the terms. Here, no one is.
- The second demand is that two versions of the product, however far apart, have to keep working together forever. In a living network you will never get everyone to upgrade at the same moment. A business running a years-old version and a business running a much newer one still have to be able to trade with each other. If the deep decisions about identity and structure are made wrong at the start, the result is not an awkward upgrade you can schedule for later. It is a split: the network breaks into two halves that can no longer talk to each other at all.
- The third demand is that the product has to be at full strength on a cheap, years-old device. The qualities that let a deep financial system feel instant on a slow old hard drive or a low-cost phone cannot be added on afterwards. They have to be present in the way data is stored, in the way memory is used, and in the way information is read and written, from the very first decision. A database designed for a powerful machine in a server room cannot simply be shrunk down to fit this later.
- The fourth demand is that the cost of running the system must not climb with every new customer. None of the guarantees above can be promised on top of infrastructure that someone else owns and runs by their own rules. And the only way to stop the cost of serving each customer from rising as you grow is to own the layers that decide that cost in the first place.
Each demand, on its own, removes one borrowed piece. Taken together, they remove the entire borrowed stack. This is not a fondness for building everything from scratch. It is simply what we found to be true: every foundation that already exists, in order to do one of these things well, had to give up at least one of the others, and this problem allows us to give up none of them. That is what full-stack greenfield means in the most literal sense. The data model, the way things are identified, how they are stored, how they communicate, the language, and the runtime all have to be built from the ground up, because nothing underneath can be allowed to have already chosen one of these answers on our behalf. The industry usually uses the word greenfield to mean a new product built on top of a borrowed stack, which is a different and much smaller thing than what we mean here.
One consequence of all this reshapes how the work has to be done. On a borrowed stack, when two requirements collide, you can blame the stack and accept the compromise it forces on you. Here there is no stack to blame. A collision is not permission to quietly drop one of the requirements. It is a signal that you have to go deeper and find the design that satisfies both. That is why design, rather than coding, is the discipline that makes or breaks this work, why the standard for it has to be as high as it is, and why the question of whether it is even possible had to be answered honestly and in advance, rather than discovered halfway through out in the field. In a network where the winner takes almost everything, a failure found out in the open is not a useful lesson you get to learn from. It is a split in the network and an open door for a competitor.
So, having denied ourselves every easy way out, why do we believe this can actually be reached?
The honest way to face a problem with no precedent is to assume, at every step, that the answer is probably no, and then to ask exactly what would have to be true to get past that step anyway. We did this from many different starting points, each followed on its own: reaching this scale in a way that lasts, running natively on every kind of device, owning the infrastructure the guarantees depend on, the sheer variety of businesses that is far too large to ever list, making every single user feel the product was built for them, the economics of serving a majority who can barely pay, the demand that the product be genuinely loved rather than merely used, and staying coherent as every one of these dimensions keeps being stretched further over decades.
Each of these lines of reasoning was followed alone, without deciding in advance where it ought to end up. They were not steered toward agreeing with one another. And yet they converged, independently and from different directions, on the same small set of foundations. That convergence is the real evidence. A single careful argument can always turn out to be wrong, but many separate arguments that all arrive at the same bedrock give a kind of confidence that no single argument could ever earn on its own.
We will name those foundations, but only by the question each one answers, never by how it works.
- The first is the Universal Schema. It answers how a transaction created by one business can be fully understood by another, even though each set itself up independently and the two never coordinated.
- The second is the Identity Architecture. It answers how things are identified in a way durable enough that the whole network stays coherent and keeps working across versions, over the entire lifetime of any piece of data that has ever been created.
- The third is the Trust Chain. It answers how the origin and the boundaries of data are guaranteed by the way the system is built, so that trust is structural rather than a policy that can be broken, ignored, or forced.
We name them for one reason only: to show that these answers are real and specific, and were genuinely worked out, rather than vague hopes we mean to fill in later. We are not going to explain how any of them actually work. If your first instinct on reading those three lines is to want that explanation straight away, to be shown the actual design behind the schema, the identity scheme, the protocol, then notice that instinct in yourself. How they work is not the interesting part here, and wanting it handed to you is not the frame of mind this work is looking for. The interesting part is what is still unsolved.
Because our conclusion, put carefully, is not that we already have every answer. It is this. When we examined the problem as it stands today, we found nothing in the design that sets a hard limit on what can be built. None of the choices we made created a demand that we simply had no way to meet. The foundations are real, and they are hard, and each one comes with its own tough problems, none of them small. And a few genuinely unsolved puzzles are still left, the places where the usual answers fall apart against this exact mix of demands. Those puzzles are written out plainly and handed to specific people, rather than glossed over and hidden away. The work that remains is about how fully we can spell out the details, not about whether the thing can be done at all.
That last point is the one to sit with. If the line about a few unsolved puzzles still remaining reads to you as a warning, then you may be looking for something already finished to join. If it reads instead as the most interesting sentence on the page, keep going.
The Method
The reason the previous page could end in conviction rather than in hope is a method.
Five minutes. If you join, this is the air you would breathe, so read it as a description of how you would be expected to think, not of how the project is run.
It is a particular discipline for hard problems that we have used for decades. It is not a statement of values. It is the thing that decides whether a problem this size breaks a team or gives way to it.
- Find the one decision that makes a whole group of problems disappear. When a problem looks hopelessly tangled, the instinct is to take the problems on one at a time. This discipline does the opposite. It looks for a single decision, made at the right depth, that cuts across a whole group of them and settles them all at once, so that everything built on top can simply treat that entire group as already solved. A decision like that is bedrock. The three foundations from the last page are exactly this kind of decision. It is also why work that looks like it would need an army turns out not to: the variety that seems to multiply the effort is absorbed one layer at a time, with each layer handing something simpler up to the next, so the whole thing never has to be held in any single person's head.
- Unask the question. This is the move you would use most days. When two requirements seem to clash, almost everywhere else you settle on a trade-off, deciding which one wins and by how much. Here a clash is treated instead as a sign that the design has not yet gone deep enough. You refuse the trade-off and go looking for the level at which the clash simply never comes up. You make the problem stop existing, rather than solving it and then having to carry that solution forever. A problem you solve stays in the system for good. A problem you unask is simply gone. Most of the hardest wins are the second kind. Read that and ask yourself, honestly, whether turning down a trade-off that is sitting right there, just to keep searching, feels to you like rigour or like self-indulgence. Your answer tells you something.
- The design is finished before any code is written. Almost everywhere else, design means the path where everything goes right, and the cases where things go wrong, or where something no one expected happens, get decided later, in the code itself, under deadline, by whoever happens to be typing, with no record that a decision was ever made. With no stack to lean on, that simply does not work here. A design that leaves the rare and the unforeseen cases unspecified is not a design at all; it is a direction. The standard is that the design genuinely settles the problem, including the cases where things go wrong and the ones no one saw coming, before a single line of real code is written.
- Correctness has to be proven, not hoped for. The customer is often a small business with no IT staff and no one to turn to for a second opinion when its records quietly go wrong. A fault found months later, after the books are closed, cannot be put right. So the bar is not a low, well-managed rate of faults. The bar is that faults can be caught at the moment the code is built, and shown to be caught, not merely hoped to be. And in a network where everyone trusts everyone else, a single piece of quietly corrupted data is not just one customer's problem. It is a crack in the very thing that allows the network to exist at all.
- Speed and simplicity are built in, not added on later. You cannot tune speed into a slow design after the fact. It is either a property of the foundation or it is missing. And simplicity here does not mean stripping everything back to the bare minimum. It means that every person, in their own situation, meets a product that feels built for them, with everything that does not apply to them genuinely gone rather than just hidden from view. Both of these are commitments made in the structure itself and checked when the work is accepted, not a coat of polish added at the end.
- Progress means properties becoming true, not features going out the door. A property either holds or it does not, and you cannot slowly pile up progress toward it. There is a phrase for the whole attitude: taking off is optional, but landing is mandatory. No hard problem is put off in the hope that momentum will sort it out later. Each one is worked all the way down to the level of how it will actually be built, before anything is placed on top of it.
None of this is offered as reassurance. It is offered so that you can test it against yourself. If these read as rules you would chafe against, that is worth knowing now. If they read instead as the conditions you have always wanted and have rarely been given, then the last page is where you would sit.
The Work
The project is built by a deliberately small set of senior people, organised around what each person holds rather than around a management chart.
Five minutes.
Three of those roles are the ones this introduction was written for. We use job titles, but the titles mean something specific here, and probably not what the same words mean elsewhere. That mismatch is deliberate. If you find yourself bringing in the usual industry meaning and then having to correct yourself, that correction is part of what we are paying attention to.
Designs the thing before it existsDesign Architect
You work at the level of structure, across both the design of a problem and the architecture that follows from it. You take a problem whose answer is genuinely new, decide what has to be true at the foundation for it to be solvable at all, and spell it out completely enough, including the cases where things go wrong and the cases no one foresaw, that it can be built without anyone quietly inventing the missing decisions in the code. This is small, deep work. It cannot be split across many hands, because the design decisions lock into one another, and pulling them apart produces an architecture that does not hold together. You are the person who is comfortable being told to go deeper, rather than to pick a trade-off.
Makes the design buildableBuild Architect
You hold the contract between what was designed and what actually gets built. You turn the intent of the design into precise specifications a developer can build against, you make sure the promises and the specifications truly match, and you own the chain of consequences that any change sets off, across four families of operating systems, in one single coherent codebase, as it keeps growing. This is not project management. It is architectural authorship at the point where design meets construction, and it is what keeps that join honest.
Builds at the standardSenior Developer
For you, the code compiling and the tests passing is the start of the job, not the end. You deliver code whose correctness is shown rather than hoped for: written so that a wrong state cannot even be expressed, proven to meet its contract, holding up on the slow device and the unreliable connection, and able to recover on its own when the power cuts out in the middle of writing, because there is no one for the end user to call. This is the one role that can grow in number as the system grows, and the standard travels with every new pair of hands.
Two more senior roles work alongside these three. One holds the lived reality of the businesses and the people who actually use the product. The other holds the commercial ambition the whole thing has to keep serving. Together with the Design Architect, these three reason as a single unit on every decision that matters.
A few things about how the room works, because they are unusual and they are the point:
- The hard decisions are made together, not by handoff. A small group reasons together, deeply, at the same time. The decisions are not made by passing work from one person to the next, and not by one discipline writing a document for another to react to. A decision that is right for one discipline and wrong for another is not yet right.
- Conflicts are not brokered. When two disciplines disagree, nobody picks a winner. The group holds the tension and keeps going deeper until a path appears that is honest to all of them. This takes real respect across disciplines, and enough understanding of each other's world to actually take in what the other is saying. Saying "that is not my area" is treated as a refusal to take part, not as healthy specialisation.
- You answer to the work, and you have a person who is your home. The discipline that shapes and accepts your work is kept separate from the person responsible for your growth and where you are placed. You are nobody's status reporter, because the state of the work is visible in the work itself. The relationship with the person who is your home is about you, not about your week.
- Depth is a destination, not a stop along the way. The deepest expression of a craft sits as an equal to senior leadership, not on some lesser track. You are not expected to become a manager in order to be valued.
- In return for total freedom, you give up every excuse. There is no legacy to blame and no framework that made you do it. When a foundation turns out to be wrong, it is wrong because of a decision somebody made on purpose, and the quality of the thinking is the only thing that decides the quality of the result.
Here is where the project stands. It is years in. The foundations are settled, and the reasoning behind them is firm. What remains is, for the right person, the most interesting part: turning those settled foundations into a built system at a standard that does not bend, and solving the genuine open puzzles that are still live. We have said nothing about timelines or release scope. That is not what would draw you, and it is not what this is about.
This introduction has given you enough of the problem, the reasoning, and the discipline to judge two things: whether this is real and reachable, and whether it is yours to want. It has been deliberately sparing about the mechanisms, not to be coy, but because they are the real substance of the work, and the honest way to meet them is in conversation, where they can be reasoned about properly rather than skimmed.
So the next step is not another page. If something here has stayed with you, most likely a question you have not been able to put down, or a place where you can feel two of these constraints pulling against each other and you want to know how the third move was made, then write to us about that. Not about your credentials; we will read those out of the way you think about the problem. Tell us the question you cannot stop asking.