I’ve spent much of my time since early July making legos.
Actually, I spent much of July, August, and part of September, building something to help me quickly create the bones of new legos. Genesis—working title, maybe more biblical than I’d like in retrospect—is a project generator that knows how to scaffold new projects.
The purpose of Genesis is twofold:
- Eliminate as much of the activation barrier to creating a new lego (reusable module) as possible, so there’s never an excuse or reason not to.
- Standardize as much of new project creation and infrastructure tooling as possible.
- This includes things like project structure, linting, building, testing, continuous integration, and continuous delivery. It even includes things like standardization of GitHub repo settings and labels across projects.
I actually went through two iterations of Genesis in this time, which is why it’s taken so long. (I was originally building a custom Yeoman generator before I discovered Nx, which is what Genesis is built on top of now.) Excitingly, though, in September Genesis reached a point where I could use it to scaffold a piece of my first lego.
I’ve named this first lego Solari, after the currency of the imperium in Frank Herbert’s Dune. Its purpose is to facilitate all kinds of purchases (consumable or subscription; mobile or web) within my products, and to keep a ledger of all purchases. Long-term, other legos will ask Solari if they need to know whether or not a user has bought a particular item or has an active subscription. (E.g. If a Permissions service needs to answer a question about whether or not a user can perform a paywalled action.)
Solari is the first lego I’ve chosen to work on because purchases are the next capability I’m hoping to integrate into Midana. Integrating Solari into Midana should be one of the last steps before I can launch Midana publicly with some kind of revenue model.
Unfortunately, I didn’t make it very far on Solari before I concluded that it would need to store some of its own data about purchases (as opposed to fully rely on a third-party or set of third-parties as its source of truth). So I chased the rabbit further down the hole and started working on another lego.
This second lego is named Holocron after a holographic information storage device from Star Wars. Holocron’s purpose is to make data modeling as simple but expressive as possible while abstracting away data persistence.
Put more plainly, Holocron outlines the pattern for data modeling that Solari will use to define a Purchase and what collection of data constitutes a Purchase (e.g. purchase date, who made the purchase, what was purchased, what kind of purchase is this, when does this purchase expire, etc.). Holocron will also manage how these Purchase records are saved (persisted) for long-term reference, be that in a database or somewhere else.
Except that Holocron will do this for all of the major data types required to model the business logic of an application, not just Purchases. A lot of my legos, and most of my finished products are likely to require some persistent data, so Holocron is an extremely foundational module.
Holocron is still in the relatively early design stages, but I’ve been doing a lot of experimentation lately and I think parts of its shape (API) are starting to crystallize. There’s quite a bit more to do, however, so I suspect I’ll have my hands for for awhile, but it’s hard to estimate for conceptual work that involves heavy experimentation.
I’ve been playing with this for the last ~week-ish and progress is coming along steadily, though non-linearly. The nature of this work sometimes feels like trying to discern the name of the wind—almost like I’m a wizard contemplating the essence of something so deeply that I can express my mastery and control of it with nothing more than it’s secret name. The process sometimes requires that I just load my brain with the right information, and then let it stew in my subconscious until something halfway brilliant surfaces.
It’s challenging to say the least, and it requires a level of creative energy that I have in limited daily supply, but it’s been super fun and engaging. Once Holocron is solid enough, I’ll move back to building Solari on top of it. After that it’s likely I’ll need a permissions service (working title: Primero) on top of Solari so I can properly gate off premium features.
I’ll be thinking about how to best integrate all of this into Midana at every step. This is certainly a detour, but it’s exciting knowing that when this is all done it can be integrated into my next product in next to no time at all.