Monday, September 5, 2022

SoCraTes 2022 - A Welcoming Community of People Learning Together

Over years, various people recommended me to join a SoCraTes conference, especially the main German edition. They said it would be right up my alley and I'd love it there. I indeed loved the idea of software crafting and testing coming together. Still, I hesitated. This conference is designed as an open space, an unconference. The agenda and anything that happens or doesn't happen is decided by the participants. They build the conference. Don't get me wrong, I really enjoy this format, it's amazing to see its magic happening. My hesitation came from a different place: I am fortunate to be able to visit several conferences a year, thanks to me speaking at them and hence making use of the deal I have with my company. If there's no speaking engagement, though, I would need to take vacation, money, energy etc. on my own budget.

This year, my hesitation was resolved and I made it to my first on-site SoCraTes in Soltau. The SoCraTes people ran an experiment to bring experienced people and new joiners together and cover re-occurring topics in a "Foundations Day" before the open space starts. I was one of the lucky trainers to be invited to give a session on this day, which then also allowed me to experience the rest of the conference. Problem solved, here I come!

There's another reason why I was fortunate this way. For SoCraTes, you don't just go buy a ticket - instead you apply for one. The lottery will decide whether you get the chance or not. Why that? To intentionally build a diverse space where not only the same people return every year and no one else has a chance to break in. It allows for a good mix of people to meet. As a trainer for Foundations Day, I had my place already safe and didn't have to worry about my lottery luck.

Therefore: special thanks to Tobias Göschel and Thierry de Pauw for inviting me! And overall huge thank you to all the organizers - this conference is community-driven, all of them are volunteers, and they did an outstanding job.


The Day of Arrival

The train ride to Soltau gave me time to prepare. I brainstormed topics I'd like to propose at the open space, or sessions I'd like to join or pull. I already had my list of personal goals ready that I wanted to aim for during this conference.

  • Connecting with the crafter community: building further bridges with regards to testing and quality, especially beyond people already in my network
  • Practice coding: I really strive for more practice and felt it would be an awesome place to hone my skills further
  • Discover something new: this is always something I'm looking for, and it never left me disappointed

In the evening, I arrived just in time for dinner with the community. Meeting some of the people in real life for the first time was amazing, as always! Especially Thierry de Pauw whom I've spoken so much with over the last years.

Over dinner, I realized I was not the only one joining this conference for the first time. Later on, we realized lots of people were new joiners indeed, based on recommendations they chose to give this conference a try. Was really great to see.

In the beginning, things were still a bit new, strange and even stiff; as it often is for me these days when suddenly seeing lots of people in real life. Within a short period of time I could loosen up, though. The more people I got to know, the more I relaxed and felt at ease.


Foundations Day & World Café

The Foundations Day format was an experiment by the organizers, the first of its kind. I can already share I loved it. Not only from a speaker's point of view, but also from a new joiner's point of view. It was a day with less people and hence a smaller crowd to get used to. A day covered with fundamental topics without them being too basic, so I learned a lot even with topics I knew about. A day where we had a schedule set in advance, which took away the uncertainty of what would happen. A day to get to know people a bit already.

One word ahead: This conference is all about inclusion and crafting a welcoming space where people feel safe, that they belong and can be themselves. This included not only free rapid Covid tests each day for everyone, yet also wearing masks indoors - led by example through the organizers, and implemented by nearly everyone of the participants as well. Kudos to all of you!

