From “single” to “pair” programming
Do you think you have what it takes to do “Pair Programming” ?
Do you think you can migrate from “single” to “pair” programming ?
Well, in the first place, “Pair Programming” itself is something that is unknown for most programmers and to me if you reach out to me more than half a year ago. That was until i moved to my new company here who do a full “pair programming” as their culture. I found that pair programming is actually quite fun and satisfying yet also difficult.
But really, what is “pair programming” exactly ? If you already understand what it is you may skip to “The Trigger” section to read my transition experience from single to pair programming. But if you don’t, worry not, cause i’ll try to explain it to you in the next section hopefully in a comprehensible way so you may get a better picture of it.
Say “Hello” to Pair Programming
If you searched it on Google, pair programming is an activity where there are 2 programmers working on a single computer. Yes, that’s right, mate. 2 people working on a single task on single computer (not necessarily single keyboard and single mouse though). How does that even work, right ? Hold on my tea, fella because now i am going to give you a better explanation than the one above.
If i have to imagine it, i would imagine pair programming like playing “seesaw” in the playground. You play it with 2 people (that’s the standard minimum players count) and there will be a time where each of you get a turn to push the ground with your feet so your side will go up and the others go down. Just like pair programming, there will be a turn for who will take over the keyboard and write code with it so it’s not like two people writing code at the same time, all hell will break loose if that’s to be the case.
For the technique itself, there are 3 techniques that are usually used in pair programming. I’ll explain it based on my understanding and what i found from the internet.
- Driver and Navigator (Traditional style). In this technique, the driver is the one who will write the code and the navigator is the reviewer trying to keep up with the progress from the driver by observing them. Both of them may communicate before and during the process on how to solve the task on hand. But this technique is hard if you are still new to pair programming since it depends on how well the communication is going. I usually find myself losing the context and interest when being the navigator when trying out for the first time.
- Driver and Navigator (Strong style). When working on certain task, the driver will be the one who write the code on the screen while the navigator explain the idea to the driver and guide them on how to solve the task. Personally this is better than the first one because both of them get to be active and the communication really kicks in here. If the driver has an idea and would like to implement it, they should swap the role with their partner and explain their idea while their partner (new driver) writing out the code.
- Ping-Pong Pairing. This one is a unique technique combining with TDD and personally i think it will only work if the pair knows and understand about TDD. Basically, in this technique one of them will start to write a failing test then pass the keyboard their partner to make it green and refactor. Then their partner will write failing test and pass the keyboard again back to them to make it green and refactor. This passing moment is the reason why it is called “Ping-Pong Pairing”. The loop continued until the task finished and start a new loop when they are working on a new task.
Every programmer starts working in a “single programming” culture. What do i mean by “single” is when there are software project/product, each of the programmers that is developing the features was given different task hence you will be working alone on your own task at a time. Which is why i called it “single” programming.
When every programmers who already getting used doing “single programming” are being offered to try “pair programming”, most of them are likely to be worried on how is that going to work. I mean of course they will. Imagine that your freedom to write the code on your computer while you are sitting in the corner or on a sofa listening to your favorite playlist in Spotify while letting no one disturb you or telling you there is another way to solve a task, are being taken away. Then you have this person who are sitting beside you, smiling and trying to explain their idea and watching you writing the code everyday. It doesn’t seem to be a pleasant feeling, right.
I was also indeed one of the people who enjoy “single programming” since the day i started out to become a programmer until i got this offer to work in the capital city. I actually felt happy but a bit hesitant when i got this offer since i have to move far from my hometown to experience TDD and Pair Programming which is so “alien” to me.
So basically i have to leave my comfort zone to try out these new things (TDD and Pair Programming) which at that time i am not even sure if i am gonna fit into this culture. But somehow, deep inside my heart there is an internal voice resonating just like what you watch in dramas or films. It is saying that “I would love to try this out because it seems interesting, even if it ends up not fit for me then it’s ok. At the very least, i have the courage to take the risk to gain experience from it because i don’t think i can find it anywhere else in this country”. So i take the offer, join the interviews and fortunately accepted to try the probation period. And from here on out, the journey begins.
This is probably the hardest probation period i have ever felt. The culture was way too different from my previous workplace. I started out knowing so little about the architecture, TDD and Pair Programming there. So everyday, i need to read a book, learning and adapting (thankfully the company provides learning resources for you for free).
To tell you the truth, in the first month i am having a hard time doing pair programming. I felt like i was lost for most of the time when doing pair programming. The weird feeling of having a person sit next beside you writing code and observing you writing code for the day everyday. And you kinda need to talk to each other or it will be awkward or you might even have no interest in the code anymore.
I remember trying out traditional driver and navigator technique at first. But as i am new, i am kinda passive most of the time. Because of too many new things to handle, i am struggling to keep up everyday at work too. And yes at that time i thought “maybe i am just not fit to try pair programming. Maybe after the probation period, this might just be the end of the journey for me here.”
But thankfully i am not being left alone, in our company there is this chat session culture where you can talk about your problems with a senior outside the office. Whether it’s about working issue in the company or feedback for the team or even if you need advice about your love life, since we have some seniors who already married, i bet they are wise enough to give you advice for that or at least exchanging opinions. No it is not a joke, it could be true since that’s what they told me. You are welcome to try it out yourself if you don’t believe me but you need to join our company first, hehe.
So continuing on the session, i explained about my problems about having a hard time adjusting myself to TDD and Pair Programming in the hope of getting advice. My senior then explain to me that pair programming might not be for everyone, some people might ended up best to work alone. The key point is communication and to make yourself comfortable first with your partner. Try to take it slow rather than trying to absorb all at once since each of us has our own pace and learning capability. So in the next few weeks, they would help me to rotate pair with another partner which i ended up felt more comfortable. He also giving me advice about pair programming where it should be two-way communication between partner not just one-way and advise me to try another technique in pair programming. So, I ended up keep on going to keep up and adapt myself to the work environment. I said to myself to try until the very end of the probation period and see if it works out or not.
Slowly but surely, approaching the end of the probation period. After that chat session, i tried another technique in pair programming with my partner, which are Strong Driver and Navigator style and Ping Pong Pairing since i kinda understand how TDD works as the time flies and i felt more comfortable eventually because i am able to communicate better with it.
As my senior said, i tried to take it slow and making myself comfortable with TDD and pair programming by looking at the “fun” side where you can discuss your idea with your partner and sometimes ended up with a better idea that you never thought before. Sometimes, we are just having fun discussing about our hobbies when we are taking a break and get to know how they feel about pair programming and a lot of other fun stuffs.
Well, sometimes we might faced this situation where we are having different opinion with our partner and can’t find satisfying solution for both. Usually we end up trying both of them and look which one suits better or find another person who we think suitable to be our middle man depends on the case (like Product Manager or Senior Engineer or even Team Lead).
After the probation period ended, i got the results that said i passed the probation and my senior conducted a review about my performance for the first 3 months. They said i have been doing well growing and adapting in the company even though i still have much room to improve but it has been a good start which makes me happy after all of those efforts. From my side, the pair programming experience is not easy at all but an interesting one. But now i am enjoying the TDD and Pair Programming since there are seniors who are so smart and will be willing to help you grow not to mention the effect of knowledge sharing by pair programming is so great. And it’s fun.
So, I ended up staying to work there until now, i think it has only been more than half a year but i feel like i might be staying there for a few years. And today, i have been pairing with more than 4 people. I enjoyed pairing with each one of them as i learnt many things from my partner while growing myself as a person and a professional programmer.
I think i have successfully transitioning from “single” to “pair” programming even though i haven’t mastered it yet. Don’t get me wrong because i am still able to do single programming when needed though. The point of pair programming is not reducing your potential when working alone instead it is improving you, maximizing knowledge sharing so you can produce better results when you are programming alone.
I have learnt many things that i could get while pairing but not when programming alone. Not to mention, I am also the type of people who always believe that “Two heads are better than one” and to add it up, i love to discuss things with other people and reaching out the best solution possible depending on the circumstances.
Well, if you think you have what it takes to try TDD and Pair Programming experience as I do here, if you are someone who are keen to learn and receive critics, and you wanna have the privilege on having chat session with a senior who will be your good listener and even giving you any advice on your problems including your love life, you are welcome to join us at https://www.kmkonline.co.id/careers.
Whatever your choice is, i wish good luck for us. Cheers !! 🍻