Social Programming Is Underutilized
Social programming practices are highly effective but underutilized practices in software development. Many teams hesitate due to misconceptions about productivity loss, cost, and lack of autonomy.
Hello, developers! 🚀
Welcome back to the Learn Agile Practices newsletter, your weekly dose of insights to power up your software development journey through Agile Technical Practices and Methodologies!
Before starting, I quickly remind you that my brand new Test-Driven Development 101 5-day Email Course is available: it is the introduction to TDD I wish I had when I started learning it, so I think you will find it very useful!
As a subscriber to my newsletter, you can have it with a 10EUR discount! 👇
Now, let's dive into today's micro-topic!
In short
👥 Social programming practices are highly effective but underutilized practices in software development. Many teams hesitate due to misconceptions about productivity loss, cost, and lack of autonomy.
🧠 Social programming isn’t about typing faster—it’s about thinking smarter. Two engineers working together reach better solutions faster than solo work.
🚀 Teams spend most of their time understanding business needs, defining problems, and designing solutions. Social programming improves knowledge sharing, reduces silos, increases engagement, enhances problem-solving, and boosts code quality.
⏳ Social programming it’s especially valuable for onboarding, solving complex problems, handling incidents, refactoring, and conducting code reviews.
Use them Daily!
Pair programming and mob/ensemble programming are among the most underutilized practices in software development. Not because they don’t work—quite the opposite.
By underutilized, I mean that their usage is too low compared to the ROI of using them; in other words, software developer teams are losing opportunity to increase their effectiveness and outcomes by not using Social Programming practices.
But why do so many teams hesitate to embrace them? There are some misconceptions about productivity loss, concerns over pairing costs, and a lack of proper facilitation often hold companies back - and this is often coupled with control: most teams are not “allowed” to try those practices, which means they are not independent in deciding how to work.
More Eyes on Code = Smarter Engineering
This issue has been heavily inspired by this interview by Farhan Thawar at the Lenny’s Podcast - an interview with a lot of inspiring topics: Farhan was able to inspire me to evolve my reflection about why Social Programming is not a common practice, and here you can read my reflections about it thanks to his words.
💡 Pairing isn’t about typing—it’s about thinking. Two developers working together don’t produce half the output; they produce better solutions, faster—a better outcome. The real bottleneck in development isn’t typing—it’s problem-solving. With two people engaged in deep thinking, solutions are reached with fewer errors and less rework later.
💡 In Shopify, they even implemented a radical approach: pairing with a strict one-hour timer—if the problem wasn’t solved, the code was deleted and rethought from scratch. This extreme approach forced engineers to stay focused, avoid over-engineering, and move faster with clarity. I’m a big fan of throwing away code when needed, and this practice is fascinating.
💡 AI tools like Copilot may feel like an automated pair programmer, but they aren’t a substitute for human collaboration. AI-generated code is helpful, but it lacks context, intuition, and the ability to debate trade-offs. The best results come from AI + human pairing, not just AI alone. Two experienced engineers working together can still outperform AI-assisted solo work when it comes to complex, creative, or highly specific problems.
More Than Just Writing Code
Coding is a very small part of Software Development—maybe around 10/20% of time of a team is actually spent coding. The rest of the time, the teams needs to make sure to understand the business, the problem to solve, the customer needs - and then, think to a solution that solve those needs and innovate.
That’s why Social Programming is a great practice:
✅ Improves knowledge transfer—new hires ramp up faster by absorbing techniques, domain knowledge, and best practices naturally
✅ Reduces silos—teams become more cross-functional, reducing reliance on “key people” who hold critical knowledge
✅ Increases engagement—developers stay more focused, reducing context-switching and distractions
✅ Enhances problem-solving—hard problems get tackled more effectively, avoiding tunnel vision
✅ Boosts code quality—fewer bugs, cleaner architecture, and better long-term maintainability
In fact, studies show that pair programming can reduce unplanned work by up to 50%, meaning more time to invest for the team in the work that really matters.
You Don’t Need to Do it All the Time
One of the biggest misconceptions about Social Programming is that it needs to be done all day, every day. That’s not true. First of all, as I already said, we don’t code that much. In general, anyway, even 4-8 hours per week of intentional Social Programming can yield massive benefits.
When Should You Use Pair/Mob Programming?
👥 During onboarding—New hires ramp up significantly faster by pairing with experienced team members
🛠️ When tackling complex problems—Two brains are better than one for navigating tricky logic or architecture decisions
🚑 During incidents—Pairing in high-stakes situations can prevent mistakes and lead to faster resolution
🔍 For refactoring sessions—Refactoring is smoother and less risky with real-time discussion and review
✅ For code reviews—Live, collaborative code reviews can replace long async comment threads, especially when changes are very impactful
It’s Time to Reconsider
Pair and mob programming aren’t just "nice-to-haves"—they’re force multipliers for engineering teams. If you’re not using them, you’re missing out on better code, faster learning, and happier teams.
🇮🇹 Calling my Italian readers!
🚀 Want to master Continuous Integration and safely hide work in progress?
Join my hands-on Mastering CI: Fast Releases for Modern Team Workshop, organized in collaboration with Crafted Software Community, where you'll learn to implement these techniques in real-world projects. Say goodbye to long-lived branches and risky deployments—embrace seamless integration with confidence!
📅 Dates: March 29th, April 5th and April 12th. (3h sessions, 10am-1pm).
🎟️ Spots are limited—Sign up now and take your development workflow to the next level! 🚀
Until next time—happy coding! 🤓👩💻👨💻