Introduction
Hi there!
“Look, it is already somewhat useable. You have been working on it for quite some time, it would be a pity not to publish it”.
– A good friend of mine pushed me recently.
I am releasing a preview of a hobby project of mine: Open Poiesis – building blocks of a virtual laboratory for systems thinking.
Overview
Intention of the Open Poiesis project is to create an open architecture for a virtual laboratory for modelling, simulation and reasoning about systems. Focus is on the modelling process, model reasoning, model composition and sharing of reusable model fragments.
This project is about modelling the modelling. Where the intended output is an answer to the question:
How a model of a modelling, simulation, reasoning and experimentation process looks like?
The included collection of libraries and tools that are part of the project are essential, yet they are not the primary goal. Their purpose is to reflect and verify ideas about the architecture, structures, algorithms, interchange formats and more. Learnings are captured as a systems architecture, which is constantly evolving.
Current Status
As of the time of this post, the following components exist:
- Poietic Core: Swift package that provides basis for design, design objects, metamodel, changes, persistence, arithmetic expressions.
- Poietic Flows: Swift package for Stock and Flow modelling domain and simulator.
- Poietic Tool: Command-line tool for editing and running Poietic models.
- Poietic Server: Makeshift localhost simulation server for running the PoieticFlows models.
The language of choice for the prototype implementation, which might become referential, is Swift.
The design is gradually being described in the Poietic Architecture repository which will include diagrams, specifications, proposals and more. I am not yet firmly decided on the structure though.
Goals and Non-Goals
Make people see and understand the systems of the nature and society and give them the ability to collaboratively improve the seeing and the understanding.
To achieve that, this project is based on two inter-related foundations: an open architecture of a toolkit and an ecosystem of model libraries. To get there, these are the goals:
- Describe and make tools for seeing and understanding.
- Help others to build similar tools.
- Make sure that the tools that exist out there can exchange user created content.
- Formalise model of models (metamodel) and make sure it is practical yet comprehensive, transparent yet easily processable.
- Enable a way to share, compare and compose models.
- Allow variety of opinions, scenarios and narratives to be present in an open ecosystem of the models.
- Make sure that all of the above, including user’s creations, is open and has assured continuity through formal specification.
I will write about the model library idea in more details later.
A wish: graphical interactive modelling applications (local-first).
See also: Requirements.
Non-Goals
- Performance. At this stage, focusing on performance would get in the way of making the software understandable and it would make the software hard to evolve.
- Development of modelling methodologies that are not based on graphs nor can be integrated in the graph structures.
Next Steps
My personal focus, without specific time commitment is:
- Documenting what exists, describe technical debt
- Creating diagrams of data models, data flows and other relevant aspects of the software. (Populating the architecture repository.)
- Bug-fixing what exists, no radical new features at the moment, except if needed for model examples.
- Create more models and examples. Add features, if necessary, to support those models. (Populating the examples repository.)
- Attempt to sketch a simple graphical modelling application (I am contemplating Godot).
I will be writing more about the project. Regularity is not assured. The upcoming posts that I have in mind:
- Current state of the software with focus on the technical debt and on what is wrong/not as I want it to be.
- Description of the data model, reasoning behind it and known issues.
- Detailed description of the Flows compilation process.
Getting Involved
If you would like to to join me on the journey of modelling the modelling, modelling the seeing and modelling the understanding, I would be more than happy.
If you don’t have an idea how, and if you are an engineer, the help I might need right now is code and documentation review. I have been immersed in my own code for a significant amount if time, that I am numb to many of the design decisions I made.
If you have some technical background, even playing with the toolkit and giving me feedback about the experience will make me happy.
If you are not an engineer, giving me a model suggestion, if you have an existing (stock and flow) model at hand, would benefit the project as well.
Or just give any constructive feedback, ask a question or propose a feature.
Links and Further Reading
- Open Poiesis (all): github
- Poietic Tool: github
- Poietic Flows: github, package documentation
- Poietic Core: github, package documentation
- Poietic Server: github
- Poietic Architecture: github
Closing Remarks
Why I am doing it? because I enjoy it and I feel that it might be useful. That is it.
This project is a hobby project that I am sharing with whoever might like it. I hope it might be at least somewhat useful for others. Even if for nothing else, at least the software evolution story telling and the diagrams might inspire someone.
Cheers,
Stefan