Launching Parts
For the last two years, T. and I have been building Parts, a mapping tool for practitioners of a therapeutic modality called Internal Family Systems1. In this modality, a therapist works with a person’s “parts”, and a common practice for therapists, as part of their note-keeping, is to put together a map of these parts, and how they relate to each other.
This is commonly done on paper, and, as new parts and new relationships are discovered in following sessions, the maps need to be updated, and changes need to be tracked. We thought it could be useful to have a digital version of this, which is exactly what Parts is trying to be.
As it is today, the software allows therapists to create multiple maps, map parts and relationships, track relationships’ intensity and parts’ locations in the body, and observe a map’s evolution across multiple sessions.
It seems like there’s some demand for this kind of tool, as we’ve had about a hundred people on the waiting list, with virtually no advertising (I did make a single post in the IFS subreddit two years ago while doing market research). Our son, E, was born in the meantime, so it took us a while to get Parts to a place where it can be safely used for real work, but a couple of weeks ago, we finally started to slowly give access to the people who had signed up2.
Here’s a (hopefully endearingly) awkward walkthrough I’ve recorded at that time, to help our users get a grasp of what they could do with Parts:
It’s scary to finally let real people use the tool we built, but it’s also super exciting to see what they will do with it, and to learn from them!
Parts is free to use during the public beta. Sign up here!
Security and data safety
Since Parts is dealing with sensitive mental health information, we’ve taken a lot of care in ensuring this information is kept safe. Data is encrypted at rest, and encrypted backups are performed daily. Both the server on which Parts runs and the encrypted backup storage are physically located in the European Union.
We also take data ownership seriously: a therapist can at any point choose to export all of their data, and deletion requests are honoured within 30 days, after which all data (including historical data) is gone from both the servers and the backups. You can read more about our policies in our Terms of Service, Privacy policy, and Data Processing Agreement.
Future plans: collaboration
For now, Parts is deliberately simple: we wanted to have the minimal set of functionality that would be useful for working IFS practitioners, but we have exciting ideas for the roadmap.
Currently, a therapist does the mapping work, and can export the map as a PDF file, which they can email to the client, as support for homework for example. We’ve had good feedback about this feature, but we want to take it further.
In the future, a therapist would be able to invite their client to collaborate on the map, enabling the client to access the therapist’s notes in their richness (with, of course, controls on what is shared). A client would be able to review the therapist’s notes, adding their own input, and making sure the next session starts from a much more thorough shared understanding.
Cool technical stuff
As the engineer on the project, I’ve treated Parts as a kind of experiment in building serious software3 that I’d enjoy working on.
Parts is a Clojure application, actually my first serious attempt at one. Working on it has forced me to learn a massive amount, and I’m more than grateful to folks like Ovi Stoica, Nikita Prokopov, Sean Corfield, Arne Brasseur, John Stevenson, Roman Liutikov, and many others, who have helped me get a sense of how to build a real Clojure app. The Clojure community is truly amazing!
Speaking of data, one aspect of the Parts architecture that I’m excited about is its bi-temporal database, which is a way to keep track of the changes an entity undergoes over time. Let’s say a Part has been created as an “Unknown” type, then later was updated to be an “Exile”, and later had some notes added to it. In a regular relational database, this would be the same row in a parts table, destructively updated over time; in a bi-temporal setup, each of these changes creates a new row, with each row having a validity period and a transaction time, which allows the application to determine which row is valid at which point in time, as well as to make corrections to past facts while still keeping an audit trail.
Parts uses a variant of the Dombrovskaya implementation on top of PostgreSQL 16, and this setup is what powers our time travel feature that allows therapists to see the state of the map for previous sessions4.
gosha
@gosha@merveilles.town
I gotta say I feel pretty smug to be able to reference “the Dombrovskaya implementation” in casual banter
Parts runs on an Ubuntu VPS at Hetzner that I manage myself. My intention was to understand as much of our infrastructure as possible: this is important to me because I want to have a clear understanding of how and where our customers’ data flows. I tried to keep things simple: the uberjar5 is launched as a systemd service, the database is old boring reliable Postgres 16, deployment happens manually over rsync, and so on.
Finally, Parts is open-sourced on GitHub at apossiblespace/parts, under the terms of the GPLv3 license6. The intention has always been for people and organisations to be able to host their own instances of Parts (for example, for a group practice), and, while the documentation is not quite ready yet, in practice there’s nothing stopping someone from running their own instance right now.
This is fun!
I’m honestly excited to work on Parts, and to see it put out in the world. For as long as I remember working in software, I always wanted to build tools that would help people doing meaningful work. Making Parts feels like a huge step towards making that dream a reality! There’s no way to tell yet if the product will be successful enough to sustain my family, but this feels like the right direction to be heading in.
If you are an IFS practitioner, and want to try Parts (it’s free to use while in beta), please leave your email address on the website, and you will receive an invite to create an account shortly after.
Let’s go!
-
The idea for Parts came to us while T. was doing her IFS level 1 training in Bristol. By hanging out on the fringe of the training, I was very impressed by the modality itself, and by the people working in it, and I was eager to find a way to contribute, in my own way. ↩
-
We consider Parts to be in a public beta phase at the moment, and it is free to use while this phase lasts. Eventually, however, we will be charging a subscription fee. ↩
-
For many years, I was frustrated with what I saw as a derivative aspect of a lot of my work: I’d follow documentation and apply existing patterns to slightly different problems. It didn’t feel unserious, exactly, but the stakes were never very high, and the work didn’t ask me to step very far out of my comfort zone. Parts, being an application supporting important mental health work, feels like a different level of responsibility altogether. ↩
-
This is shown at around the 5:51 mark of the walkthrough video. ↩
-
Clojure runs on the JVM (Java Virtual Machine), and an uberjar is JVM lingo for the single archive produced by compiling the application and all its dependencies. The JVM and the app’s uberjar are all that’s needed to run an application anywhere. ↩
-
I chose GPLv3 over, say, the MIT license because I want any forks made of Parts to remain open source. ↩