<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Markus Decke</title>
    <description>The latest articles on Forem by Markus Decke (@mrksdck).</description>
    <link>https://forem.com/mrksdck</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F239155%2Fe16f5475-802a-4d44-b5e2-68687f593e18.jpeg</url>
      <title>Forem: Markus Decke</title>
      <link>https://forem.com/mrksdck</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mrksdck"/>
    <language>en</language>
    <item>
      <title>From branches to trunk (a journey)</title>
      <dc:creator>Markus Decke</dc:creator>
      <pubDate>Tue, 20 Jan 2026 22:01:29 +0000</pubDate>
      <link>https://forem.com/mrksdck/from-branches-to-trunk-a-journey-2kc8</link>
      <guid>https://forem.com/mrksdck/from-branches-to-trunk-a-journey-2kc8</guid>
      <description>&lt;h2&gt;
  
  
  Preface
&lt;/h2&gt;

&lt;p&gt;In environments where people are used to using some sort of Gitflow variant, the norm is having &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, and long-lived feature branches. There are often not enough good automated tests and use-case coverage to deliver with confidence, so branch isolation and friction-creating processes are used to ensure some quality. At least having a DEV stage where builds get deployed after they successfully created a container image is the usual case. This doesn't mean there is an automated release process or additional stage for testing prior to a release, also known as merging into &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This means the DEV stage can be a moving target for testers, if the first stable stage is the INT stage, where Releases (2 weeks of work) are deployed for delivery towards production. Here, the testing works on a fixed set of features and stable servers, without the surprises of new features popping up when something is merged.&lt;/p&gt;

&lt;p&gt;Since Releases happen every 2 weeks, people can be eager to merge instead of waiting another 2 weeks when they are nearly but not yet done, especially clients and project managers, who can get restless. So we get bugs that get caught on INT, and then we need to create hotfixes and test again. If there were merges in between, the fix needs to be cherry-picked, which means the hotfixed Release isn't the same set of features as the current &lt;code&gt;develop&lt;/code&gt; branch. &lt;/p&gt;

&lt;h2&gt;
  
  
  Current setup
&lt;/h2&gt;

&lt;p&gt;Delivery Stages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEV (develop) - &lt;code&gt;develop&lt;/code&gt; branch gets deployed after merge (build takes hours)&lt;/li&gt;
&lt;li&gt;INT (Integration) - &lt;code&gt;main&lt;/code&gt; branch gets deployed every 2 weeks after release build&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;PROD (Production) - gets deployed 2 weeks after INT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means the state on INT is not the same; if errors occur, we need to have a hotfix, and this means more friction. &lt;br&gt;
The often-used solution is to have a merge-freeze on &lt;code&gt;develop&lt;/code&gt; until Release, to ensure everything on DEV gets tested. So &lt;code&gt;main&lt;/code&gt; in the end is the Release branch and has no other function. You could also tag a commit in &lt;code&gt;develop&lt;/code&gt; and release that without going through the motions of PRs from &lt;code&gt;develop&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;, which is done by hand; this is cumbersome and creates a lot of friction and therefore waste. &lt;/p&gt;

&lt;p&gt;A new idea is to have a TST (testing) stage, so that a fixed set can be tested and released.&lt;/p&gt;

&lt;h2&gt;
  
  
  New setup
&lt;/h2&gt;

&lt;p&gt;Delivery Stages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEV (develop) - &lt;code&gt;develop&lt;/code&gt; branch gets deployed after merge (build still needs hours)&lt;/li&gt;
&lt;li&gt;TST (testing) - a fixed state of &lt;code&gt;develop&lt;/code&gt; can be tested and then merged into main&lt;/li&gt;
&lt;li&gt;INT (Integration) - &lt;code&gt;main&lt;/code&gt; branch gets deployed every 2 weeks after release build&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;PROD (Production) - gets deployed 2 weeks after INT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: How do we get the tested commits into &lt;code&gt;main&lt;/code&gt; after new merges into develop?&lt;br&gt;
&lt;strong&gt;Answer&lt;/strong&gt;: More branches!&lt;/p&gt;

&lt;h2&gt;
  
  
  Branches everywhere?
&lt;/h2&gt;

