Sebastian Bergmann |

Last week I travelled to Soltau, Germany to attend SoCraTes 2014, the fourth edition of the International Software Craftsmanship and Testing Conference. It was my first SoCraTes and will definitely not have been my last as I am already looking forward to next year's edition.

SoCraTes started late in the afternoon on Thursday using the World Café format. This is a "structured conversational process in which groups of people discuss a topic at several tables, with individuals switching tables periodically and getting introduced to the previous discussion at their new table by a table host". I ended up being a table host and enjoyed the three discussions (25 minutes each) we had at "my" table.

Thursday concluded for me with a fun session of "Forbidden Island". While playing this cooperative board game we discovered that its objective is very similar to software development projects (something that I already observed last year for a card game): "As the game progresses, more and more island tiles sink, becoming unavailable, and the pace increases. Players use strategies to keep the island from sinking, while trying to collect treasures and items. As the water level rises, it gets more difficult – sacrifices must be made." We quickly compared the rising water level to technical debt. After the game we decided to propose a session on adapting the game to our domain of software development.

Friday and Saturday were organized using the Open Space format. Pierluigi Pugliese "opened the space" and then participants started to propose sessions and schedule them to avoid conflicts. I really wanted to attend "The Super-Tasty DDD Workshop" in the first time slot but by the time I got to the room it was already packed. I floated around the other sessions instead and ended up in a tent outside were microservices were discussed. Afterwards I joined a discussion roundtable were participants shared their experience with regard to apprenticeship. The shift from the "Junior Developer" vs. "Senior Developer" terminology towards "Apprentice" and "Craftsman" that was dicussed appeals to me. In the next slot I joined Doug Bradbury, one of the initial signatories of the Manifesto for Software Craftsmanship in which he reflected on the discussion that lead to the manifesto as well as how the ideas of the manifesto can be applied and interpreted.

In the next time slot I learned Zendo, "a game of inductive logic [...] in which [a master] creates a rule for structures (koans) to follow, and the [the students] try to discover it by building and studying various koans which follow or break the rule". After we understood the game we tried to implement an algorithm for the inductive logic using test-driven development. Unfortunately I had to leave the session before we actually got to programming. My last session before dinner was the "Is TDD dead?" discussion. It was kicked off by participants role-playing David Heinemeier Hansson and Kent Beck having their discussion. Since I had followed that discussion, I did not learn anything new in this session but it was still entertaining. After dinner I hosted the "Release of Doom session where we discussed how we can adapt "Forbidden Island" (see above) to have a software development theme. Of course, we did not finish what we set out to do but we want to keep in touch and continue thinking about this idea. Maybe we have something to show for it at next year's SoCraTes.

Saturday started for me with a very interesting session on Bottom-Up TDD and Specification-by-Example. Adi Bolboaca started with a summary of the two major styles of Test-Driven Development: Classicist TDD (also known as the Chicago School of TDD) and Mockist TDD (also known as the London School of TDD). With Classicist TDD, tests can touch the outside world, test state, use stubs, and the code is written bottom-up. Whereas with Mockist TDD, tests test in isolation, test collaboration, use mocks, and the code is written top-down. And when you apply Domain-Driven Design then you start neither at the top nor at the bottom but rather in the middle. After this introduction, Adi continued with a step-by-step example of "Test-Driven Development as if you meant it". In this variation of Test-Driven Development you write exactly one failing test, make that test pass by writing production code in the test, and then later apply refactoring patterns to move the production from the test class to a production class.

Next up for me was "Legacy Code by Example" where Aki Salmi walked us through a legacy code base that he recently "inherited". He showed us the refactoring that he had already done. The session quickly turned into an interesting discussion on how to best deal with legacy code. In the final session that I attended before I had to leave was on using Docker and Vagrant to configure and provision the ELK stack (ElasticSearch, logstash, Kibana). Eberhard Wolff did a great job in this session interweaving the topics (Docker/Vagrant and ELK Stack) in such a way that you could learn the basics of both. Even after leaving the venue, though, SoCraTes continued for me. Almost ten other participants left the conference around the same time as me and we all ended up on the same train to Hannover. What would otherwise have been a rather boring train ride turned into an interesting discussion of various topics.

SoCraTes was an amazing event that lasted 48 hours during which almost 150 people collaborated and shared ideas. It is run as a non-profit, low-cost event by the community of all German-speaking Software Craftsmanship groups. I would like to congratulate everyone involved – especially Nicole Rauch, Benjamin Reitzammer, and Pierluigi Pugliese – on a job well done. Thank you!

About the author

Sebastian Bergmann

Sebastian Bergmann is the author of PHPUnit and sets the industry standard of quality assurance.