June 15th, 2022 Infrastructure as User Generated Content By Jeffrey M. Barber

A completely valid criticism of this project could be: Adama is an over-engineered bespoke piece of infrastructure in search of a problem. Fair. I had a great conversation a few weeks ago, and one of the things that occurred to me is that I’m sitting on a super power. Namely, I solved a problem of turning infrastructure into user-generated content. Allow me to ramble, dig into this, and expand.

Adama’s super power mirrors the amazing potential of the browser. As bloated as the web browser may be, it may be the best manifestation of software is it can change on the fly and enable all sorts of interesting scenarios. The web browser is the ultimate client which can be controlled by the server, and it has clearly changed software engineering (for the better). I’ll gloss over the multitude of problems, but it is spectacular that I can ship software to anyone on the planet by just sharing a tiny fragment of text called “URL”.

It’s worth noting that the criticisms of web software are valid, and the bloated nature is an exceptional opportunity as computing continues to grow in power and the capabilities of the browser continue to expand. It’s a foolish game to bet against the browser.

The server side however is a giant mess, but things are getting better and there are many services to consume and combine to build new things. I’m a big fan of the spirit of server-less idioms yet I hold onto the benefits of a monolithic multi-tier design. Obviously, the powers unlocked by the internet and services are fundamentally transformative, but many products require serious engineering to weave together APIs and data. The demand for engineers is ever present.

Building reliable software is hard. At core, I claim there is one fundamental reason to build software in the first place: connect people: Software is a people business.

Adama comes in as this weird bespoke infrastructure for hosting board games (without any of the social proof of shipping board games). Now, board games are fundamentally complex transactions between people, but they may be among the most complex social experiences that people willingly engage in. With Adama, a single file represents the logic to build the connective glue and shared state between people.

If the browser is this nice mutable surface to drive user experiences, then Adama is a nice mutable backend to connect people. I’m using Adama to build a board game IDE, and I intend to use Adama to provide WebRTC signaling, board game logic, chat, the marketplace for board games, a game lobby, SMS bot, discord bot, whiteboard, version controlled documents, and more.

I have a strong belief in what I have. All my past and future side projects are going to feed into the vertical foundation of Adama in some way or form. It’s a small tragedy that I’m super bad at marketing which requires me to concretely describe what I have. Furthermore, I’m further struggling with the curse of knowledge and requirements since I want this to be super fast, reliable for all the scenarios, and minimize my dependencies. I’m over-engineering for funsies when I should be pushing boundaries and building community.

However, the framing on “infrastructure as a content” allows me to see the most direct path forward.

The golden path forward

With this super power in mind, it is clear that I need to stop wandering so randomly and get focused on proof. The beauty of what I have with various experiments is that I have a clear plan forward.

The first priority is to get Adama to “minimally scalable” where I only focus on capacity growth using human operators. I just need to finish the big inflight experiment while context is fresh and have a few human knobs for manual capacity management with an emphasis on alarming. The task-list is written, decisions around trade-offs have been made, a bunch of code is deployed, and final testing is happening.

The second priority is to fully embrace HTML and fix the web with RxHTML. I’m de-prioritizing how I think about the WYSIWYG canvas editor and focusing on just HTML via RxHTML. RxHTML is a new templating thing that I’m working on which I will post details about in the coming month.

The short gist of RxHTML is that I can take a HTML template and then reactively bind it to a tree such that data changes manifest into DOM updates at minimal cost. Forms can send messages to Adama establishing the essential read-write loop. Aside: I’ve considered posting about the full fledged despair I feel when working with modern JavaScript tooling, but I’ll focus the next post on RxHTML.

The third priority is to get a minimal web portal online such that people can play faster. Fortunately, dragging my feet has rewarded me with CodeMirror 6 being launched ( https://codemirror.net/ ). Here the goal is to launch three things: (1) adama script editor (using barebones code mirror and I promise to delay all the cool things I can do with code mirror), (2) rxhtml editor, and (3) a code generated debugger. These three things will be held together within a SPA using RxHTML as a common core. Ideally, the IDE will be built entirely using RxHTML.

At this point, the game is afoot and I can start launching examples to drive fun conversations. The above priorities account for my pathologies and will get some degree of social proof started for a “mutable infrastructure as user content”. I am planning the simplest game to launch of tic-tac-toe, a chat app, and a classic TODO app.

Once this minimal IDE is up and running, then any Adama developer could sign into the IDE, clone an example, and start playing. The proof becomes evident as I expand on the samples. This then informs my development and investment strategy as “samples-driven development”. From there, I can go from theoretical posts to practical content and demos.

With the skeleton in place, my more random detours can be appropriately scoped and measured (roughly). As an example, I really want to show off my WYSIWYG editor, but the gap between it and a full fledged app is tremendous. However, the gap from my editor towards “turn this JSON into a pretty image” is just a refactoring away.

I’m excited, and if you are too then join the community and stay tuned.