There are folks who would go gaga for Pairing with human, and then there are folks that don't like it. With the onset of GenAI hype, folks started to use GenAI tools like Chat GPT or Copilot as pairing tools. Forward the time to today since GenAI's public launch, we witness school going kids using it as an everyday tool for learning.
There are pros and cons to both robotic and human pairing, and this post is my my attempt to give a balanced picture of reality for you by way of sharing my experience.
To begin with I shall share two different stories of my pairing experiences with fellow beings:
Unsatisfactory Experience with Human Pairing
Me: Hey, excuse me. What is that - FactoryGirl? That sounds so wierd. What does it do and why use it?
Dev: Well, it just generates data that mimics real works. Nothing much to it.
Me: In what context it is used and what problems does it really solve?
Dev: Well nothing much. It is just another fancy library that is hot in the community.
Me: Thanks man! (I left the session trying to make sense of what I heard while ruminating for its parallel in Java world so I can appreciate it better.)
The experience didn't serve much to my expectation. Nevertheless, it did make me get back to my seat and google more about factory_girl_rails and learn more about it to see how it is used alone or with another popular library called faker. The ruby-on-rails ecosystem seemed to be fascinating in its practices. The Java/.Net ecosystem didn't have anything like it back then. If you are curious as to what it is still, then know that it is a test-fixtures library to create fake/mock data conveniently in one goto place for easy maintenance and when used with faker, it creates real-world sounding names and strings ( think ChatGPT 0.01 ;).
Enlightening Experience with Human Pairing
Dev: (coding conditionals) typed something like `if(Objects.isNull(customer)) {..}`
Me: Hey, I wouldn't use `Objects.isNull()` and instead stick to testing condition like `customer == null`.
Dev: Buddy, this is the new Java 7/8 way.
Me: No. The docs are clear on its usage to use it only as a predicate. (goes on to open up the docs and show it to substantiate the claim)
Dev: Well, I wouldn't stick to the strictly technical definition. I see == operator as an equivalent of predicate function that takes input to return a Boolean value. Besides, we code for human readability first and in that I prefer English world over logical notation here, for it reduces my cognitive overload.
Me: I agree on the readability part but I'd like to be a purist when it comes to practices.
Dev: Java APIs aren't perfect and clean. We can pick the good parts and leave behind the bad ones.
Me: Why do you say that? You can't malign Java that way.
Dev: I see your frustration and can understand where you come from. I love Java for the good parts and let me illustrate a thing or two about its bad parts. What is the opposite of phrase "is present?"
Me: "is empty?"
Dev: Cool. Now what should be the opposite phrase of "is Null?"
Me: "Is not null?"
Dev: There you go. Now take the java.utils.Objects API and tell me what do we have as an opposite for "isNull()" method
Me: Well, it is "nonNull()".
Dev: Isn't that weird? Should it not be prefixed with "is" at least making it "isNonNull()" or "isNotNull()" to make our lives easier? (and it goes for a while making for productive conversations both ways)
Such productive conversations is what makes workplace engaging and levels up the product quality in terms of maintenance and reduced bugs in code.
Similar Mixed Experience with Robotic Pairing
Now for over the past year, since the introduction of GenaI tools like ChatGPT, I have been using it and have so far mixed share of experiences. There have been occasions where the code generation was terrible and inefficient - asked to generate code quickly to do some parallel processing task, but got code for concurrent processing with Threads and that too in complex manner.
There are occasions where I profited from ChatGPT tool to learn about new concepts quickly (eg., "What is "AWS Local zone" and why would a company use it in the real world?"), prompting me to google for more on the subject to grab the right source to learning more. Or get step-by-step answers to doing something (eg., I asked it, "In XLStat, how to generate respondent survey values automatically?") where this GenAI agent acts as virtual pair guiding me through solutioning.
Conclusion
Humans are not always good. Goodness is a state of mind and humans have their share of bad times. GenAI agents like ChatGPT, Google's Gemini, etc. are still far away from being perfect in accuracy. While either way the curious mind can pick a thing or two in pairing, be it with people or bots, I have my bias towards pairing up with humans for that experience is inimitable as the conversations structure, tone, emotions and content are fluid all throughout. The real aha moments in the learning journey happens not merely because of the results/outcomes but in large parts because of the journey itself. I first experienced true pairing during one of my interview rounds at ThoughtWorks where I paired up with one of the lead developers named Aneesh, in solving a code problem. He was super humble, and professional in a manner in which he engaged that in no time, I forgot that it was an interview and we were completely into solving the problem forgetting about the world around us. Same code problem can be solved in a zillion different ways and so will it be solved every time, even if the same person were to solve it at different points in time with adequate gaps between the occasions. The joy of coding didn't happen when the solution is arrived but the journey injected varied emotions in small doses leading to excitement as the journey concluded with absolute certainty.
Even in times of crises, I got that kicker every time I joined my team doing an RCA as fellow buddy, in identification of problem's root cause and resolution of production issues at hand (call it Teaming which is essentially a scaled up version of Pairing). Consistent teaming and pairing with right intent in a right manner, on various occasions, only leveled up my teams yielding better results.
Make good use of every opportunity to pair-up or team-up with humans preferably and complementarily use GenAI tools where possible, to drive your continuous learning journey in a manner that benefits you, your team and your business, in the long run.