====== Plip Plop Programming ====== ====== Motivation ====== Plip Plop Programming is my personal variation on the concept [[wp>Flow-Based_Programming]]. Instead of software that flows, it is software that drips over time. This allows the software to run on a human timescale. The motivation is taken from the book "[[https://dl.acm.org/doi/10.5555/293970|Business Process Implementation]]" by Michael Jackson and Graham Twaddle. > The office is involved in very many contracts, and in very many business relationships with clients, agents, suppliers and other people and organizations in the outside world. At any one time most of these contracts and relationships will be dormant: no action is currently expected either by the office or by the outside world. But that still leaves a large number of contracts and relationships that are not dormant, and roughly half of them will be awaiting some action by the office. (The other half will be awaiting some action by the outside world.) The individual policyholder has only one buildings insurance policy, and at most one claim outstanding on it. But the office may have tens of thousands of policies, and hundreds of outstanding claims awaiting some action. When we look at business interactions at the human level everything is happening at a small scale over a long period of time. Over months and years. Computers run at a large scale in very short periods. Within the smallest fraction of a second. A low cost CPU is capable of processing ten of thousands of transactions within a few seconds. There is a severe mismatch between the timescale of the human and the speed of the machine. Overcoming this mismatch is expensive, requiring complex programming to save and load state over time. In order to justify the cost it is necessary to work at a large scale where thousands of records are available for processing every second to keep the machines busy. This has caused a relentless push to larger scales and centralisation. Everything operates at a global scale, remote from individual humans. With Plip Plop Programming the goal is to create a system that allows low cost development at the human scale by creating a Persistent Virtual Machine that runs in human time. Robust state is maintained over months and years, waiting for the occasional activity. The hope is that such a system would lower of the cost of development, enabling work to be carried out at a small scale, decentralised and local to individual humans. Such a system is described by Jackson and Twaddle: > The fundamental purpose of the system is to support the work of the people in the office. Its rhythms are geared to human timescales, not to the speeds of disk drives or network communication links. Designing such a system presents an interesting architectural challenge. There are problems that must be solved by thinking about software in new ways. ====== Problems That Must Be Solved ====== * How do you fix problems when you cannot turn it off and on again? * How do you manage change to code that runs over months and years? * How do you anticipate everything that might happen over such a long time? Over in the following sections I'm going to explore some novel solutions for these problems. ===== Robust state that persists over time ===== ===== Creating new features without breaking existing functionality ===== ===== Fixing problems when they are encountered =====