7.7 KiB
title | date |
---|---|
Plurality-Driven Development | 2019-08-04 |
"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. 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 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 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.