Back to the Foundations Day. Here are the sessions I've joined.

  • "TDD Foundations" by Emily Bache. Test Driven Development is one of those fundamental "classics" on conferences that I've rarely seen even mentioned in every day work. Yet when I practice it hands-on myself, I really enjoy the thinking and working in many small steps, aiming for just enough, having the final design emerge and maybe surprise us. It really fits well to me and my personal endeavor to reduce cognitive load whenever I can. Some great insights from this session: "Learning TDD is a way to reduce your delivery cadence. If you're aiming for short delivery cycles you need these short development cycles, too." Or Emily's emphasis on using tooling, like refactoring support our IDEs offer. Or that for existing tests she would never reverse test assertions to see if tests can fail, only deliberately write wrong code to make them fail - Romeu Moura, another trainer, instead would. Also, I just love Emily's teaching style. I've not only learned more about TDD as such, yet also on a meta level gained ideas and inspiration on how to facilitate sessions. How she used her Miro board when presenting, how she used a video recording of her doing a kata and added her narration, how she used the "yes and" principle with critiquing feedback from the audience and in general navigated this in a very constructive way.
  • "Legacy code: Add a reliable test harness (quickly) and refactor!" by Michelle Avomo. Given legacy code without tests, Michelle demonstrated how we can make use of golden master tests to gain understanding. She warned though that this approach is only a tool, these snapshot tests are often not reliable and fragile as any new change will break your test, even if not relevant. Once you understand what you want to do, you can move to other types of tests. Michelle also emphasized: "The tests are our first clients" and "Do not modify any production code that is not covered by tests". Wise words!
  • "Refactoring for Deeper Understanding" by Nicole Rauch. When we encounter existing code, it might be hard to comprehend. Refactoring to the rescue! Nicole presented an implementation of a simple method. She asked people what problems they see and how we can improve things (for example, by introducing types). She had great list of questions that the method left open to answer. These unclarities would make any code change difficult and even dangerous. After refactoring, she checked it against her initial questions to see if this version is indeed better - a validating feedback loop. Like Emily, Nicole also demonstrated how to use the refactoring options our IDEs offer us to make changes faster and safer. Also, she emphasized that refactoring does not mean big changes at once. We can just complete this one small step, commit and push. A huge refactoring can be done in very small steps - it does not mean detaching yourself from the main branch! So let's break it down to tiny steps, as tiny as possible.
  • "Different ways of using Property Based testing in your code next Monday" by Romeu Moura & Dorra Bartaguiz. I've been in a few sessions about property-based testing before, yet only now I've finally got a grasp on the concept! Really loved the demonstration in steps and the explanations added by Romeu and Dorra. We have a hypothesis about our implementation and place a bet that our implementation, i.e. our understanding of the business rules, is correct. In our test we only define this rule, not any input. The property-based testing framework now tries to find a suitable input value to prove us wrong, a counterexample! Input is generated randomly based on given criteria, and hundred tests are run against the hypothesis with different input values. It might all be good for a few runs, until the framework detects the case that is not supported by our implementation. In this scenario, a green test run means "I have not proved you wrong yet", a red one instead "gotcha". And in both cases we're happy as we learned! Very interesting to note as well: these test runs are extremely fast and cheap. Romeu and Dorra encouraged us to take it and try it ourselves with one test on a legacy code base - it's quick and we can discover interesting things.
  • "Ensemble Exploratory Testing" by me. A session that I've given many times for many different audiences - seems it's quite a timeless one where there's a lot of demand for. I've been asked to re-do it during the open space as well, so I did. Overall, it was once again fascinating to see how much people can learn in short time when they bring their knowledge and skills together, even if the single parts (like ensembling, exploratory testing, API testing, a legacy system, unknown people, etc.) are completely new to them.

In the evening, we enjoyed a lovely dinner with great conversations. Yet that was not the end of the day's program. More people had already arrived for the main part of the conference. To set the scene, a World Café was hosted by the wonderful Juke, getting all of us connected to SoCraTes and each other. How it worked? We had three rounds, a new question each round. For each group, one stays at the same place while all others look for a new group to join. The one who stays welcomes the new people and shares what the previous group had talked about. Usually this is supported by taking notes and drawing on flip charts or similar means. As I had my session at the end of Foundations Day, I got a bit late to dinner and hence also to the World Café. Didn't matter, I could simply join in towards the end of the first round. I picked a table, and was positively surprised - Kris Corbus was there! Just loved seeing Kris again after many years, I didn't expect this happy encounter at this conference. Overall, the World Café was great to get to know more people, realizing how many are indeed new joiners, and having a few familiar faces more for the next days.


Open Space - Day 1

