Article summary
Many have already begun to use Large Language Models (LLMs) and codegen tools in their daily workflow. And, as I’ve seen more and more developers turn to their chatbot first instead of another developer (🙋 myself included), this made me question: What place do these tools play in a pairing dynamic?
Using an LLM as an alternative to a pair programmer, at surface level doesn’t seem like a bad idea. It means an almost instantaneous turnaround on any question, with multiple ways to integrate these responses seamlessly into your workflow. It means never again having to worry if this next question will be my pair’s “last straw.”
However, pair programming isn’t just a solution to produce code quickly. A lot of the value comes from the shared knowledge of the codebase and domain between developers. Although LLMs continuously improve the amount of context they can process, there hasn’t been a replacement (yet) for a fellow programmer who knows more about your given problem than what you could craftily type up in a chatbot within a few minutes. So when do you reach for an LLM versus a pair programmer? For me, it boils down to a single question:
I need an example of…
That’s it. For all different use cases when I find myself reaching for an LLM or codegen tool, it’s because I need some form of an example. It could be a test generated through Github Copilot, a SQL statement thought up through ChatGPT, or the citation of other people troubleshooting similar problems from Perplexity. All these tools can really do is bring you an example.
Calling these responses “examples” is very deliberate. There is no plan to accept them at face value as an “answer” or “solution.” Their purpose is to provide a reference to find the solution necessary (or a placeholder to get examples closer to the desired solution).
And examples aren’t a bad thing. A lot of power comes from having a custom working prototype after prompting a chatbot a few times. Having a basis to perform iterations on, or even examples of things that shouldn’t be done, gives you the space to think creatively about your solution and pin down what aspects of different approaches you like best.
The Downsides of a Pair LLM Programmer
But working with a pair programmer is inherently different from this. The goal of pair programming isn’t to generate an example of a solution. Instead, it’s working toward a solution while sharing an understanding of the overarching problem. Being able to provide this context to fellow developers on your team will allow both parties to grasp better what is currently challenging your system or what is currently changing in your system. Sure, the initial speed at which you get working code in front of you may not be as quick. But, the resulting codebase will definitely feel more complete, having two developers working together versus two developers working with a “pair” LLM programmer.