• How to do handover with git during remote mob programming?

    The ritual of handover via git in mob programming (or pair or other software teaming techniques) is crucial for keeping the focus and pace.

    If you often end up in messy situations caused by git, this is the guide for you!

    In a remote mob programming session the most common way of doing the handover is via git using a temporary branch in origin as synchronization point. There is even a good tool built for this called mob.sh.

    However, in this post, we will focus on how to do it ourselves.

    Git – Keep it simple

    I cannot stress this enough. Keep it simple should be the leading idea when doing handovers. As soon as you try to get fancy with git, you increase the risk of messing up and that the team loses focus.

    1. Create a branch named wip

    The name is really not that important, you can call it mob or asdf.


    The important thing it should be easy to say and type, and it should be short. 


    This makes it easier for everyone in a remote call to hear the name of the branch and be able to check it out.

    To create a branch:

    git switch -c wip


    2. Push the branch

    The first driver of the session creates the branch and pushes it.

    To push the branch write:

    git push origin wip

    3. Everyone else switch to the wip branch

    Now it’s a good time for everyone else in the rotation to fetch the wip branch to make it easier during handovers.

    Simple write the following command:

    git switch -c wip origin/wip

    4. Code

    Start the timer and start implementing the code!

    There are a lot of different timer apps out there, I’m building a timer app called Remobster, if you are interested in checking it out, sign up for the waitlist to become an early access user 🙂

    5. Time for the git handover

    When the time is up for the current driver, it’s time to handover to next driver.

    First add all changes in the repo:

    git add .

    Then commit the changes:

    git commit -m wip

    The reason we set the message to wip, is to not complicate things and make the handover to the next driver as smooth as possible.

    The driver then pushes the changes:

    git push origin wip

    Next driver

    Now the next driver can safely continue. The only thing the new driver needs do to is

    git pull origin wip

    and then follow steps 4 and 5. And then you just repeat!

    Finish up

    When the mob session is happy with the code and wants to deliver it, I recommend squashing all the commits into sane pieces and write good commits messages describing the changes.

    This step should also be done together in as many rotations that is needed to create a git artifact that fulfills your requirements.

    In my team we usually do something like this

    git rebase -i origin/main

    This opens an interactive editor (usually vim) where you can decide what to do with each commit

    pick abc1234 wip 
    pick def5678 wip
    pick ghi9012 wip

    On the first commit change pick to rand for the other commits change them into f like this

    r abc1234 wip 
    f def5678 wip
    f ghi9012 wip

    This will let you rewrite the first commit’s message into something better and the other commits will be squash into the first commit, removing their messages.

    Read this article to learn how to write great commit messages

    When you are happy with your new commit messages, force push the wip branch by:

    git push —force origin wip

    Then you are done, now you can merge the wip branch into main or open a PR/MR if that is needed in your process 🎉














  • Building Remobster – Mob programming timer

    I’m currently building Remobster, with the aim that it should be the best remote mob programming timer out there.

    The main problem that I want to solve is without a timer the team does not rotate as often as they should. Which makes mob programming a lot less fun and efficent. I truly think that mob programming is a powerful technique. I don’t want working remotly to be a blocker for doing mob programming efficnetly.

    Want to get the latest news about Remobster.io? Sign up for the waitlist on the Remobster website.

    Or follow me on Mastodon!

  • First day at my own company

    Today is the first day I’m working for my own company Kodskepp (Swedish for code ship). It feels strange but also very exciting. I’m started with a part-time setup. I’m have two days (in a regular work-week) dedicated for my own, and the other three days I work at my jobby-job.

    I’ve always known and wanted to run my own company, and really, this is not my first stab at running a company, but it is the most serious attempt yet. The first company I started was an IT repair consultancy company helping friends, family and others to fix their IT stuff, yes that printer that never worked, I even helped set up a Minecraft server once. This was a really great learning experience. However, I grew tired at fixing other peoples stuff when I started learning programming and game development. 

    So, during the last years of secondary school and just before starting university, I and a couple of friends started a small company to build mobile games. This was during the Flappy Bird hype and we thought if he can do it, so can we! We managed two create and release two fully functional games and even made few cents on it. Then, basically because lack of time, we decided to not continue running the company. I think this was simply the wrong time for all of us involved, everyone was so focused on their studies, our none-existing budget (students, you know) and the admin overhead just became a burden instead of fun. 

    Fast forward to 2024, I’ve been working professionally as a software engineer for five years and it has fun and very rewarding. I’ve been lucky to end up in just the right environment for me to grow. 

    Then, one day in the beginning of January, I was thinking to myself, what’s the next step for me? Should I apply for a new job, a new role or just continue on as is? 

    Then this familiar little voice in my head said, “Isn’t it time to start that company you always wanted?”. I quickly replied, “I don’t have a good business idea”. Over the coming months, that little voice persisted and I always came back to YES, I do want to starta business! But I have no idea what to do. 

    I just knew what I didn’t want to do, become a freelancer (which, financially makes a lot of sense). No, I want to build product, but what product? No idea.

    I finally realised that I just need to start putting in time into this, otherwise it will never happen, the other great things in my life has not just fallen in my lap, they have been the result of hard work, over time. This is the first day of many where I try to put in the work needed to find what to build, how to build it and how to make it a successful business. 

    Over the months since I decided that this is happening and that the 4th of September is my first day, I’ve actually decided on the first product that I’m going to build and try to sell, but that deserves its own post.

  • Midnattsloppet 2024

    This Saturday, Midnattsloppet (the midnight run) took place. It’s a 10K that takes you around the lovely island of Södermalm (one of the ilands of Stockholm?). The best thing about Midnattsloppet is that it almost feels like a festival, the city is buzzing with people that is out looking at the runners, cheering them on. Along the track there is several music venues and dancers. It is just great fun. Another quirky thing about this race is that everyone has matching t-shirts (the color changes ever year) and being part of the sea of turquoise shirts is a special feeling.

    A picture of a sea of people in turquoise t-shirts queuing for the start of midnattsloppet 2024
    Waiting for the start in a sea of turquoise

    I’m kind of disappointed of my result, but I was down with a cold the week leading up to the race so I’ll have to accept that I was not performing at my best. Well, better luck next year I guess!

  • Biking

    I’ve picked up biking again. And it is really nice. Perhaps one of the best ways to get around in Stockholm?

    One of my colleagues has been nagging me to fix my bike and start commuting with it to work. I put it off, mainly due to the bike not being in such a good shape, and perhaps most problematic was not even at my home, but at my parents!

    But then last week, I finally got the bike to the city and I tried to fulfil my promise to actually bike to work. So I did, and it was tough and sweaty. And the bike rode bad, and the chain even got stuck very badly. Sigh…, but on my way home I road past a bicycle workshop and I asked them to take a look and see if they could do something with my bike.

    a picture of my bike. it is black and a bit blue.

    Oh wow, did it get better! It runs so smoothly now and I want to take the bike everywhere.

    I just wish I had done this sooner. Perhaps, it’s like with code, if you maintain it, it will work better in the long term.

  • Sometimes a restart is all you need

    Today, I was trying simply setup a local installation of Plausible on my mac. I read through the self-hosting guide, and exclaimed: “How hard can it be?”. Famous last words, huh?

    Everything started fine according to docker and the logs, but I could not access the Plausible web portal at the designated port. I think I wasted a few hours tweaking the docker-compose file, reinstalling docker-desktop, and then finally I gave up. I caved. I thought, probably I was not cut out to do use this fancy new cool analytic software.

    But then I remembered the wise words from The IT Crowd.

    … and of course it started working after a reboot. And this is why programmers drink.

  • Hello World

    All good blogs by programmers starts with a Hello World post, no?

    Basically, I could not decide on a blog engine, everything feels too complicated or too pricey. Instead, I went the other route, just simple html files served by a web server. Hurray! 🎉 It will probably come back and bite me, like my overuse of emojis.

    Probably, the best options is just to use wordpress, but I could not be bothered to set it up right now. However, it looks quite straight forward to use this docker image. Do you really need a database for a blog?