The SoCraTes unconference 2014

13.08.2014 - Lesezeit ca. 7 Min - 1500 Wörter

Software Craftsmanship and Testing Conference in Germany

The 4th International Software Craftsmanship and Testing Conference

took place in Soltau (Germany) from 7 to 10 August 2014 and was organized by the Softwerkskammer .

The beginning

It started on Thursday at 17:00 clock. Pierluigi moderated the conference and always encouraged us to share our thoughts and experiences. He and the organization team did a great job. After the opening speech, we hosted a World Café . We split up into different teams and discussed the expectations that we had at the conference, our interests, and so on. We changed the group every 25 minutes and then discussed further. This allowed us to share many ideas and different point of views.

This was a very good way to start the conference. It allowed us to know what expectations we had. After the World Café was closed, the discussion went on in the restaurant, the bar and outside. In this way, the idea for the sessions, which we would present or visit the next day, were placed.

I debated long into the night about how I could convince more people in my company to work as a software craftsman. Thanks Sandro for your valuable suggestions.



We met at 9:00 to define the agenda of the day.

Open space was a new experience for me. No predetermined agenda at all. I was astonished how many people stood up, took a post it and offered one or more sessions. At this moment I realized my problem: lots of interesting themes I would like to know more about and I was not able to split myself to attend them all. It was a difficult decision. There were sessions about microservices, mocking and stubing, Jenkins, Docker, Git, QA best practices, Trello, Java 8, VIM and plenty of other possibilities to attend to.

I decided to take part in three sessions, in order to be able to assimilate all that input.

Attended Sessions

About git

Andreas facilitated a great introduction to git, an open source decentralized source code control system.

In contrast to client-server based systems like svn, you have
the complete repository on your machine at any time by using git . This allows you to work offline without any limitation.

One of the greatest git’s advantage is the easy way to create local branches. You can change between these branches really quickly. In this way you can manage different versions of your application, having for instance a master branch for the shippable version and many features branches for testing and managing changes an new functionalities. Then You can merge or rebase features with the master branch.

You can get more information about git at the homepage or just read Scott Chacon’s book Pro Git for free online.

The manifesto for software craftsmanship

For me, one of the most interesting sessions of the conference. Doug told us about the history of the manifesto for software craftsmanship

At the Agile Days 2008 Robert C. Martin (aka Uncle Bob ) made ​​a proposal for a fifth value for the agile manifesto . This value traded to craftsmanship.

In the next few months, several meetings and discussions were held. In 2009, the manifesto for software craftsmanship was adopted. He was a concretization of the agile manifesto.

Although they shared the values ​​of the agile manifesto, they found something that they value more. Doug made ​​this clear by an example.

The Agile Value: Working software over comprehensive documentation is reflected in: Not only working software, but also well-crafted software. The meaning behind this is: though working software is an important value, it is more valuable when it is well done and clear, easy to maintain, cohesive, decoupled, and so on.

A great story about the meaning behind the words and metaphors told by a man who was present when the Manifesto was written.

Java 8

Marc showed us the new stuff in java 8 : Lambdas and Streams

I knew the concepts and usage in C# and was interested to see how it works in java. It was a very good introduction.

Do you like a little example how it works?

Given this person class:

 1    public class Person {
 2        private String name;
 3        private int age;
 5        public String getName() {
 6            return name;
 7        }
 9        public void setName(String name) {
10   = name;
11        }
13        public int getAge() {
14            return age;
15        }
17        public void setAge(int age) {
18            this.age = age;
19        }
20    }

And having a Collection of persons, we can filter the collection contents using lambda expressions and streams in this way:

1    List<Person> persons = new ArrayList<Person>();
3    Stream<Person> personsOlderThan20 =
4                p -> p.getAge() > 20);
6    Stream<Person> personsNamedPeterBetween18And35YearsOld =
7                .filter(p -> p.getName() == "Peter" && p.getAge() >= 18
8                        && p.getAge() <= 35);


New day, new agenda

Saturday morning, same time, same method. At 09:00 we met and defined the agenda.

If you think there was less assortment at sessions, you are wrong, very wrong. Once again all that awesome people performed some kind of magic and offered lots of interesting themes to learn or discuss about: Legacy code, Java Script (Performance, AsyncJS, NodeJS, …), security issues, elastic search. Some Friday themes were deepened: Git, Dockers, VIM. And so on, and so on. That was great.

More Sessions

Legacy code by example

Aki showed some legacy code he inherited and went with us along the refactorings he did. A lot of ideas on how to clean legacy code, for instance:

and much more.

Of course, no code is perfect. On this basis it was possible to give some hints how we would improve the code yet. Aki was happy, we were happy. Great session!

Legacy code (Mikado method)

In this session I learned a new approach to work with legacy code called the Mikado method . Thank you Claudius for showing us how it works.

The Mikado method follows simple principles. First, we need a target (for example, a code change). Then we create a graph with the target in a double circle, then we define the steps that we need to reach the goal and add them in the graph in a simple circle, then we connect them with the goal using arrows. Next, we refine the newly formed steps and place any refinements in the graph in a simple circle and connect them with the step to which each belongs. Keep refining until you have small clear steps.

A tree is created. The root is your goal, in the middle there are some nodes with steps / refinements and the leaves keep the small and clearly defined steps.

Concentrate on one leaf and implements them. If all goes well, you have working code after implementation. Commit it.

If it is not possible for you to implement the leaf, then discard all changes and refine further. The node was not easy / clear enough, it was not really a leaf.

Take you one leaf at a time and remove it from the graph (or mark it as completed) if you commit the changes.

When all the leaves have been done, the work should be done.

Nice method. I think I will try this way soon.

Advanced git

A Git basics session was not enough, so I attend the advanced session facilitated by Andreas .

We learned more about how to work with Git:

It was a good introduction on how this advanced techniques work.


On Saturday evening the conference was closed, but for the people who could not get enough there were two different possibilities on Sunday:

I took part in the code retreat.

Legacy code retreat

We practised the whole day our skills :-)

We focused in working with legacy code in different programming languages, learning to handle it better, building a safety net, using the mikado method, using a programming language you hadn’t used before. And last bust not least a mob programming session in cobol, trying to get in-code asserts on it. Amazing!

Thank you very much Martin and Adi for facilitating a great code retreat.


Awesome People. Great conversations. Top sessions

Thank you very much ladies and gentlemen. I hope I’ll see you soon.

If you enjoyed reading the article, I would be glad if you share it. :-)