The main part of the conference started! Juke once again was an amazing moderator, introducing us to the conference space as an intentionally welcoming and including safe space, as well as getting everyone familiar with the concept of an open space unconference. In short: we build the agenda we want to see! And that's what happened. It's fascinating how you can really trust in the system. The queues to briefly present the proposed topics were really long, and the emerging schedule looked amazing. So many awesome topics representing a great mixture ranging from hexagonal architecture to philosophy, from hiring to graphical visualization, from nail polishing to spikeball over lunch, from asking for support to debug a problem to example mapping - the list continues. And lots of people were contributing.

Here is how I designed my day.

  • "The Practices that Make Continuous Integration" by Thierry de Pauw. Thierry is currently crafting a new talk and wanted to do a very first raw dry run. I knew about the talk as I've also reviewed his abstract proposal to submit it to conferences, and was keen on hearing the first version. As this was a dry run I won't spoil its content here, yet I can say I really enjoyed it! And the practices mentioned give lots of food for thought on how we can achieve an always working state providing fast feedback. Also, it was super cool to see Thierry run this experimental raw version of his talk, even without access to his first notes. Super courageous, I loved this demonstration of how "good enough" can generate value and early feedback. Can't wait for the final conference talk.
  • During the second slot of the day, I took it slowly. I was late from the first one anyway, and as I've been asked to re-do my ensemble exploratory testing session it was a good moment to prepare for it. So, I sat down in the kitchen area, prepared, and as things usually go at conferences and especially open spaces, people came by, joined me for great conversations, and we went for lunch together.
  • "Dedicated Tester - Never worked with one? How could this be effective? Ask me Anything" by me. Having talked with a few people at the conference, I realized I didn't encounter too many people identifying themselves with the testing and quality space. Also, one of my personal goals was to foster bridges and communication. And on top I wanted to get myself out of my comfort zone and try new things - like giving a session I could not prepare for. Long story short, I proposed this "ask me anything" session and was fascinated by how many people joined me and how many questions they asked. Among them also Eric Proegler who could provide yet another viewpoint to the conversation. We talked about testing as an activity, what we're aiming for, how this can look like every day, pairing and ensembling, power dynamics, and more. It also ended up with continued conversations over dinner, or later on people approaching me with "oh are you the tester?" Guess there weren't many others after all (yet!).
  • "Improve Learning Culture" by Stefan Boos. This was an interesting session and exchange on how to foster a learning culture. It's a recurring challenge at many companies indeed. We brainstormed how to increase the number of peers taking time to learn together and how to respond to critics who question the benefit for the business or don't want to discuss at all but tell their opinion. Lots of great people to exchange thoughts with, quite a few things to take back and try out at work. For example, we talked about internal communities, explicit policies, sharing stories and celebrate learning, ensembling, framing as experiments, how we can measure success, that it's in the end about money and what drives people.
  • "Blind ensemble" by Romeu Moura. What a great way to deliberately practice effective communication and collaboration! I've always been inspired by the many ways Romeu uses constraints to practice pairing and ensembling. This time I could experience one of them: only the person at the keyboard saw the code (in this case, Romeu himself). Everyone else had to communicate by voice. In the middle of the exercise, he also took away visual cues by not having the rest of the ensemble see the person at the keyboard. It was fascinating to observe the dynamics. It was communication on a higher level, the details of the programming language used did not really matter (wasn't even shared or asked for) as the driver at the keyboard transcribed it. Also, the driver did not have any means to "write their influence", aka trying to write something ahead of the conversation and wait for people to complain. We usually rely a lot on tools to enhance cognition, yet in this exercise we don't have that, also personal notes are invisible. Getting lost is expensive in general and gets way more expensive in this constrained setting. It forced people to break down problems to smaller parts. Also, the exercise showcased that people worked on many assumptions and didn't make things explicit (as an observer, I was wondering for quite some time if Romeu actually wrote code or just pretended to do so).

Right after the open space day sessions were finished, we had another queue for evening sessions as well! Lots of great activities being proposed by everyone, from purely social fun to more tech topics, the whole range was present. I offered the redo of my ensemble exploratory testing session. Over dinner more people got interested - and indeed, we found a great group to work with and had some fun testing together in the evening.