&lt;p&gt;So now we have &lt;code&gt;develop&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt; as branches with the new setup, we need to branch from develop with a certain set of commits to merge into &lt;code&gt;main&lt;/code&gt;. &lt;br&gt;
One way could be to create a new branch from &lt;code&gt;develop&lt;/code&gt; and merge into &lt;code&gt;main&lt;/code&gt;, so that we still have PRs and manual actions and waste.&lt;br&gt;
Instead, we could tag a commit and merge the tag into &lt;code&gt;main&lt;/code&gt;, which we can do by hand or we can automate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving towards trunk!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: If we do this, do we really need &lt;code&gt;main&lt;/code&gt; anymore? &lt;br&gt;
&lt;strong&gt;Answer&lt;/strong&gt;: I think not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: Could we instead work and release only &lt;code&gt;develop&lt;/code&gt;? &lt;br&gt;
&lt;strong&gt;Answer&lt;/strong&gt;: Yes, let's call it &lt;code&gt;trunk&lt;/code&gt; instead of &lt;code&gt;develop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We could tag a commit in &lt;code&gt;develop&lt;/code&gt; and release the tagged commits, that way we don't need an extra branch and manual motions to get the commits into it. Less manual work and friction, less waste.&lt;br&gt;
Depending on your view, we could call it successfully moving towards trunk-based development.&lt;/p&gt;

&lt;p&gt;What do you think? Let me know in the comments. &lt;/p&gt;

&lt;p&gt;For me next stop in the journey is moving towards continuous delivery :)&lt;/p&gt;

</description>
      <category>xp</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>git</category>
    </item>
    <item>
      <title>Be explicit about your code base style and software design</title>
      <dc:creator>Markus Decke</dc:creator>
      <pubDate>Tue, 16 Jan 2024 09:59:43 +0000</pubDate>
      <link>https://forem.com/mrksdck/be-explicit-about-your-code-base-style-and-software-design-4nak</link>
      <guid>https://forem.com/mrksdck/be-explicit-about-your-code-base-style-and-software-design-4nak</guid>
      <description>&lt;p&gt;Imagine you start at a new workplace or a project you haven't had previously worked on.&lt;br&gt;
Checking out a code base can be tedious and it can be unclear what to expect from it. &lt;/p&gt;

&lt;p&gt;Some questions come to mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where can I find the important things?&lt;/li&gt;
&lt;li&gt;Why isn't this framework replaced by something modern?&lt;/li&gt;
&lt;li&gt;Do I need to install something to make it run?&lt;/li&gt;
&lt;li&gt;... &lt;em&gt;there can be many more questions arising.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is good to understand early on what practices are followed and what design is aimed for. There is even more one would like to know or what one can expect from that code base.&lt;/p&gt;

&lt;p&gt;As a project maintainer you can help with that. Write down what goals you are aiming for and which practices support you to reach this goal. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write it down. Make intentions clear. Be explicit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During my journey in software development, I once worked in a team where we did that. It helped a lot. We got less questions on &lt;em&gt;why we chose what&lt;/em&gt; and &lt;em&gt;if we considered that&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;README example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We are using &lt;code&gt;&amp;lt;formatting style XYZ&amp;gt;&lt;/code&gt; to have a consistent format throughout the code base and use this &lt;code&gt;&amp;lt;XYZ formatting tool&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We make use of &lt;em&gt;linting&lt;/em&gt; to be able to mitigate common problems and use &lt;code&gt;&amp;lt;linter XYZ&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We use &lt;em&gt;unit tests&lt;/em&gt; for testing business rules.&lt;/li&gt;
&lt;li&gt;We use &lt;em&gt;integration tests&lt;/em&gt; to check if the pieces fit together.&lt;/li&gt;
&lt;li&gt;We organise our code following hexagonal architecture, to separate our domain from frameworks and other details.&lt;/li&gt;
&lt;li&gt;We use domain objects instead of generic ones, e.g. Username object instead of plain String,&lt;/li&gt;
&lt;li&gt;... &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We stated the software design goals and architecture even before we wrote any code, so that we knew immediately what we are looking for when we start the work on the code. It supported us to have less things in our heads while we implemented. &lt;/p&gt;

&lt;p&gt;A different way would be to write these things down as &lt;a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions"&gt;architecture decision records&lt;/a&gt; (ADR) inside the repository itself.&lt;/p&gt;

