Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How Mob-Programming influences the development ...

Avatar for Harald Reingruber Harald Reingruber
April 29, 2022
45

How Mob-Programming influences the development workflow

Mob-programming sounds like a crazy idea. As today's development work is more often a learning problem than an execution problem, it might be less crazy than one might think. The time it takes to finish a task does not scale linearly and a new idea or insight from prior experience might reduce the effort to a fraction.
Mob-programming allows for easier balancing of the trade-off between learning, knowledge transfer, and getting things done.

How might it be helpful to our daily work? Mob-programming means high bandwidth learning in the context of the task at hand. Participants can even learn on different levels of experience simultaneously. It helps to get a common understanding of a software project and it’s easier to apply new practices as a team. When things don’t work as expected, a mob rarely runs out of ideas. Mob-programming also works well when being done remotely.

This talk explains a typical mob-programming workflow and offers ideas on how to start experimenting and where to go next.
Mob-programming sounds like a crazy idea. As today's development work is more often a learning problem than an execution problem, it might be less crazy than one might think. The time it takes to finish a task does not scale linearly and a new idea or insight from prior experience might reduce the effort to a fraction.
Mob-programming allows for easier balancing of the trade-off between learning, knowledge transfer, and getting things done.

How might it be helpful to our daily work? Mob-programming means high bandwidth learning in the context of the task at hand. Participants can even learn on different levels of experience simultaneously. It helps to get a common understanding of a software project and it’s easier to apply new practices as a team. When things don’t work as expected, a mob rarely runs out of ideas. Mob-programming also works well when being done remotely.

This talk explains a typical mob-programming workflow and offers ideas on how to start experimenting and where to go next.

Avatar for Harald Reingruber

Harald Reingruber

April 29, 2022

