Øredev 2012 - Lessons Learned

Øredev is an annual Developer Conference that takes place in Malmo, Sweden. Since this is my first year in Sweden I was curious of what to expect. It turned out to be an exciting and highly inspirational adventure. I took part in a couple of sessions and here is what I have taken from them.

The event took five days and was packed with a variety of talks and workshops.  I joined the conference on Thursday morning and headed off to nothing smaller than The Rebellion Imperative, held by Reginald Braithwaite. His keynote on revolutionary ideas and innovations was nowhere close to a cliché and I perceived it as a true eye-opener. His sophisticated, amusing and incisive speech provided me with a generous amount of food for thought. Consider reading his essay about learning before you actually go and check his blog (you have been warned).

My next stop was an overview of the recommended approach towards Spring 3 configuration. Chris Beams is a name I frequently come across when checking the project site. After a short introduction Chris demonstrated the concept of the code based configuration. Annotations and type safety over XML - that was the message I took from the brief workshop. What I enjoyed in particular was a concise explanation of how XML evolved into the code-driven configuration. It was interesting to learn, for example, how the @Enable annotation came to life as an equivalent to namespaces. Also scheduling and reduced configuration effort with web applications are topics I definitely want read up on.  Finally, we briefly touched some of the features of the emerging Spring 3.2.

Continuous Delivery presented by Sam Newman exceeded my expectations. Practical, rich in information and spiced with plenty of examples. The speech gave a pragmatic insight of how to make the winged build once - run everywhere happen. 

In the initial part of the talk was devoted to build automation and deployment. There is a wide range of tools to experiment with. Ever heard of Fabric or Capistrano? Consider CFEngine, Chef or Puppet to help with complex integration tasks. Worried about production intricacies? Take a look at VagrantPallet or Juju

The presenter continued by highlighting the best practices of code versioning. The Branch by Abstraction and the Feature Toggle are clearly favored over long-lived branches.

Next, functional and performance testing were addressed. Complex tests take long to run and often go beyond a sensible time span. Good quality testing turns out to be a trade off between time and reliability. As a rule of thumb, one should have only a handful of large integration tests followed by a moderately sized suite of functional tests. Ultimately, the bottom of the imaginary pyramid should be layered by a massive number of unit tests. Well, easier said than done, but there you go.. All in all, using GUI-less approach can save a lot of time, think HtmlUnit or InproctesterWhen it comes to performance testing don't forget to check Locust. Supposedly, it is better suited for the job than the "traditional" JMeter or Grinder.

Finally, Retrofitting Architecture was a pleasure to listen to. This unmistakably academic presentation centered around dragging structure out of a large bowl of spaghetti, a.k.a. legacy code. Measures like cyclomatic complexity let you levelize dependencies among software modules and make them structured. Eager to know what is the difference between refactoring and restructuring? Can't you stand living with technical debt? Check Chris Chedgey's blog, at least I will.

That's pretty much what I took from two morning blocks. Looking forward to hear from someone willing to share their view on this or a similar happening.