&lt;p&gt;The decisions don't need to be architecture related, they can be any decision in the context of the code base's repository. You can document dependency choices, software designs, and tech debt; don't forget to include pay back plans.&lt;/p&gt;

&lt;p&gt;With these, anyone who checks out your code can have a faster introduction to it, and understands from the start what things are considered important and intentionally not considered.&lt;/p&gt;

&lt;p&gt;This also helps to have better code reviews, since expected things are explicitly stated already; like code style, linting, design patterns, and architecture. This should speed things up and have less comments about these items that got already decided. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can focus on the details that are important.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To make the implicit explicit helps to communicate the context and why things are as they are. &lt;br&gt;
Your future self and colleague will be thankful. :)&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>architecture</category>
      <category>community</category>
    </item>
    <item>
      <title>Behaviors for a better pair programming experience</title>
      <dc:creator>Markus Decke</dc:creator>
      <pubDate>Tue, 03 May 2022 21:01:36 +0000</pubDate>
      <link>https://forem.com/mrksdck/behaviors-for-a-better-pair-programming-experience-3114</link>
      <guid>https://forem.com/mrksdck/behaviors-for-a-better-pair-programming-experience-3114</guid>
      <description>&lt;p&gt;I want to share my experiences and observations of pair programming, that I have made pair coding at work and facilitating coding workshops such as coding dojos and &lt;a href="https://www.coderetreat.org"&gt;coderetreats&lt;/a&gt; the past years.&lt;/p&gt;

&lt;p&gt;I think it is more than just two people sitting in front of a computer and doing the work of one.&lt;/p&gt;

&lt;p&gt;First I would like to introduce you to XP, you might be familiar with the abbreviation XP as in experience, but it also stands for eXtreme Programming (XP) and it originates from the 1990s. Kent Beck and his colleagues described pair programming in the book “Extreme programming explained”. At the time these ideas were considered extreme and pushing collaborative programming to a different level. This was in the 1990s, and now with agile method having been adopted more and more since the 2000s one might think pair programming is more widespread. A lot of XP things have been adopted and you may be familiar with concepts of collective code ownership, continuous integration, code testing, talking to the customer, but these human-centered practices have still as far as I can tell not been so widely adopted.&lt;/p&gt;

&lt;p&gt;In the past when computer time was precious people were working together to get things done and correcting before running a program on a computer and to be sure to use its computer time effectively. In a way pairing was the usual mode of working, you can take a look at “Psychology of computer programming” by Gerald Weinberg from the 1970s, where he describes a lot of practices and collaboration patterns people  used before one computer per person became the norm.&lt;/p&gt;

&lt;p&gt;So let's not wait another 20+ years!&lt;br&gt;
Let's and dive into the topic now.&lt;/p&gt;

&lt;p&gt;In his book Kent Beck explicitly described pair programming  as a practice, where two people equally share the responsibility for doing the work and getting it done. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do they do that when there is only one keyboard?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In pair programming two people occupy distinct roles, the one is the driver and the other one is the navigator. In the sense of going on a road trip together, where the one is paying attention to immediate things and the other one checks what will come ahead. They arrive together and the fashion in how they do that, is determined by how they work and interact together.&lt;/p&gt;

&lt;p&gt;As a driver, you will have the keyboard and your job is to write the code. As a navigator, your job is to support the driver while observing what is being written and keeping an eye on the overall context it is in. Keeping this in mind both need to communicate about what they are writing or what they deem as being important as the next step. As a driver, you keep the navigator updated about what you want to write next, this way the navigator can more easily support you. As a navigator, you keep the driver on track so that you both don't end up in a ditch. It is necessary to give feedback on the code, or quickly read some documentation so that the task gets done. Switching roles every now and then can help you to keep focus and also change the way you think about the task ahead.&lt;/p&gt;

&lt;p&gt;Even if you try to keep all these things in mind it doesn't guarantee that you will have a great pair programming experience. &lt;/p&gt;

&lt;p&gt;Some things can diminish your efforts in doing pair programming productively and some behaviors can enhance your and your pair's experience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Collaborate!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read the task and discuss what needs to be done. Plan it together and agree on what and how to do it. This can save a lot of stress and time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't dominate!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't try to show off or cling to the keyboard all the time, this will disengage your pair partner, nobody likes to observe somebody programming alone. Instead, slow down and keep your pair partner engaged and informed about what happens next. This way the navigator can support you better and can give feedback while being in the loop with you.&lt;/p&gt;