This evening ended up in the bar, having further great conversations following my Ask me Anything session. I met Markus Gärtner for the first time in person, cool to get in touch finally as well. Lastly, more tech fun, this time in the form of a coding kata. Romeu had asked a few times if I'd like to join him on a kata, and I never really took the courage. Yet when he came over to the bar table and kindly asked again, it was just the moment. So kata it was! The evening got late and it was time to get some rest before the next one. But not before agreeing with Romeu that we will propose a paired session the next day - whatever it might be.


Open Space - Day 2

The second day started and once again many people offered many great sessions.

  • "Talking about Security" by Claudius Link. A great open conversation on all things security. Lots of interested people joined, asking questions and sharing stories. We talked about how risk to a company is also risk to you as well as your family and friends. Think of the network! It's usually an industry working against us; a lot of attacks are automated, yet there are also a few targeted ones. Claudius is especially intrigued by the human element in all this, so we also talked about the seven principles of social engineering. How to counteract? What you can reduce most easily is the time pressure. Also: make people talk with someone.
  • "Pipeline Game - DevOps CI/CD Pipeline" by Emily Bache. I've heard of the pipeline game and related card deck a few times, now was my chance to join a session and give it a try myself. We could not do the full rounds yet enough to get a gist on it. I loved the conversations that emerged that also showed up our own biases! Based on a chosen scenario, our group designed our ideal pipeline with all the steps we felt necessary, always checking how fast our feedback would be. What stuck with me was Emily sharing that pipeline design is also a business decision - it's too important! Another curious insight for me was that most people talked about manual work as something done by others: by testers, or UX, or someone outside the team - yet not as everyone on the team and hence we would have additional waiting time.
  • "Reading Code under the Influence of Our Emotions" by Romeu Moura and me. This ended up as the paired session we agreed on doing. Reading code was the overlapping theme in our topics, and hence we went with it. We both had a vague idea and aligned for probably 30 seconds shortly before the session. This was a nice challenge in improvisation for me, and Romeu was the perfect one to do it with - huge kudos to Romeu for rolling with me on the fly, I loved it! And it seems we've hit a nerve with this improvised session. Lots of people joining and contributing. The main idea? We're spending most of our time reading code, often written by other people, yet also by ourselves. We all are human and have emotions when reading code. How can we get better at both reading code for comprehension as well as coping with our emotions while doing so? We had our own thoughts on what practices and techniques would help, yet mainly gathered input from participants and had conversations together that generated even more ideas. Lots of food for thought. I think we need more sessions on these topics.
  • Yet another slot I skipped due to conversations following the code reading and my ensemble sessions. It's an open space, some things emerge without being planned and on the schedule, and it's good this way!
  • "Security Fun - Let's Tackle OWASP Juice Shop" by me. This session was inspired by a conversation during the last days where someone mentioned Juice Shop and I felt more people might want to know about it. Hence, I seized the opportunity. I introduced people to this intentionally vulnerable application, set the scene for the first challenge and supported the groups as they went on their discovery journey. It seems people enjoyed it and had fun - and they also all managed to solve the initial challenge, or even quite a lot of them!

The official open space closed with a retrospective. We gathered in groups and collected our feedback for organizers, facilitator, session hosts and participants, writing it all down on flip charts. Loved seeing all the thought that went into it!

While the official part was done, we still had evening sessions scheduled. As we had talked about card decks today, I brought my TestSphere and Would Heu-Risk It? card decks and offered a session based on these - story telling or other activities depending on the people joining. People came indeed and were mostly intrigued by trying RiskStorming. I invented a scenario and product to brainstorm on. We had lots of fun discovering what matters to us, what risks there are and what we could do to mitigate them.

This evening was still by far not over. A few of us engaged in deep conversations filling hours, and I just loved it.


Workshop Day

