The Dark Patterns of Pair Programming: What to Avoid in Co-Creation Sessions

As someone who’s spent countless hours in pair programming sessions, both as a participant and as a coach, I’ve witnessed the good, the bad, and the occasionally ugly sides of co-creation. While pair programming and mob programming can be incredibly powerful tools for knowledge sharing and code quality, they can also become surprisingly counterproductive when certain patterns emerge.

The Silent Drift

Picture this: You’re deep in a pairing session, working through a complex problem, when you notice your partner’s eyes glazing over as they check their phone. We’ve all been there, but this “silent drift” is perhaps the most insidious enemy of effective co-creation.

I once worked with a team where this had become so normalized that people would actually be on-call handling tickets during their pairing sessions. It’s not just about the immediate disruption; it’s about the message it sends: “This collaboration isn’t worth my full attention.”

The solution isn’t draconian rules about device usage. Instead, establish clear communication channels. If you need to check something urgent, simply say so: “Hey, I need two minutes to respond to an important email.” OR “I’m on call today and its busy, so probably better we do this tomorrow hen we have my full focus.” This transparency builds trust rather than eroding it.

The Keyboard Dictator

“Type ‘System dot out dot println.’ No, no – use the shortcut! Press Command-Shift-O…”

Sound familiar? Welcome to what I call the “Keyboard Dictator” syndrome. It’s particularly common when pairing involves developers of different experience levels, but it’s toxic regardless of the participants’ seniority.

This micro-management style doesn’t just slow things down; it actively prevents learning. It’s like trying to teach someone to ride a bike by controlling their handlebars remotely – they’ll never develop the intuition they need.

Instead, embrace the “Five Seconds Rule”: When you see your partner doing something you think is inefficient or incorrect, wait five seconds before speaking up. You’d be surprised how often they’re already on their way to a solution, just via a different path than you would have taken.

That being said though, if your goal is to teach someone keyboard shortcuts, being a keyboard dictator can be a good way to do it, so this antipattern can be used for good as well as evil.

The Eternal Marathon

I once encountered a team that prided itself on pairing “all day, every day.” They saw it as a badge of honor – until burnout started hitting their team like dominoes falling.

Pairing for eight hours straight isn’t just unsustainable; it’s mathematically impossible. Between meetings, emails, documentation, research, and basic human needs, forcing continuous pairing creates more stress than value.

The most effective teams I’ve worked with typically aim for 2-3 hours of pairing per day, with built-in breaks and solo time. This rhythm allows for both intense collaboration and necessary individual processing time.

The Keyboard Hoarder

We all know that developer who, consciously or not, maintains a death grip on the keyboard during pairing sessions. It’s often someone who’s incredibly skilled and efficient – which paradoxically makes the problem worse.

This pattern is particularly dangerous because it creates a passive observer rather than an active participant. The observer’s mind starts to wander, and suddenly you’ve lost all the benefits of having two brains on the problem.

Implement strict rotation patterns. Tools like mob timer can help, but even a simple agreement to switch roles every 25 minutes can make a huge difference.

If you are one of these incredibly skilled and efficient, try using the Keyboard Dictator Antipattern and teach the other guys on your team how to work as effectively as you, and you won’t get as frustrated, and the other people on your team will improve and everyone is happy.

The One True Way™ Syndrome

Perhaps the most dangerous pattern I’ve observed is the belief that there’s one “correct” way to do pair programming. I’ve seen teams tie themselves in knots trying to follow textbook definitions of driver-navigator patterns when their natural working style was completely different.

The truth is, effective co-creation is more art than science. What works brilliantly for one pair might be completely ineffective for another. The key is to focus on outcomes rather than process: Are both participants engaged? Is knowledge being shared? Is the code quality improving? What is the goal for this session?

The Path Forward

The most successful pairing sessions I’ve witnessed share a common thread: they’re built on a foundation of mutual respect and clear communication. When something isn’t working, participants feel safe to speak up and adjust their approach.

Rather than trying to avoid these patterns through rigid rules, build a culture where team members can openly discuss what’s working and what isn’t. Regular retrospectives focused specifically on pairing practices can be invaluable.

Remember, the goal of co-creation isn’t to follow a perfect process – it’s to build better software through collaboration. Sometimes that means typing together for hours, and sometimes it means giving each other space to think and process.

A Final Thought

