Creating learning environments — starting with wealth transitions

After years of wandering, I think Clojure/ClojureScript/Datomic are the right tools to build my systems — largely because of the community. The advent of LLMs makes a difference too.

The back end of my system will be a interrelated set of evolving knowledge graphs. Initially, the front end will be a chatbot.

If you’re interested, here’s a 1000-word backgrounder:

More Detail

About My Work
I am building a practice and software that create learning environments for families dealing with transitions of wealth. In the US alone, $58 trillion dollars is changing hands over the next 25 years. The vast majority of these transitions will fail (>80% conservatively). The financial losses are far from the most significant. The problems these families face are deep, wide, and legion. You can probably imagine more than a few. You’ve likely witnessed some first-hand.

These are very complex systems with functionally-overlapping, semantically-diverse paradigms:

  • embodied individual survival structures,
  • parenting philosophies (or lack thereof),
  • life-long family dynamics,
  • law,
  • accounting,
  • trust administration,
  • asset management,
  • C-suite concerns,
  • addiction distractions,
  • medical issues,
  • psychology,
  • philanthropy,
  • religious convictions and strictures,
  • and more.

These families have to try to make sense of situations they will only see once — and they usually encounter them very late in their lives. There are no practice runs or do overs, and essentially no warning systems.

My work is a calling, not an ambition. The only thing worse than pursuing it is not pursuing it. It is a difficult, unlooked-for odyssey — and now a central part of my life’s work. I am both reluctant and existentially committed.

Though wealth transition work is more than enough, I anticipate having an impact on other fields. The model has to cross disciplinary boundaries and is thus inherently integrative.

That’s the basics. There’s more I won’t share here.

Some Background
I graduated summa cum laude from Ohio State’s CIS program a long time ago (I’m 57). I’ve done database work for decades, from design and implementation to all sorts of administration. I’ve worked for USPS, IBM, AT&T, a bunch of .coms, and, most recently, single-handedly built a logistics dispatch and shop management system. I’ve also been through a multi-million dollar family wealth and enterprise meltdown. I was utterly consumed by that conflagration. I learned about the dearth of wealth transition resources from inside that dragon.

Through it all, I’ve been dealing with my oldest child’s spina bifida. Her condition has compounded life’s complexities. Her needs have roiled plans again and again. My two younger children have suffered from the neglect such demands engender. Marriage under these conditions is also very difficult. Most fail and I know why.

I’ve been taking runs at dealing with wealth transition issues for years because there are precious few integrated resources and essentially no tools (not counting genealogy diagramming programs). Standard ERD analysis doesn’t cut it. I discovered graph tech and ontological design about 8 years ago. Resources like Stardog and Protégé were still both new and niche. Folks still seemed to be recovering from the collapse of the semantic web vision.

Anyway, through it all, I’ve struggled to tack down a model that answered the needs. On top of it, I’ve never been a day-in-day-out app developer. As a consequence, getting a full system running has been tough. Ruby, raw D3, and yFiles on top of the OWL API among others have been too much for me. LLMs are making real-world implementation easier for a modeler type. Even so, without an interesting model, it was hard to justify enduring the learning curve to deploy anything.

After thinking I had to build on Apache AGE or Neptune or neo4j, my last draft of the model was in a much-evolved Stardog. While the reasoner is a compelling feature, the troubles were two fold:

  1. The number of languages is a pain. RDF, RDFS, OWL, and SHACL are all required just at the model level. I’d have to figure out application and UX separately, each with different communities or lack thereof.
  2. The Stardog community isn’t as broad or as welcoming as Clojure’s. From what I can tell, Stardog’s biggest customer is NASA. Maybe that’s where the name comes from? Anyway, neophytes have a tough time, at least I did. I just couldn’t seem to connect with anyone. I guess they are all on high-end, big-budget projects. And again, they can only help with the database.

I’m only one guy right now. I need leverage and community.

Where the Work Stands
I have a core model. It takes the shape of a set of knowledge graphs on the back end. I’m starting with a chatbot front end.Working with model content is next. For this round of understanding, I need real-world content from real-world users. There is no shortage of test subjects or situations for modeling. The consultancy and tooling have to evolve together.

I have local-dev working. I’m now banging away at AWS so I understand that architecture and security model. As Stuart Holloway says, AWS really is a web-based OS. Getting a system working feels like climbing an Alps-like learning curve. It is a discomfort with which I’m unenthusiastically comfortable. Fast is slow and slow is fast.

Why Clojure/ClojureScript/Datomic
While I don’t consider myself qualified to judge, here’s what I see…

At the highest level, it’s about culture and philosophy. Clojure and Datomic seem to be the products of a coherent, cohesive vision — a vision that is practical, human, and (hopefully) comprehensive. Integrated thinking leads to integrated environments. Given how big this is to me, I need every bit of leverage I can get. That’s why I’m here. So far, it seems to be a sound decision. It feels like watching one of those movies where the writer and director are the same person. Am I worried about Rich leaving? A little. I can only trust he saw to a governance structure. My experience with succession engenders sensitivities. We’ll see what the spidey sense says.

