The Hacktivist's ABCD

admin Saturday February 27, 2021

This week I witnessed an exchange on KDE's community mailing list. Someone made a reasonable request, quite decently formulated. Someone else, who visibly didn't appreciate that request, sent a reply which could easily have sparked a heated debate.

Thankfully, one respected elder intervened before the discussion degenerated.

Eike Hein wrote:
Come on everyone, we can do this much better.

So far, this may seem boringly familiar to those into online social production projects. In fact, the problematic reply wasn't even particularly inflammatory.

What I found striking is that the diskussion didn't involve random people. All of the 3 previously mentioned participants master the discussion's language (English) and are recipients of Akademy Awards. In fact, as recipient of a 2013 Akademy Award, Eike Hein was one of the judges who awarded the problematic participant with his own award the following year. The problematic participant is neither particularly young, nor new to social production or even KDE, with over a decade of involvement in KDE. The most striking was to see that this fairly experienced kontributor, who was rhetorically but clearly complaining about excessive load, had−ironically−replied not even a ½-hour after the request.

But a small research showed that my surprise could be partially rooted in a cultural difference. French-speaking kids are taught to "turn their tongue 7 times" before speaking. But the Anglosphere having apparently no equivalent proverb, perhaps it is less surprising to see an adult New Zealander without such a notion. So I thought Hein's reaction could be specified.

The Art of Boringly Calm Discussion

While the following initially felt too childish to share, I remembered I developed my current habits through years of experience. So I thought sharing the more elaborate−although still obvious−following approach, applied to the context of online collaboration (on free software), could speed up that development for some readers.

I am not sharing my exact program, which−having to run on a ridiculously old host−required highly dirty micro-optimizations, but the pseudo-Java code for my generator of boring replies, hereby released in the public domain. Sometimes, the generator saves time by saving from having to write at all, but its main benefit is to improve communication quality.

import HumanEmulation.Feeling; import HumanEmulation.Judgment; import Life.*; import Internet.Message; // FIXME: Unlikely to build without --leniency=max public class FingerSaver { public static void main(String args[] ) throws Exception { Message incoming = Message.getLatest(); incoming.read(); if (! incoming.replyWarranted()) { System.exit(Feeling.HAPPY); } if (incoming.isUrgent()) { incoming.processDirectly(); System.exit(0); } Thread thought = new DeepThinker(incoming); thought.start(); // If we use Thunderbird with XNote++, we could store quick ideas about what to reply as a note. String skeleton = thought.getFirstReplyIdeas(); // Reply versions Message initialVersion = null, previousVersion = null, latestVersion = null; do { if (latestVersion != null) { previousVersion = latestVersion; if (initialVersion == null) { initialVersion = latestVersion; } } Integer tongueTurns = 7; feeling = Feeling.getCurrent(); tongueTurns = tongueTurns + feeling.getAnger(); /* Increase quality proportionally to the number of readers Also reduce collision risk TODO: Make logarithmic rather than linear */ tongueTurns *= Message.getPeopleInDiscussion(); if (Message.isEmail()) { // We won't be able to delete or modify our message if we send it too fast, so better play safe. tongueTurns *= 2; } // Let our deep thinking thread do its magic while we're eating, showering, exercising, commuting, etc. thought.ponderForHours(tongueTurns); wait(); // It may take some more time before HumanEmulation wakes us up if we're busy or not feeling good. Array<Message> repliesFromOthers = incoming.getReplies(); if (! skeleton.worthWriting(repliesFromOthers)) { throw new Exception("We're exceptionally smart; we managed to let someone else do the job!"); Life.enjoy(); if (Life.getFreeTime()) { /* If we saved so much time that we're now feeling guilty about having some free time, use it to attract new recruits in our team. This should be easier now that our team has quality communication and looks like a growth opportunity for prospects, rather than an immature and overwork-frustrated crew. */ recruitNewColleagues(); } Feeling.stress--; System.exit(Feeling.HAPPY); } incoming.read(); // WARNING: moving this out of the loop will NOT optimize! /* To be truly evil, if others already made some of our points, remember to thank them, to encourage them to keep doing our job in the future! */ // We usually store a reply as a draft in an MUA. if (latestVersion == null) { latestVersion = incoming.generateReplyFromIdeas(skeleton, repliesFromOthers); } else { latestVersion.readCarefully(); /* If the sender discussed a valid problem and it's necessary to discuss timeframes, we can use this opportunity to try enticing them to help mentioning that more *skilled* manpower would speed up. */ latestVersion = incoming.reviewReply(latestVersion, repliesFromOthers); } } while (previousVersion == null || ! Judgment.areAlmostTheSame(previousVersion, latestVersion)); Message reply = latestVersion; if (reply.getValueToReaders() < reply.getCostToRead()) { System.out.println("Aborting due to negative net value"); System.exit(1); } /* We ended up having to reply anyway, but at least, if others replied first, we have less to write, and we let them do some research and practice their writing skills, so we get left with even less on our plate next time. And the best part is that with all these tongue turns, we're more likely replying during the weekend, which means it's more likely recipients will read us on a weekend and will have a cooler reaction, even if they're lacking FingerSaver! */ reply.send(); /* If we're lucky, our reply was exhaustive and boring. We won't need to answer follow-up questions or clarify/justify what we wrote. So we shouldn't be back here for a while, but play safe. */ sleep(A_BIT); /* Wow, we managed to write an incredibly insightful reply, which makes us look much more brilliant than the stupid program we're using! With all the time we saved, we can integrate the people who will volunteer to help us. And in case these take some time to show up, while they're digesting the full extent of our genius, we can validate that our issue tracker properly reflects our load level, and if it's really urgent, call for help. */ Feeling.stress--; // We won't have to defend having said something stupid. /* We're bad judges of our own emotivity, but we can at least see how much we improved to estimate the minimum emotivity we were under. */ Float climateChangeReductionFactor = Judgment.getFlammability(initialVersion) / Judgment.getFlammability(latestVersion); /* In case our initial reaction turned out excessively inflammatory, adjust our system's balance between longevity and performance. */ System.throttleByFactor(climateChangeReductionFactor); } } // TODO: Expand to help truly healing from burnout. At this point, this only aims to help with overwork.

Permalink: https://www.philippecloutier.com/blogpost136-The-Hacktivist-s-ABCD