&lt;p&gt;As a navigator don't tell the driver constantly what to do, this isn't dictation, and the other one is not your scribe. Instead, communicate about what you would like to do next or differently and maybe switch roles.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Be constructive!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't blame your pair partner or the code you end up working with, it is not productive and probably it is your own code you are blaming. Give directions or ideas on how to improve things and demonstrate how to do it better. That way you and your pair partner can learn something together and also have a sense of achievement in having left the place better than you found it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Turn off notifications!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In most cases it is not beneficial to work if there are too many distractions or when one is preoccupied with something else. Everything that is not focused on the task ahead should be avoided such as, reading emails and chat messages that can be done later. Turn off notifications, also on your phone. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Celebrate!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you get a test green or some things finally fall into place, celebrate and congratulate each other for this achievement. Every little step is part of the whole and it is worth acknowledging its positive impact.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take breaks!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is always some things that cannot wait, so take a break or schedule breaks before hand and make them explicit and long enough so that you can use them to defocus from work. When you come back to the task, you'll have a fresh view and relaxed mind and will be able to focus more effectively than if you had paired and sat there for hours. &lt;br&gt;
When you find yourself not being able to concentrate, both of you take a break and come back together and continue working. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Switch roles regularly!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Breaks are a great way to initiate a switch in roles, there are many ways to do it, e.g. writing a new failing test and the other needs to implement it to make it green. It supports in getting a different perspective to the task and to the work when you switch the roles and have to focus on different things.&lt;/p&gt;

&lt;p&gt;With these behaviors in mind I am certain you will get the benefits you are looking for.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Faster feedback and getting unstuck faster&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have your colleague at your side to check the code and to support you when you are stuck and vice versa. You can measure cycle time of tickets that you did while pairing, it probably doesn't need a code review with the PR, since two people have worked on it and checked if the design is up to the teams standard. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fewer defects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bugs found in production would be a thing that can decrease since 2 people thought about edge cases and other problems while having the context of the work item in mind. A code review probably won't catch these since the reviewer does not have the full context in mind. It would need a deeper code review that goes beyond "lgtm" and "+1".&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Less knowledge and skill silos&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You are actively working together and sharing how you would like to solve a problem. Talking about solutions and the domain will certainly help you and your pair partner to not be the only one who knows what was done and why and how it got in the new state.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Staying focused&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two people are usually less likely to be interrupted, especially in an office setting. In a remote setting you can benefit from having turned off notifications while pairing.&lt;/p&gt;

&lt;p&gt;Pair programming is not a one size fits all practice since everyone is different. To get a better experience each time discuss what was good and what can be improved for the next time. &lt;/p&gt;

&lt;p&gt;Happy pair programming! &lt;/p&gt;

</description>
      <category>xp</category>
      <category>culture</category>
      <category>programming</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>Three modes for an enhanced pair programming experience</title>
      <dc:creator>Markus Decke</dc:creator>
      <pubDate>Tue, 20 Jul 2021 07:43:54 +0000</pubDate>
      <link>https://forem.com/mrksdck/three-modes-for-an-enhanced-pair-programming-experience-4k24</link>
      <guid>https://forem.com/mrksdck/three-modes-for-an-enhanced-pair-programming-experience-4k24</guid>
      <description>&lt;p&gt;You may have heard about &lt;a href="https://en.wikipedia.org/wiki/Pair_programming"&gt;pair programming&lt;/a&gt; and have a rough idea of what it is about. If not, “No problem” – we are going to look into it in this post and there is another nice blog post written in German regarding &lt;a href="https://leanovate.de/leanovate-best-practices-pairing/"&gt;best practices of pairing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One aspect of pair programming is that two people sit in front of one computer and work. This is what pair programming looks like from the outside, but there is more to it than just that. While two people sit in front of one computer, only one person is able to operate it; without any bad intentions, it is possible that this person is showing the other one “How things are done”, while the other person is passively observing. The observer’s mind may wander somewhere else or she/he may start checking emails and social media instead of working on the task. This observed pattern is called &lt;a href="https://en.wikipedia.org/wiki/Pair_programming#Indicators_of_non-performance"&gt;watch the master&lt;/a&gt; and should be avoided since only one person is actively engaged. It is very unfortunate if only one person is engaged and the other one feels they cannot contribute.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You may have started out on the wrong foot with pair programming or you want to try it (again?).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s start over with a quick recap of what it is. Pair programming has a few formalities you should take into account before starting. There are two roles: the driver and the navigator. While the driver has the keyboard and types in what is currently needed to be done, the navigator helps in looking ahead for how that code will fit into the codebase. There may be things to restructure, refactor or reimplement so that the work item fits into the project better. Both people focus on their roles and should communicate all the time about what is happening or about what will need to be done. Communication is the key in pair programming.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XVGNnpEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7k0o5idi4kszny8w3h7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XVGNnpEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7k0o5idi4kszny8w3h7.png" alt="driver navigator roles in pairing"&gt;&lt;/a&gt;&lt;br&gt;
