{"id":9456,"date":"2020-04-17T23:38:25","date_gmt":"2020-04-17T22:38:25","guid":{"rendered":"https:\/\/exmachina.ch\/?p=9456"},"modified":"2023-06-28T18:18:16","modified_gmt":"2023-06-28T17:18:16","slug":"mob-programming","status":"publish","type":"post","link":"https:\/\/exmachina.ch\/en\/tech\/mob-programming\/","title":{"rendered":"Mob Programming"},"content":{"rendered":"<p class=\"p1\"><span class=\"s1\">As many fellow software engineers, I am familiar with several development techniques including XP, pair programming, and TDD. However, I recently came across something new to me in development, a technique named Mob Programming. It immediately picked my curiosity, therefore I decided to read more and share some thoughts after few months of adoption.<\/span><\/p>\n<h3 class=\"p2\"><span class=\"s1\"><b>Origins<\/b><\/span><\/h3>\n<p class=\"p1\"><span class=\"s1\">The story begins in 2003, when Moses Hohman called the practice of code refactoring by more than two people Mob Programming [1]. Woody Zuill then brought his experience with this technique to larger audience in conferences and public speeches, defining it as <i>\u201cAll the brilliant minds working together on the same thing, at the same time, in the same space, and at the same computer\u201d &#8211;<span class=\"Apple-converted-space\">\u00a0 <\/span>we call it Mob Programming\u201d <\/i>\u2013 Woody Zuill [2]<\/span><\/p>\n<h3 class=\"p2\"><span class=\"s1\"><b>What is Mob Programming?<\/b><\/span><\/h3>\n<p class=\"p1\"><span class=\"s1\">Well&#8230;the name might sound a bit awkward, particularly in the jargon as Mobbing, however it boils down to some good and common value as is<\/span><\/p>\n<p class=\"p3\"><span class=\"s1\"><i>\u201cUnus pro omnibus, omnes pro uno\u201d<\/i><\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">well known to cloak and dagger readers and movie passionates as <i>\u201cAll for one and one for all, united we stand divided we fall\u201d<\/i><\/span><span class=\"s2\"> (<\/span><span class=\"s3\">Alexandre Dumas,<a href=\"https:\/\/www.goodreads.com\/work\/quotes\/1263212\" target=\"_blank\" rel=\"noopener noreferrer nofollow\"><span class=\"s4\">The Three Musketeers<\/span><\/a><\/span><span class=\"s5\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">According to this development technique all teammates work on the same feature or issue, sharing the same IDE in a collaborative way. A sort of pair programming on steroids whereby the entire team has only one keyboard.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">Participants to such \u201cfeature\/issue workshops\u201d are team members but also business experts, advisors, customers or product owners, ultimately all people having a stake on hold and therefore forming an enlarged team, a mob.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">The Mobbing approach is not limited to coding. In fact it is often used for purposes such as definition of stories, product design, testing, business and planning.<\/span><\/p>\n<h3><a href=\"https:\/\/exmachina.ch\/images\/2020\/09\/MobProgramming.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-9458\" src=\"https:\/\/exmachina.ch\/images\/2020\/09\/MobProgramming.png\" alt=\"\" width=\"1889\" height=\"1088\" title=\"\" srcset=\"https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming.png 1889w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-300x173.png 300w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-1024x590.png 1024w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-768x442.png 768w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-1536x885.png 1536w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-830x478.png 830w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-230x132.png 230w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-350x202.png 350w, https:\/\/exmachina.ch\/wp-content\/uploads\/2020\/09\/MobProgramming-480x276.png 480w\" sizes=\"(max-width: 1889px) 100vw, 1889px\" \/><\/a><\/h3>\n<h3 class=\"p2\"><span class=\"s1\"><b>Roles and Rules<\/b><\/span><\/h3>\n<p class=\"p4\"><span class=\"s1\">In the mob there is one Driver and many Navigators. Only one person at a time has the Driver role, everyone else has a Navigator role.<br \/>\nThe Driver is the only one allowed to use the keyboard, translating Navigators ideas into code. It is recommendable for the Driver to have good coding skills, however experienced Navigators can help and support the Driver as need be.<br \/>\nAt times the Driver can be involved in the discussion among Navigators albeit this should happen only sporadically in order to avoid imposing his\/her idea.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">Navigators are the brains in the workshop. They are required to explore and expose task\u2019s details, devise and discuss options, and eventually explain to the Driver the agreed solution.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">Each team member becomes the Driver after a fixed time shift. This ensures everyone\u2019s engagement, shares knowledge, and improve skills.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">Here below I list Mobbing rules and advices which obviously can be amended according to everyone&#8217;s direct experience using mob programming.<\/span><\/p>\n<p>Start with 4-5 teammates. Extend the mob over time depending on your company needs and expectations.<\/p>\n<p><span class=\"s1\">\u2022 Swap Driver\/Navigator roles every 20 minutes.<br \/>\n<\/span><span class=\"s1\">\u2022 Discussions among Navigators promotes common understanding and knowledge sharing, Driver&#8217;s instructions are genuinely code oriented.<br \/>\n<\/span><span class=\"s1\">\u2022 Short and frequent retrospectives, possibly after each session, matched up with concrete action items.<br \/>\n<\/span><span class=\"s1\">\u2022 Agree on logistics such as in person or remote sessions, one or more screens or projector, which IDE, etc&#8230;<br \/>\n<\/span><span class=\"s7\">\u2022 no phones, no emails, ideally no interruption<\/span><span class=\"s1\"><span class=\"s1\">.<\/span><\/span><\/p>\n<h3><b>Final remarks<\/b><\/h3>\n<p class=\"p1\"><span class=\"s1\">Benefits of mob programming are manifold and easy to figure out, including (see also Livyson Saymon [4]) teaching and learning from each other, share knowledge, learn by doing, joint decisions, simultaneous decisions and reviews,<span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>prevent unnecessary meetings, encourage easy-to-understand code.<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">There is a good number of blogs and articles about mob programming, how it was adopted for medium to large size projects, and benefits achieved. As it usually happens, pitfalls and drawbacks of a development technique are less popular topics to share. <\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">While a trial adoption of mob programming can prove its expected benefits as well as disclose hurdles and issues, the experience shared by other adopters should motivate companies and teams that explore this technique, crafting own rules.<\/span><\/p>\n<h3 class=\"p2\"><span class=\"s1\"><b>References<\/b><\/span><\/h3>\n<p class=\"p5\"><span class=\"s1\">[1] Hohman, M.M. and Slocum, A.C. 2003. Mob Programming and the Transition to XP. EXtreme programming perspectives. Addison-Wesley.<br \/>\n<\/span><span class=\"s1\">[2] Zuill, W. 2014. Mob Programming \u2013 A Whole Team Approach, https:\/\/www.agilealliance.org\/wpcontent\/uploads\/2015\/12\/ExperienceReport.2014.Zuill_.pdf<br \/>\n<\/span><span class=\"s1\">[3] Lea Kovac Beckman https:\/\/blog.prototypr.io\/100-of-the-team-in-a-mob-for-12-months-taking-mob-programming-a-couple-of-steps-further-62d1e9962f37<br \/>\n<\/span><span class=\"s1\">[4] Livyson Saymon https:\/\/medium.com\/@livyson\/using-mob-programming-in-sprint-planning-37506d63a769<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>According to this development technique all teammates work on the same feature or issue, sharing the same IDE in a collaborative way.<\/p>\n","protected":false},"author":33,"featured_media":9461,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[],"class_list":["post-9456","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/posts\/9456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/comments?post=9456"}],"version-history":[{"count":1,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/posts\/9456\/revisions"}],"predecessor-version":[{"id":26518,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/posts\/9456\/revisions\/26518"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/media\/9461"}],"wp:attachment":[{"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/media?parent=9456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/categories?post=9456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exmachina.ch\/en\/wp-json\/wp\/v2\/tags?post=9456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}