Recap of the first ABAP Code Retreat in Weinsberg
Last Saturday, 23rd July 2016 the first ABAP Code Retreat took place. It was organized by Damir Majer and supported by Christian Drumm and Kaufland Informationssysteme.
As I like the idea of code retreats since years but never managed to participate in one, I was really eager to join that event.
When I arrived in Weinsberg in the Kaufland office there were already around 30 developers about to start the event. It was really cool to meet some of the well-known SAP community usual subjects there as well as some guys from our SAP Stammtisch Stuttgart group.
Before we started to code, there were three 20 minutes marketplace sessions. They covered the topics we were focusing on during the code retreat:
- ABAP Development Tools for Eclipse by Jürgen Steinhauser and Rüdiger Alex
- ABAP Unit Testing by Dennis Schaaf and Markus Braunbeck
- Test Driven Development by Christian Drumm
You can find the slides already on the event’s Wiki side.
Right after the marketplace sessions we got an introduction to Conway’s game of life which was the programming task of the day for all four session we had. There were also some rules introduced:
- All four coding sessions were done in pair programming
- The pairs got changed after each session
- All the coding got deleted after each session
After building the pairs for the first session, we started to code. For each session we had 45 minutes for coding and 15 minutes for feedback in the whole group.
Already before we started, Damir stated that we will not be able to finish the task in the given time. This became quite obvious after the first minutes. In the first round my counterpart and I had a lot of design discussions before we started to code. But we could implement at least some of the methods needed and also ABAP unit tests to verify the expected results. Already in the first session some more rules were applied: we had to change the keyboards so that both of the pair had the chance to code.
We did some further variants in the next sessions: we had to change the keyboards more frequent, in one session we started developing the unit test first and afterwards implemented the actual method. Another task forced us to really apply clean code principles and use readable variant names: we changed the keyboards every five minutes and were not allowed to talk to each other. So it was very important to be able to understand the code which was created by the developer we paired with.
Damir was right in the end, we were never able to finish Conway’s game of life, but that was not the goal of the code retreat. The actual goal is to work on your developer skills by not focusing on finishing the task in time but on the way how to finish the task. Something which we usually cannot really do in our daily job because the clock is ticking.
I really like the format of code retreats because it’s an event were you do not focus on new technology but on improving the skills. This kind of events was missing so far in the SAP community. Therefore a big thank you to Damir and Christian and all the other who supported the first ABAP code retreat.
I personally learned a lot. Already while doing pair programming we were always talking about best practice. Even some shortcuts for ADT can make developer’s daily work more efficient. I learned even more by e.g. applying Test Driven Development in such a consequent way I never did in any of my projects so far.
I’m quite sure, it was not my last code retreat and I can just recommend to visit one or do your own one. There will be some more ABAP Code Retreats coming soon, they will be posted on the corresponding Wiki page!
Last not but least I want to thank the sponsors of the event who made it possible that this event was for free and we could enjoy delicious food and free drinks and very important coffee 😉
Thanks Martin for Sharing your Experience.....
Great point. Quite frequently I start with the best intentions of writing the perfect code but then end up scrambling for anything that works. While I find that I learn best when there is a practical task at hand, it is difficult to do that when someone is breathing down your neck.
I think a second blog highlighting more technical details of what you've learned (and even something that you learned did not work) would be quite appreciated on SCN.
Thanks for sharing!
Hello Martin,
I heard about the event on Twitter but I wasn't fully aware of what it was about. Reading your blog gave me fully insight on the topic and the concept of the event is really nice.
Being able to focus on developer skills rather finishing some task is a different and good approach. It is focus on what really cares(at least at that particular moment), really different from what we face at our daily basis. Maybe something that seems more like Sharpening the Saw.
Thanks for sharing your experience and looking forward to participate of one ABAP Code Retreat event.
Regards,
JN
Hi Martin,
Thanks for the recap. I'm glad I was able to attend, it was definitely worth it. So many take-aways, it's hard to know where to start...
The biggest take-away for me was not technical at all: the whole day was a lesson in humility. I really struggled to even get started with this TDD thing. Reflecting on it, on my way home, it felt like I had to start learning how to program all over again. I'd never paired before, never done any TDD, and it showed...
Luckily we were in a very safe environment where failure was 'encouraged', and learning considered more important than solving the problem at hand.
That alone makes a code retreat a great addition to the collection of community events we already have. I can't wait to do this more often.
Jelena Perfiljeva: yes, lots of technical learning, but it's kinda hard to pinpoint (my head is still a mess 🙂 ). I can give you 2 examples, both of which I learned from Christian Drumm (my second partner of the day):
Maybe not too impressive, but this is exactly the kind of stuff you get from pairing with different people. I was happy to be able to pass it along in one of the next sessions.
OK, a third thing I learned: use the 'for testing' addition not only at the class level, but also for each method in the test class that's meant as a test method (for there can also be other helper methods in the test class). We did <CTRL> <SHIFT> <F10> to run the tests several times, and couldn't figure out why Eclipse kept saying: 0 methods, 0 errors. Well, we were happy with the 0 error part, but didn't understand the '0 methods part' 🙂 .
Having to throw away the code at the end of each session also drove home the point that the 'solution' didn't matter.
Sometimes I felt that the goal of writing clean code, using pair programming and TDD, was just too much at once. For instance, in pair programming you normally have two roles, the driver (at the keyboard) and the navigator (reviewing and thinking ahead). You then switch roles frequently. This didn't really work out for me. Me and my partners did switch roles/keyboard a couple of times, but there was not a single session that I felt had a good flow. Which was partly because of struggling with the TDD part, thinking and discussing the design, and even 'basic stuff' like what tests to write.
All this struggling was excellent of course, but IMO you get even more out of an event like this if you've used this way of working a couple of times before.
OK, let's finish this rant (for now). Thanks again to Damir Majer for coming up with this event format, making it happen and also for facilitating. At an event like this you really need facilitators and Damir and Florian(?) did a great job!
How do you do it then? I haven't figured it out yet 🙁
From the top of my head: open a class in Eclipse for editing, go to tab "Local test classes", and start typing testc. Then hit <tab>. Can't test it right now. Let me know whether that works. Maybe Christian Drumm can help out?
Hi Suhas,
to activate code completion or a template like the one for test classes you need to hit <CTRL>-<space>
This should give you a list of possible completions. If you type testc and activate the code completion there should be an entry for the test class. Note that you can also define your own templates in the preferences.
Christian
Thanks Christian 🙂
Yeah i use the template for test classes too
I was trying with testC+<tab> (as suggested by Fred) and it wasn't working 😛 😆
Hi Suhas,
Sorry I got them confused...
Hi Fred,
Nothing to be sorry about. At least now we are all on the same page 🙂