Now that we aware of the roles and their responsibilities, when do we switch? You can switch whenever you feel like, this needs to be decided together. Let’s look at three modes of pair programming that can help you switch and work more collaboratively while focusing on the task at hand and less on the mechanics of pair programming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mode 1: Ping Pong
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ieNgbYl---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hze2wuafaycqi11fydh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ieNgbYl---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hze2wuafaycqi11fydh2.png" alt="ping pong flow diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Ping Pong Mode is a way for both of you to switch the keyboard regularly. It goes like this: The starter is writing a failing test and hands over the keyboard. Then the other one implements what is needed so that the test no longer fails and then writes a new failing test and hands over the keyboard to the person who started. In that way the keyboard is hopping from one person to the other like a ball in a game of ping pong. While the tests are not failing, you are able to refactor the code both of you have written. This continuously improves your code and mitigates your codebase from deteriorating.&lt;/p&gt;

&lt;p&gt;This mode fits nicely into the workflow of &lt;a href="https://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While Ping Pong is focused on switching the keyboard task wise, you can also try out to switching by using time boxes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mode 2: Pomodoro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique"&gt;Pomodoro&lt;/a&gt; is a time-box technique for tracking the time spent solely focused on one work item. You can use it as a Mode for pair programming. The base line of Pomodoro is: set a timer to 25 minutes and start working on the task you want to work on. While the timer is running, you are not allowed to work or do anything else, than the task you have committed yourself to work on for this time box. Where is the switching in this mode? You can choose to switch after each iteration. Each iteration has a following 5-minute break. This can give you enough time to switch the keyboard or computer. You could invite your colleague to your desk for the next iteration of collaborative work.&lt;/p&gt;

&lt;p&gt;Mode 3: Let's discuss!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V1kcZzHk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkigmi2bqfa7vqos3xbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V1kcZzHk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkigmi2bqfa7vqos3xbo.png" alt="picture for talk, discuss, agree, decide"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next approach is not focused on task or a time-based switching of roles as the other two modes presented. It is heavily influenced by &lt;a href="https://en.wikipedia.org/wiki/Mob_programming"&gt;mob programming&lt;/a&gt;, first you discuss what you want to do, and if you come to a conclusion, you do it. No code should be written that has not been discussed and decided on by both members of the pair.  This style creates room for discussion, assists in making compromises and can create a better shared understanding of the task and codebase you are both working on together.&lt;/p&gt;

&lt;p&gt;It's time to experiment and reflect!&lt;/p&gt;

&lt;p&gt;Take your time experimenting and try to find what works best for you and your pair member. To enhance the learning experience, reflect on each session. Tell what was good and what could be improved, write action items down and take them into account for the next session. This alone can already improve your current mode of pair programming.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ-1ihlW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hy1qwezsx3hwf8a3w152.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tZ-1ihlW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hy1qwezsx3hwf8a3w152.png" alt="What is good and what can be improved?"&gt;&lt;/a&gt;&lt;br&gt;
Experiment on modes, mix and match modes, and try out new things to find what matches the needs of both members of the pair.&lt;/p&gt;

&lt;p&gt;Have a happy and productive day of coding!&lt;/p&gt;




&lt;p&gt;Photo by &lt;a href="https://www.pexels.com/photo/woman-wearing-red-and-black-checkered-blouse-using-macbook-1181472/"&gt;Christina Morillo from Pexels&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pairprogramming</category>
      <category>extremeprogramming</category>
      <category>xp</category>
      <category>collaboration</category>
    </item>
  </channel>
</rss>