Transcript

  1. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E How Mob-Programming influences the development workflow Harald Reingruber @Harald3DCV
  2. 2 @Harald3DCV A.k.a. Ensemble-Programming The community is trying to promote

    the term Ensemble-Programming Image from: TapTheForwardAssist – Own Work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=98667991
  3. 3 @Harald3DCV A.k.a. Ensemble-Programming The community is trying to promote

    the term Ensemble-Programming => More positive meaning
  4. 4 @Harald3DCV > whoami 3D graphics programmer @Dedalus Healthcare for

    medical software. Working with Rust, WebGL and WebAssembly Mob-Programming Explorer and Meetup Organizer Twitter.com/Harald3DCV (DMs are open)
  5. 5 @Harald3DCV What is mob-programming? All the brilliant people working

    on the same thing, at the same time, in the same space, and on the same computer. -- Woody Zuill Image: https://blog.crisp.se/2015/12/28/yassalsundman/real-life-mob-programming
  6. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E How?
  7. 7 @Harald3DCV Roles of a mob “Mobbers” the ensemble “Driver”

    types for the ensemble “Navigator” leads and organizes the ensemble From: MobRetreat Presentation by Dimitry Polivaev and Bob Allen.
  8. 8 @Harald3DCV Strict Navigator Many / No Explicit Navigator Only

    the navigator decides. Can ask for help, if not mobbers practice patience. The mob establishes consensus or consent and instruct the driver. And many intermediate styles Navigation Styles
  9. 9 @Harald3DCV Navigation Styles Different styles have advantages in certain

    situations. No clear-cut best practice. ➜ Experiment! “Strict Navigator” is the good for starting. Strict Navigator Many / No Explicit Navigator And many intermediate styles
  10. 10 @Harald3DCV We rotate roles very often Use a timer

    => when we are focused, we forget to rotate the roles. Time of a full round 20-30 min max. => helps us stay engaged. Frequent rotation keeps the interaction snappy and forces us to continue each other’s ideas => 3 min is great, 5 min is okay, more only if the hand-over duration is slow. Don’t forget to take frequent breaks => when we are engaged, we get lost in time until we are exhausted.
  11. 11 @Harald3DCV My Mob-Programming experience Planned a 2-month Pair-Programming Tour

    in the US in Spring 2020 => turned into a Remote Pair- and Mob-Programming Tour Inspired by Peter “Code Cop” Kofler: http://blog.code-cop.org/p/journeyman-tour.html Organizing a Mob-Programming Meetup since 2020
  12. 12 @Harald3DCV My Mob-Programming experience Our team @Dedalus: Onboarding Tasks

    that require architecture improvements Tasks that require knowledge sharing Biweekly Cross-team learning sessions
  13. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E Why?
  14. 14 @Harald3DCV Just sharing “Here's what worked for some in

    their context, but I recognize that your context is different” I am not recommending – just sharing! https://justsharing.dev/
  15. 21 @Harald3DCV Advantages over Pair-Programming Less sensitive to “personal” chemistry

    => Differences in experience/seniority can cause an imbalance Feels more like a sports team or study group Conflict of opinions is easier to solve Knowledge transfer is not only between 2 => Pair-programming still requires team knowledge transfer and written conventions Allows getting rid of many meetings Pair-programming is more intense => requires more breaks => fewer coding hours/day
  16. 22 @Harald3DCV Advantages over Pair-Programming BUT: Several teams that experimented

    with mob-programming picked up pair-programming instead. That’s perfectly fine, and probably even improves the pair- programming experience.
  17. 23 @Harald3DCV Faster learning allows to be very productive Software

    development is often a learning problem, not an execution problem!
  18. 24 @Harald3DCV Dev speed feels like a bulldozer Consistent pace

    – a bit slow but steady More predictability “Problems” are solved quickly
  19. 25 @Harald3DCV Get unstuck quickly Minimum time of a team

    being stuck => reduces frustration!
  20. 26 @Harald3DCV Collective Habits and the Virtuous Loop Virtuous Circle

    is a loop of actions or events whereby results allow the loop to be repeated with ever-increasing results. It is associated with self-reinforcing practices and processes that gain strength from their outputs. -- https://simplicable.com/new/virtuous-circle
  21. 27 @Harald3DCV Collective Habits and the Virtuous Loop Build good

    collective habits with the combination of dedicated learning time and retrospectives. Learning sessions ensure that new ideas make it into your system, and retrospectives ensure that change and experimentation happen. The Virtuous Loop is the cycle of improvements and learning! -- Chris Lucian
  22. 28 @Harald3DCV Resource Efficiency vs Flow Efficiency Since the industrial

    evolution we mainly have been focused on resource efficiency. Extreme example of resource efficiency? Traffic jam => 100 % utilization of a highway Image by Patrick Bell from Haddonfield, NJ, USA - new 6-5-06 064, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=2187985
  23. 29 @Harald3DCV Resource Efficiency vs Flow Efficiency Focus on the

    work, not the worker. Image by Patrick Bell from Haddonfield, NJ, USA - new 6-5-06 064, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=2187985
  24. 30 @Harald3DCV Resource Efficiency vs Flow Efficiency Focus on the

    work, not the worker. Reducing hand-offs and ping-pong Moving very small batches from planning, implementation, testing, integration, and deployment to production quickly. Image by Patrick Bell from Haddonfield, NJ, USA - new 6-5-06 064, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=2187985
  25. 31 @Harald3DCV Hand-offs – Pull Requests Code Reviews are instantaneous

    while mob-programming! Disadvantages with Pull Requests: Cause task-switching or increase work-in-progress time when not responding quickly Big PRs are very hard to review => smaller PRs preferable, but increase hand-offs and task-switching. Check out "Async code-reviews are killing your company's throughput" by Dragan Stepanović: https://www.youtube.com/watch?v=LVr-SMLrfgg
  26. 32 @Harald3DCV Hand-offs – Real Full-Stack For more complicated projects,

    it’s a challenge to really be Full-Stack know all the nitty-gritty details of the frontend and backend world. In a mob you can more easily combine engineers from both worlds and work “real” full-stack.
  27. 33 @Harald3DCV Higher flexibility A mob-member might join a meeting

    => while the others still move the code forward A mob-member with special knowledge might help out a different team/mob. => while the others still move the code forward Your mob is missing some special knowledge => invite a specialist to mob with you, so everyone acquires the missing knowledge.
  28. 35 @Harald3DCV A mob tends to be more disciplined The

    last 10-20% are sometimes very tedious. In a mob there is almost always somebody who suggests cleaning up or fixing X or Y. Or we explicitly agree to leave it like it is => we were all part of the decision and can not blame anyone else when we stumble over it again.
  29. 36 @Harald3DCV Makers vs Menders People have different strengths and

    weaknesses. Makers are good at quick prototyping => ignoring all the less important details. Menders are good at looking at all those tiny details => maybe not that fast, but the results tend to be rock solid. In a mob, you might have both personalities covered => and adapt depending on what is better for the task at hand. Makers vs Menders => https://www.legacycode.rocks/ podcast
  30. 37 @Harald3DCV Multi-disciplinary Designers Database Security Testing Backend Frontend DevOps

    <= easier to combine in a mob than in 1 person. Image: https://apiumacademy.com/blog/key-mob-programming-benefits/
  31. 38 @Harald3DCV Include non-engineers or guests Some include also product

    managers from time to time, or keep them close by to quickly answer questions. Inviting a guest has little impact on the progress of the mob. Image: https://apiumacademy.com/blog/key-mob-programming-benefits/
  32. 39 @Harald3DCV Cultural changes are hard Mob-Programming lowers the barrier

    to experimenting and reflecting. It’s easier trying to do things differently if one in the team already has a rough idea.
  33. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E Some ground rules for higher chance of success
  34. 41 @Harald3DCV How to collaborate well - Code of conduct

    Collaborate with kindness, consideration and respect Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. -- Rust CoC: https://rust-lang.org/policies/code-of-conduct
  35. 42 @Harald3DCV Psychological safety is key In separate studies, Google,

    MIT, and Carnegie Mellon have repeatedly found the same results — psychological safety is the most important factor in teams that are high-performing. -- https://medium.com/@rosiehsmith/fostering-psychological- safety-in-mob-programming-teams-228451a93a55
  36. 43 @Harald3DCV Psychological safety is key What is psychological safety?

    An environment where everyone feels like they can share their ideas, questions, concerns, and mistakes. And every idea/opinion is equally valued and respected. Requires skills in how to share ideas and how to criticize. Which can be improved easily over time, if everyone agrees we are probably not (yet) good at it.
  37. 44 @Harald3DCV It forces us to improve all team “challenges”

    Don’t start with mob-programming when there already are conflicts => sort them out first. Do frequent (micro-)retrospectives => 10 min Retros once or twice a day can be enough and everyone’s perception is still fresh.
  38. 45 @Harald3DCV Acknowledge the learning curve Learning is often uncomfortable

    (and it is supposed to be so). Learning as a team is experiencing discomfort in front of your peers. Coach the team to recognize the discomfort that comes with learning/applying a new technique. Invest time and energy to make the team practice and get better at it. Idea: Start mobbing on learning new techniques/technology outside of your project. Apply to solving everyday tasks once mobbing gets easier.
  39. 47 @Harald3DCV Does it work? Yes! There is at least

    one proof. Hunter Industries in San Diego (California) is doing mob-programming for 10 years. They have 6-7 full-time mobs. Disclaimer: No guarantee that it works or makes sense in your context.
  40. 48 @Harald3DCV Does it work? Actually, there are more: Shopify

    Tesla Minecraft INNOQ REWE Otto Pluralsight Thoughtworks Cucumber Skyscanner https://www.chrislucian.com/p/companies-that-are-mob-programming.html
  41. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E It also works remote!
  42. 50 @Harald3DCV Remote Mob-Programming Dedicated virtual or physical machine for

    Mob-Programming + Superfast handover + Single environment - Compromise for personal preferences required (IDE, Shortcuts, preferred tools, etc.) Simultaneous access via Anydesk (or TeamViewer) Remote control via Teams/Zoom doesn’t work well
  43. 51 @Harald3DCV Remote Mob-Programming Synced Editor/IDE via VSCode Live Share

    or JetBrains Code With Me + Individual environment (except IDE/Editor) + Low latency and bandwidth requirements
  44. 52 @Harald3DCV Remote Mob-Programming Git Handover (with https://mob.sh) + Individual

    environment - Slower handover - Difficult when working with multiple repos
  45. 53 @Harald3DCV Remote Mob-Programming Don’t be cheap on hardware (cam,

    mic, headset)! Camera always on => more like physical collaboration Camera above the (external) screen => looks more natural on the opposite end High-quality microphone If integrated speakers are bad => go external! https://effectivehomeoffice.com/
  46. 54 @Harald3DCV Remote Mob-Programming Synced Timer => https://mobti.me Should ring

    for everyone => less likely to be ignored Everyone should be able to restart it => less likely to be forgotten
  47. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E How to start experimenting?
  48. 57 @Harald3DCV Start experimenting! Experiment yourself in Meetups or Events:

    Mob-Programming on OSS (free) https://meetup.com/Mob-Programming-on-Open-Source-Software/ Codecraft Saturdays/Sundays by Bob Allen (free, US time zone) https://www.eventbrite.at/o/code-craft-saturdays-and-sundays- 15457506392 Remote Mob-Programming workshop by Simon Harrer https://socreatory.com/de/trainings/remote-mob-programming Mob-Programming session tomorrow morning!
  49. 58 @Harald3DCV Start experimenting! Start organically – with people who

    see potential. Start with team learning – reach out to colleagues who enjoy learning new things Start with on-boarding Never try to convince or force somebody If you want to go full-time – try to set up a “safe” 2-month experiment – with an expected velocity drop by about 50%, also involve product/project management.
  50. 59 @Harald3DCV Start experimenting! The nice thing is: Even if

    you discover mob-programming is not for you or your context/environment, => the chances that you learn and improve while finding out are high!
  51. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E What others experienced
  52. 62 @Harald3DCV Quotes I learned to practice patience when I

    have an answer but am not the navigator, in order to not take away her/his learning opportunity. -- a Dedalus colleague
  53. 64 @Harald3DCV Try it! There is only one way to

    find out how mob-programming works.
  54. 65 @Harald3DCV Credits Ideas are based on the great discoveries

    by awesome people: Woody Zuiil @WoodyZuill Mob-Mentality Show @mob__mentality Amitai Schleier @schmonz Llewelyn Falco @LlewellynFalco Gregor Riegler @gregor_riegler Mob-Programming Meetup Co-Organizers (Ethan Storminger, Fred Morcos, Meenakshi Koushik, Nick Del Grosso, etc.)
  55. 66 @Harald3DCV We are hiring Java Developer (f/m/d) Backend Developer

    (f/m/d) Frontend Developer (f/m/d) Angular Developer (f/m/d) Full Stack Developer (f/m/d) Database Engineer (f/m/d) CI/CD Engineer (f/m/d) DevOps Engineer (f/m/d) DevSecOps Engineer (f/m/d) Scrum Master (f/m/d) https://bit.ly/say-hello-to-dedalus https://www.dedalus.com/dach/de/rd/
  56. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E Any questions?
  57. L I F E F L O W S T

    H R O U G H O U R S O F T W A R E Thank you!