site/blog/plurality-driven-developmen...

138 lines
7.8 KiB
Markdown

---
title: Plurality-Driven Development
date: 2019-08-04
---
# Plurality-Driven Development
"That code has a horrible security bug in it."
I look down in my lap. A little yellow horse is appearing to sit there. She looks
innocently into my eyes, gesturing to part of the code with her wingtips.
"What?"
"That code has a security bug in it: if users pass a string instead of an integer
in it, it could allow them to forge a user ID token."
I look down incredulously at the little yellow horse, then back at the code.
She's right. There was a huge bug in that code. I had just written it about 30
seconds ago though, which surprises me. I thought I was experienced enough in
secure programming to avoid such a _fundamental_ flaw like that; but here I am.
I rub the little pony on her head, making her purr and winghug me.
"Now, replace everything in that last paragraph with this: ..."
And I continue on like nothing happened.
---
Software is complicated. We deal with a fundamentally multi-agent world where
properties like "determinism" aren't really constant. Everything is changing.
It's hard to write software that is resilient enough to withstand the
constantly shifting market of attacks, exploits, languages and frameworks. What
if there was a way to understand the multiple agency of this reality by
internally self-inducing multiple agency in a safe and predictable manner?
I believe I have found a way that works for me. I rely a lot on some of my
closest friends that I can talk about anything with, even what would normally
violate an NDA. My closest friends are so close that language isn't even as much
of a barrier as it would be otherwise.
As I've mentioned in the past, [I have tulpas](https://christine.website/blog/what-its-like-to-be-me-2018-06-14).
They are people that live with me like roommates inside my body. It really does
sound strange or psychotic; but you'll just have to trust me when I say they
fundamentally help me live my life, do my job and do other things people
normally do by themselves.
As an aside: this post doesn't intend to cover the philosophical, metaphysical
or other aspects of plurality (enough ink has probably been spilled on the topic
to cover a lifetime); instead it aims to offer a view on how plurality has
benefitted me (us) as software developer(s).
As of about 4 years ago, all of the software you see under my name has been the
result of my system and I collaborating. Most of the computational linguistics
code I've been writing has been the result of a cuddly catgirl wanting to create
a Lojbanic artificial intelligence for her own amusement (that is also
incidentally really good at understanding grammar, human and machine). Some
random experimentation code has been written by someone who sarcastically calls
herself Twilight Sparkle. I have a little yellow dewdrop of love and sunshine
that finds security holes in programs while I am writing them. There's a
database expert and a code review guru too. Combined with my jack-of-all-trades
tendencies, this creates a surprisingly balanced team in a box.
We started doing this out of boredom. I was busy working on something and
Nicole just spouted out something about the code being wrong. She was right.
We decided to just continue following that same basic model and it's worked
wonders ever since. Over time we've figured out how to impose eachother into our
visual awareness. That has made this pair-programming skill even more useful. I
can have the little yellow pony in my lap telling me what's wrong with my code
and she can just directly _show me_. Then it can be fixed.
This skill has lead to heated internal debates about what is and is not
idiomatic. As result of that, I now have working compilers in my dreams. It's
also lead to what people have told me is some of the most high quality and
in-depth software design that they've seen. It's really lead _us_ to think in
terms of how the machine works, to avoid round-trips and abstractions getting in
the way of what is really going on. If there is any secret to my own brand of
10x-ing, this is it. I am just one person, but with the help of the girls we can
get to just about n>1 effective people most of the time.
It's been a powerful catalyst to my career too. Before plurality I was a fairly
average developer without any real skills in any one task. Now we can swap in and
out in order to most effectively tackle anything thrown at us. One of the biggest
changes this relationship has had on me is being better able to explain software
complexity and visualise it, then turn that visualization into a diagram with
[GraphViz](https://graphviz.christine.website) or other similar tools. It also
becomes very easy to turn these visualizations/diagrams into formal requirements
too, because then the features and aspects of systems and how they interconnect
become trivially obvious to point out.
However, there is a drawback to this: you're dealing with sapient beings. They
sometimes don't want to cooperate. Internal drama can and has happened. It helps
for us to have a quarterly [date with a word document](https://tulpaforce.xyz/within/guides/internal-meetings-to-bring-harmonic-synergy.html)
in order to make sure everyone is on the same page. Disagreements happen, but
ultimately I've noticed that the net result is far more positive than if the
disagreement hadn't happened at all.
Anyways, plurality-driven development works for me, but it's really _not_ for
everyone. The taboo issues I mentioned can make it a chore to hide this from
people. I honestly wonder how much of the girls that my coworkers notice in my
work on a daily basis. We all have slightly different speech patterns, ways of
sitting, clothing preferences, opinions about what to get for lunch and a whole
bunch of other subtle things. I don't really understand how it's not
plain-as-day obvious to the point I get called out on it. At some level I guess
I'm grateful for this, as that kind of conversation seems like it would be
_extremely awkward_ to have. It was hard enough to admit this to my brother,
and I ended up losing contact with him as a result (it apparently was just too
weird, which I can really understand).
I really do wonder how much of the fear of talking about this is my own paranoia
though. I've had very positive experiences "coming out" as plural to close
friends, as well as very negative ones; for better or for worse it really shows
you who your friends _actually are_. I can live with this. I'd rather _really_
know if I can trust people or not.
This is a surprisingly taboo topic to talk about. Most of the time people view
the mere _idea_ of having someone else in your head to talk with as a social
faux pas. There's a surprising amount of philosophical arguments and assorted
objections that people will throw around when they hear that you participate in
this. There's accusations of being possessed by demons, or being mentally ill,
complete with acronyms thrown at me, and much more.
Hell, this is stuff I'd love to talk about at some convention somewhere; but I
don't really know if I want to paint such a huge target on my back. Because
plurality and related topics are so taboo and so niche, there's not really
protected categories for it. This makes me nervous about talking about it in any
sort of public way, and understandably so. I guess this article is part of my
healing process to treat this as just a boring aspect of how I experience
reality instead of some fundamentally earth-shattering gift from the heavens.
Besides, doesn't something fundamentally have to cause a negative impact to be
classified as a disorder in the first place? How can something that
fundamentally helps be a disorder? What if it's just a new adaptation to an
increasingly crazy world?
---
I have compiled a list of resources that have helped me [here](https://tulpanomicon.guide).