Pair programming brings the joy of flow
Codeborne is on the lookout for a few exceptional experienced programmers to join the team. To give you an idea of how unique it is to work at Codeborne, we interviewed a couple of our senior developers. Jaan has worked at Codeborne for 9 years. He has worked on more than 15 projects with clients from Estonia and abroad. Unexpectedly, Jaan has also learned to understand Russian while working extensively with one of our Russian clients.
Jaan, what makes Codeborne a unique place to work?
There are definitely some unique aspects to Codeborne. To my knowledge no other company in Estonia uses pair programming in such an extensive way. You definitely have to be comfortable with a lot of communication with both the person you are currently pairing with as well as with your whole team working on the project.
Unless your partner is on vacation or away for some other reason, you cannot just sit alone. Generally, there is always someone you pair with. It makes sense to be able to get along with the person as you need to find best solutions together.
Pairing is definitely one aspect that can be challenging for people who have been used to mostly working on their own. Though it seems that in a pair the workflow is much smoother and focused.
It is easier to tackle problems together. Some things that I would not notice myself can be noticed by my partner, leading to a cleaner and better software solution.. “We have a component somewhere, we can reuse” or “We can do this or that better” - small things can be easily reminded if there are two people working on the same tasks.
How does pair programming really work in Codeborne?
We engage as much as possible in Test Driven Development. When we take on a new task, we first go through the requirements. After that, depending on the specifics, we discuss the possible solutions and even draw concepts on paper, if needed. Once we have agreed on a solution to the problem, we proceed to implementation and the preferred way to start this is by writing a test.
One person writes the test. Second person implements it. And we switch quite a lot. The flow is easiest with two experienced developers pairing up together. But there are exceptions to it. If there is a bigger difference in experience, the senior developer usually focuses on test writing and coaching. That helps the newer person understand the project faster.
Taking a step back - how does pair programming practically work in Codeborne?
People share the same computer. It has two screens, keyboards, mice and both have the same control. We have a principle that at least 6.5 hours a day we should work together. Maybe one comes in a bit earlier and can research some new topics. The other one leaves a bit later and can finish up alone. Most of the time is still together.
When a new person joins, they usually find it unusual that you should be looking at your own screen while the other person is talking. Usually one would like to look left or right. But it makes sense to observe on one’s own screen what the other person is doing.
Also, to avoid too much confusion, you can’t jump in and take the control just any moment. At times there will be enthusiasm but we need to be aware who is controlling the process at the moment.
Does it mean that one person is looking passively when the other one is doing the work?
No, certainly not. It is a bit like a rally. One is the driver and the other one is in the navigator seat. Both are always engaged in the process. I must say that it is a really cool working day when you come and focus on the tasks and there is a smooth flow throughout the day. No Facebook and social media, no distractions.
Although we have an open office and the 35 people are all in the same big room, the focus on the work is so strong that you don’t even notice them. Then you discover “oh, it’s already 5 o’clock.” It was a good day and a lot got done. Working in a pair helps to increase such flow a lot.
Pair programming actually also helps to keep the work day and personal life separated. As most of development is done together in a very intense and efficient way, we don’t take work home with us. You never get an idea of committing something at 3AM. Making commits late at night is actually frowned upon as it can lead to more mistakes.
How often do you swap pairs?
The usual suggestion is to switch as much as possible. Practically we have found that once or twice a week is good. More often can be a bit too fast. This is the suggestion but it differs from project to project.
How about changing between projects?
Switching between projects happens less often. Maybe once or twice a year. Switching between different projects every now and then keeps the mind fresh. It also makes the work more exciting.
During the nine years at Codeborne, what have been the most interesting projects for you?
Historically, I have worked on projects for financial institutions, telecoms, and for car dealerships. I wouldn’t like to bring out any one project as very special as it is more about the possibility to learn. I like the projects where I can learn new technologies, new approaches. There are many opportunities to learn while working here at Codeborne.
What about different programming languages?
With every new technology we do some research and learn quite quickly what can be done with this technology. We find the tools to write the best software. Also, if you join a new project, the existing team always shares useful advice. Again, the benefits of pair programming and close teamwork.
Are there any situations where pair programming does not work at all?
Sometimes personalities are not a good fit. I personally don’t find myself drawn to conflict. I tend to discuss reasonably and find the best solution. But in the case when two stubborn people end up in a pair together, more heated discussions can arise . So flexibility, level-headedness and ability to discuss with good arguments are very valuable skills.
What has kept you in Codeborne for 9 years?
It is an interesting question as I came to Codeborne straight from university. I read some career-ads and found some interesting words like pair programming. Then looked at Youtube videos with Anton and Erik explaining how things are done in Codeborne. It sounded very interesting.
It still is. Each new project is like joining a new company. New client, new technology, new people, new field. But working with the best practices in a great team stays the same throughout all the projects. I find that I can develop all the time and this keeps it very interesting for me.
We have a lot of freedom in Codeborne. We don’t have project managers, analysts, testers. Only developers and some (UX) designers. This gives the freedom to really solve the business needs of clients with the most suitable technology. This also gives us the responsibility to really understand how the software we make is used. We can deliver really high quality software.
There is also a lot of development and learning. For some projects we need to manage everything in the database or the DevOps side. Sometimes we need to use totally new solutions. Occasionally also very old solutions. All these experiences with different technologies stacks, projects, ways of working bring such confidence. I know that I can really do whatever is needed.
Make sure to also read the other interviews
- In the fascinating interview with Mira you can discover how we
learn different tech stacks, switch projects, and learn by teaching the new generation of developers
- Read the interview with Andrei for passionate discussion on
technical excellence, working closely with clients, developing great open-source projects, TeX and Codeborne out-of-office working week.