Pairing
So, every year in the September-to-December stretch, things start to get a little crazy at work and my personal projects end up taking a bit of a break as we start pushing hard on some Key Project that definitely needs to be delivered by Christmas. This time, it’s going to be… well, something internal that I can’t talk about. Best case scenario, we roll this feature out in teeny tiny little bits over the next few years, though.
[Coworker] and I are both working on the backend for this at the same time.
How to split up the work?
There’s the old gem of trying to find natural break-away points in the code and splitting it up that way, but instead we thought “what about pairing”.
We’ve tried pairing over Slack and it’s bad. It’s bad you guys. It’s not really pairing at all, it’s coding with an audience, and that audience is going to ask you to crank your text size up to 300% and not to move around your cursor too much (because whole-page-repaints are completely unreadable.)
I cannot abide, I am a fidgety coder.
So, [Coworker] and [Other Coworker] worked some of these details out, working together on a test refactoring project, and they recommended the following kit:
Miro, which we’ve been using for a while, for shared whiteboarding.
Code With Me: The Collaborative Programming Service by JetBrains for pairing.
Slack’s huddles to talk
Slack’s screen-share to share the console, which can only be managed by one person at a time
I tried it out and the experience was… good. Very good. Jetbrains’ already excellent editor has a pretty compelling built-in pairing solution.
I, for example, got to keep all of my crazygonuts Vim bindings and code style, and [Coworker] can have her own style, and they don’t conflict. We each see our own view of the code.
Which is important. As we have established when it comes to code style, I am a man of grace and sophistication:
this is a joke, obviously I code in Papyrus
Anyways, the way that it works is very like editing a shared Google Doc, except it works against an entire codebase, either of us can jump to wherever the other player is at any moment or instruct our editor to follow along with someone else, and both of us can type at the same time in the same document if we’re extremely careful.
At first we started out simple and serial, but before long we were pulling code tricks that seem almost like they should be illegal, like changing the code and updating the test for the code in parallel.
This feels uniquely powerful. I would go so far as to say that it’s significantly better than in-person pairing, as the two-people-sharing-one-keyboard strategy doesn’t allow for parallel hijinx or eyes on two parts of the codebase at once.
The only thing that I could imagine as being more powerful would be doing this in a shared space with two computers, a physical whiteboard and a small cart of caffeinated beverages and pastries.
Pairing
Pairing. I truly believe that it is actually more productive than separately coding on your own - so long as you’re drift compatible with your teammate - because it forces you to explain what you’re doing and focus on the task at hand (and ONLY at the task at hand).
In my experience, two people pairing on a project will finish it more than 2 times faster than one person on that project alone. It may seem paradoxical or unlikely, but consider that during a pair session neither person can idly check twitter or shop for pants on the Amazon dot com or really faff about in any way.
It also eliminates the eternal PR slog - you’ve brought someone along with you who’s willing to vouch for all of the changes that you’ve made. Goodbye, waiting forever for a review, hello POOPIN’ THAT CODE DIRECTLY INTO MASTER.
And all of that has even proven true with our wildly inferior Slack-based pairing. The only reason I won’t do it more is because I absolutely hate pairing over Slack. For the reasons we laid out earlier. Which this tool solves.
There’s another problem I have with pairing, though, a problem that Code With Me doesn’t solve.
While it is absolutely unmatched for bulldozing through complicated problems, doing it for any length of time is absolutely exhausting. I am reluctant to admit that my focus wanders like an unruly toddler and forcing it to sit still and pay attention for more than a few hours leaves me feeling burnt. This is another reason why I avoid pairing. I just don’t have the fortitude to keep doing it.
Training & Information Transfer
Yes, this is the other thing I want to talk about wrt pairing. It’s also a stupidly powerful tool for skills transfer. Leaving the keyboard aside and simply operating a co-worker like a meat puppet is a great way to learn them some skills - and, in the same way, I have had co-workers in the past where watching them work has actively felt like an upgrade to my synapses.
And this is important because, well, we’ve got a lot of headcount to fill in API team, and I want to get our new folk up to speed - not just with our codebase but also with our, like, culture, and customs, and weird in-jokes. Our so, so many weird in-jokes.
Anyways
I’d love to find a way to activate this kind of powerful productivity on Groovelet, but… well, when would I ever be able to schedule it? I’d love some collaborators on this project, but there are some problems like “I am an auteur” (translation: “I am a hyper-opinionated diva and often difficult to work with”), “I prefer just to code and see where that leads me” (translation: “I don’t have any design documents and I have no concrete idea what I’m building”) and “I generally only work on this between 11-3 in the morning“ (translation: “I have insomnia”).
Hey, Deltarune launched!
https://kotaku.com/toby-fox-deltarune-chapter-2-is-free-because-the-world-1847702225
I was planning on dropping everything to play Eastward, which also launched just last week, but… well, Deltarune launched, so I had to drop everything to play it.
Crikey it’s good. Undertale was good, Deltarune is good, you… presumably already know these things.
The soundtrack totally slaps. Go play this game pls.