In short, Clojure’s full(er) stack and unusual culture and community lead to my investment here.

Thank You
This community is different. I’ve already benefited far more than I could have hoped. I’m eager to help where I can. As corny and unprofessional as it sounds, this feels like a long-term home. I think this project is finally doable. Thank you.

I’m hanging out on Slack, too.

edit: add link to Slack profile


On a reread, my words seem to convey I have a clue how to do what I need to do. I don’t. This looks like a very long road. One step at a time, having no idea how many steps it will take.

As corny and unprofessional as it sounds, this feels like a long-term home.

I have a bit of the same feeling!

Learning how do do alll these things in practice is hard, even when Clojure and Datomic are good tools. AWS does a lot, but requires a deep understanding.

It seems like you have more than enough new stuff to handle at the same time. Regardless, I’m going to throw in two more tools I’m currently excited about:

  • Clerk let’s you build the user interface best suited to your problems, in the case where a REPL isn’t enough:
  • Electric Clojure is a Clojure dialect for building reactive user interfaces, implemented as clojure macros:

Interestingly, both Clerk and Electric Clojure are built around reactivity. One applies reactivity to build user Interfaces for your own development workflow. The other applies reactivity for building end user applications.

On an end note, interesting that you have experience with semantic web technologies (RDF, stardog, OWL). I share the impression that in the Clojure community, modeling data with entities, attributes and values is a practical tool for solving real problems. The fact that Datomic and Clojure plays so nicely together says a lot. If Datomic queries had been in a separate text language (like SPARQL), I think a lot of the magic would have been lost.

Welcome to the Clojure community!

Thank you isn’t enough. Particularly at this stage, connection is precious. Really.

Thank you for the tool suggestions.

Clerk Is Clerk complementary to Joyride or a replacement (if indeed I know what I’m asking)? I haven’t touched Joyride yet.

Electric It looks cool. I haven’t touched ClojureScript yet either. Is Electric complementary to or a replacement for ClojureScript?

Semantic Web It was Stardog’s implementation of Datalog that reminded me of Datomic and led me back.

I am in here for two reasons: community and the consistency across Clojure, ClojureScript, and Datomic. Well, the consistency arises from community. So, one reason.

Again, thank you for reaching out. Feeling welcome matters.

1 Like

Thank you isn’t enough. Particularly at this stage, connection is precious. Really.


Clerk Is Clerk complementary to Joyride or a replacement (if indeed I know what I’m asking)? I haven’t touched Joyride yet.

I’d say Joyride and Clerk are complementary. Caveat that I don’t use Joyride and VSCode day to day:

  • Joyride runs within your Visual Studio Code process, and lets you write small snippets to insert the current date, insert an UUID, or insert something else you might need.
  • Clerk is editor agnostic, and runs within your JVM process. You can start a Clerk instance from your REPL. I tend to add a snippet like this in most of my projects:
;; in `user.clj`:

(defn clerk-start! []
  (let [clerk-serve (requiring-resolve 'nextjournal.clerk/serve!)
        clerk-port 7686]
    (clerk-serve {:browse? true :port clerk-port})))

Then I can run (clerk-start!) from a REPL to start up clerk, and use a hotkey to view the current file with Clerk. Clerk lets you build documentation where code and prose is weaved together, like in Emmy’s documentation. But the documentation isn’t an afterthough — you can develop it live, as you are making your project. I like using the REPL when I’m working with small pieces of data, and reach for Clerk when I need more depth. The Clerk Book is also made with Clerk.

Calva Notebooks are a Calva-native Clerk option. Though I haven’t tried it, because I don’t use VSCode day to day!

Electric It looks cool. I haven’t touched ClojureScript yet either. Is Electric complementary to or a replacement for ClojureScript?

Electric builds on top of JVM Clojure and ClojureScript. It can be compiled with Shadow-CLJS, a tool for working with Clojurescript applications. The code you put within (e/client ,,,) blocks runs as Clojurescript, and (e/server ,,,) blocks run JVM Clojure.

Thank you.

1 Like

Do you use emacs?

Yup! I do indeed.

Joyride does a lot more than that. It’s basically “elisp for VS Code” since you can script pretty much any aspect of VS Code itself or Calva (or any other extensions that expose an API).

For example vscode-calva-setup/joyride/src/remote_repl.cljs at develop · seancorfield/vscode-calva-setup ( is a Joyride script that:

  • starts an SSH tunnel
  • connects Calva to a remote nREPL server
  • copies the Portal host/port info to that remote server

That lets you start the Portal extension in VS Code, connected to the remote server, so you have both remote evaluation from your editor and remote result viewing inside VS Code.

Joyride is very powerful!


@ChipNowacek @teodorlu It’s nice to see people talking about Datomic. I’ve not used it yet, but it is the most compelling reason to venture into the Clojure world (I am just at the outer atmosphere) to me. The best data store in the world, has barely any youtube content. And what’s there is so very little.