The day after the open space is traditionally meant for workshops only, also ones spanning more time. I heard that traditionally also a Code Retreat would take place. I've had a few opportunities in the past where I could have joined one, and I always wanted to - yet again and again got scared and shied away from it. This time, seeing the community being so welcoming, open and focused on learning with each other, I felt this might just be the moment for me. I have to admit, I still nearly didn't go. Yet I took up my courage and sneaked into the room while introductions began. Stefan Scheidt originally wanted to join a code retreat himself, ended up facilitating it - and I'm ever so grateful for this kind and safe experience that made it easy for me to get out of my comfort zone once again. Especially as he was the first one to team up with me!

Now, what is a code retreat in a nutshell? It's a structure for deliberate practice of coding. You usually go with the same coding kata, like the classic Conway's Game of Life the whole day. You try to solve the kata in each round with a new pair using TDD. At the end of the round, you delete the code, and reflect on what you learned in the whole group. Each round you might have different constraints; you might work in a new programming language, or choose design constraints, or specific ways of collaboration (like ping-pong pairing), and more. Despite tackling the same challenge, it can be solved in a lot of different ways - each round will be different and you will learn new things! In the five rounds we did, I had four different pairing partners. The last round we did as an ensemble. I worked in four different programming languages: Java, Kotlin, Python and Haskell. We had different pairing agreements: when to switch, how to collaborate, who decides the next step, who talks etc. We started outside-in and inside-out. We used different IDEs. We used different code design constraints inspired by Janina Nemec's upcoming Code Retreat Kata Card Game - and more.

As I said, I was scared before. I'm not scared anymore! It was such a great experience and really makes me want to do more. I also realized that my previous pairing and ensembling practice really helped me in this situation (once again), just like everything I picked up on the way and that I worked across many systems, IDEs, languages and pairing styles already. It's making us really flexible in the end and doesn't get in the way of the solution. I realized once again that I know more and can learn more than I thought. I also feared that my very tired brain after all these conference days without much sleep would be overloaded quickly, that my cognitive load would be too much. Yet thanks to TDD and the engaging pairing sessions it worked really well despite being so tired, it was rather energizing. And the safety aspect allowed me to really use my energy for learning, not worrying.

The evening came, more conversations, more great people to get to know better and hang out with. Loved that I finally had a chance to catch up with Seb Rose this way! Also, I've found a partner in crime and real challenge when it comes to the game of Set - some of you might have seen it as a common guest at testing conferences. It was amazing to see Janina Nemec (whom I've met in the Juice Shop session and paired with in the code retreat) rock this game - loved playing with her, was super fun!


Returning Home

The day of saying final last goodbyes arrived. We could postpone them a bit further, though. A whole bunch of us took the same regional train to the next bigger city together. Yet another hour of sharing and enjoying that community feeling! Wonderful.

My whole experience was awesome. Organizers had put in lots of effort and intention to make this a great experience for as many people as possible and were eager to learn at every step how they can do even better. Participants were open, welcoming, curious and lovely to talk with. Personally, I felt very welcome. I left with a lot more people in my network, lots of deep and long-lasting conversations, lots of ideas and inspiration. Also, I was returning home with my personal goals achieved. I created bridges and fostered our common space. I practiced coding. I discovered something new. I also dared quite a few things, the conference inspired me to go out of my comfort zone again and grow.

That being said, there's also a word of caution: this conference can trigger lots of fear of missing out (FOMO) and I have to admit I did not sleep much. Next time I'll definitely need to include more self-care and also take a vacation day right afterwards.

One of my personal favorite aspects of this conference that surprised me in a way I didn't expect were hand-written kudos cards. Such an awesome feeling to suddenly have another person hand one to you! This time, I only managed to get my own kudos verbally across, yet next time it'll definitely be on my list to make time to write these cards. I'm ever grateful for those people who did take that time for me.

In any case, I can only whole-heartedly recommend this conference. It might be rather developer- and architect-centric as of now, yet people are really caring about their craft from a holistic point of view. So, here's a warm welcome and encouragement to have more of every skill we need added to it. Be it testing, quality, agile, operations, product, UX focused folks - in the end, we're all taking about very similar things from different perspectives, and should be working together anyway. Let's learn together.