- By Sandro Mancuso
- ·
- Posted 06 May 2015
On the week of 6th of August I took part on a craftsman swap between Zenika and Codurance and I would like to share my experience, the lessons I’ve learned, and how much fun I had. While Zenika was hosting me in Paris, Codurance hosted Abdellah Zeroual in London
A craftsman swap is an exchange of craftspeople for a week. Each company sends a craftsperson to work for a week with the other company. During that week, the hosting companies provide an environment where the visiting craftsperson can work with different people and different projects, with the objective to share and learn skills. Besides technical skills, the visiting craftsperson also shares how their company is organised and run and also learn how the hosting company is organised and run. The main idea behind the craftsman swap is to have cross-pollination of ideas across companies and help our industry to evolve.
Below is the summary of my week at Zenika Paris.
Zenika is a French company with multiple offices in France, Singapure, and Canada, that like Codurance embraces XP practices and Software Craftsmanship principles and values. Zenika also organizes meetups and events as you can see in their agenda page.
Zenika Labs is an internal agency within Zenika that offers multi-competencies teams focused on creating MVPs and validate customer hypothesis. In this particular project, they were using Typescript + Angular for the frontend and Spring boot for the backend, which was great because I usually work with Javascript/Typescript + React and NodeJS so it was an opportunity to explore different technologies.
On Monday morning I worked with Florian who showed me how the project was structured and invited me to pair on one of the user stories he was working on. We test-drove all our changes, including changes to the database. After a few iterations, we refactored some areas where we had introduced duplication while making the changes. Working on this task first thing in the morning helped me to understand the overall architecture of the project.
In the afternoon I paired with Romain, who showed me how they organised their testing strategy. It was really interesting to see that apart from unit tests, they also have Cucumber tests with two levels of implementation. The first is an end-to-end test and the other is for the frontend in isolation, allowing us to test the system from different angles but reusing their business rules described in the feature files. Because they were using Angular, they were using Protractor, which I found it really interesting and easy to use. Something I’ll take into account whenever I use Angular again — I’m currently using React in my project.
After work Romain organised a kata where we practiced mob programming. We had one developer playing the role of the “driver’, who would type what the other developers were instructing her. We would rotate the driver role every 10 minutes. We used the bowling kata as an exercise and all the code was test-driven. During the mob, many different and interesting ideas were suggested. We ended up not finishing the exercise (although we were very close) but had good discussions.
On Tuesday I paired with Mickaël. During our pairing session we had an interesting conversation on how they separate the different architectural layers of their frontend application and where we should introduce a few new fields that came from the server and the logic that maps to those fields before sending them back. Thanks to Typescript, we were a little bit safer when introducing those new fields as the compiler guided us a few times when implementing those conversions.
After work, they introduced me to the very French “Apéritif” in the Zenika terrace — it was pleasure to enjoy some French goodies :)
On the following two days I paired with Maël on a project for an electrical company called Enedis.
Maël firstly introduced me to the people in the company and gave me an explanation about the the problem they were trying to solve. As you can imagine, there is a lot of hardware involved in a project for an electrical company and the testing part can be very complicated. Because of that, they implemented a very interesting testing solution where they can mix together business rules and technical steps. It was great for me to see it as it was completely different from the kind of projects I normally work on. We paired both days introducing new steps in the testing tool doing TDD.
In the afternoon we’ve done a kata focused on hexagonal architecture. We developed a simple application that reads from an external source, let’s say a file, processes that input and outputs to the console. We’ve created a few abstractions that served as adapters and a single implementation that was the port in this case. Although I was familiar with the concept, it was good to debate about the topic, listen to opinions that reinforced my current understanding, and also some challenging ideas about where the domain logic should live, what we consider presentation logic, etc.
After the kata, we discussed the different TDD styles, outside-in, inside-out and Mael showed me a workshop that he prepared around Specification by example
In the last day I met Xavier, who is the CTO of the Paris office. We had a chat about how Zenika internally works and its culture. He showed me how Zenika is structured horizontally, with an almost flat hierarchy, how the teams are self organised and all the members have complementary skills. In terms of internal culture, they have many interesting things including “tribes” (similar to the Spotify Model), which are groups where they share focused technical knowledge, and the idea box where people are empowered to implement their own ideas in the organisation.
That day I also discovered how much I suck at table football. Those guys are really good — I think I didn’t even see the ball during the matches. Thanks for that. :)
After lunch, Xavier organized a mobbing session where we used Haskell to solve the "Potter Kata". This was a surprise to me, I didn't expect to do any Haskell during this visit. We were using TDD in baby steps to solve the exercise and we created a few types to represent some domain concepts. Thanks to that exercise I discovered how to deal with RealFloat and Fractional and a few conversion methods between numbers in Haskell.
It is always good to be outside our comfort zone, meet new people, and see different solutions to similar problems. Some of the highlights of this exchange include:
The craftsman swap was a great professional opportunity for me. I would like to thank everyone at Zenika for being great hosts, for taking the time to share so much about your company with me, and for making me feel at home. I hope to meet you all again in the future. Also a big thanks to Codurance for choosing me to represent our company and make this exchange possible.
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.