The next time you find yourself in a pairing session, pay attention to these patterns. Are you drifting? Dictating? Hoarding the keyboard? The awareness itself is often enough to start shifting toward more effective collaboration.

After all, pair programming isn’t about being perfect – it’s about being better together than we are apart. And sometimes, knowing what not to do is just as important as knowing what to do.

Mobathons: Blending Mob Programming and Hackathons

This is something we’ve been experimenting with recently, so I thought I’d share.

A “mobathon” blends the concepts of mob programming and hackathons, providing a collaborative environment designed to tackle significant maintenance tasks or technology migrations in software development. This innovative approach allows multiple teams to work together intensively on real-world code, offering hands-on experience and producing tangible outcomes.

Why not just call it a hackathon? A hackathon is about encouraging innovation, while a mobathon is very focused on work towards a common goal with learning within a larger organization across many teams.

It is particularly useful in places with many teams that work on similar systems. For example, in one area we have 10 teams, each with frontend system ownership (10 frontend systems), and we want to try to keep knowledge, practices, and technology similar.

Practical Real-world Challenges

Unlike traditional workshops, participants engage with actual codebases, solving genuine problems that arise during technology transitions or maintenance efforts. This method enables engineers to gain valuable experience and build confidence in implementing new technologies. For instance, in a mobathon focused on migrating from webpack to Vite, engineers work in pairs on different systems, with experts available to guide and unblock obstacles, thereby facilitating learning and problem-solving in a real-world context. Vite is a very new technology, and you want the engineers that own the system to understand it when it’s rolled out, rather than some “tech team” or automation process doing it for them.

Efficiency and Effectiveness

These events can significantly accelerate the adoption of new technologies across multiple projects simultaneously in a short period of time. While the primary goal isn’t necessarily to complete all tasks during the event, mobathons often result in several projects reaching a PR-ready or near-ready state, with others progressing to a point where they can be easily integrated into upcoming sprints. This approach allows for faster implementation of improvements across the product portfolio, enhancing overall productivity and reducing lead times for new work.

Team Building, Knowledge Sharing, and Skill Development

The collaborative nature of these events promotes cross-team interaction and networking, fostering a culture of shared learning and problem-solving. This is good in large organizations where teams can sometimes become isolated in silos due to organizational structure. Additionally, mobathons provide engineers with valuable insights into the complexity of certain tasks, enabling more accurate estimation for future work. For example, after participating in a webpack to Vite migration mobathon, developers can provide more precise estimates for similar tasks in other projects, improving planning and resource allocation.

One of the key advantages of mobathons over traditional training methods is their focus on real-world scenarios. Participants encounter and overcome actual challenges that arise in production environments, rather than working with simplified, greenfield projects. This approach helps dispel skepticism about the practicality of new technologies or methodologies in existing systems, making mobathons a powerful catalyst for knowledge dissemination and skill development.

For example, instead of migrating a simple “todo” app from webpack to Vite, you’re migrating “this massive beast I work on every day”. You see all the real-world problems and have some experts there to help when you hit them.

Mobathon, Mob programming, pair programming, Agile

In summary, mobathons offer a dynamic and practical approach to software development, benefiting engineers, product owners, and development managers by providing real-world experience, accelerating technology adoption, and fostering a collaborative team environment.

Hosting a Mobathon Step-by-Step

  1. Define mobathon goal
  2. Book a room for a whole day, get it setup with pairing stations, that devs can easily plugin to
  3. Recruit developers
  4. Create a Slack channel for the mobathon. It should include information about the events such as goal, time, location
  5. Book a restaurant or order pizza/food. We generally provide lunch for the participants
  6. When everyone arrives, give orientation about the mobathon topic and goal (timebox 30-45 min)
  7. Break participants into pairs or groups
  8. Use a whiteboard to track progress
  9. Take lots of pictures of the event, and a boomerang at the end with everyone
  10. Summarize results and post pictures in the Slack channel after the event is completed

Conclusion

Mobathons represent an innovative approach to collaborative software development, combining the best aspects of mob programming and hackathons. By focusing on real-world challenges and fostering a supportive environment for learning and problem-solving, mobathons can significantly accelerate technology adoption, improve cross-team collaboration, and enhance overall productivity within large organizations. As software development continues to evolve, techniques like mobathons offer a promising way to keep teams aligned, knowledgeable, and effective in tackling complex technological transitions.