Software Architecture Workshop in Arosa: back to reality
Last week I had the privilege to spend 5 days in Arosa, Switzerland, among a group of people who were way more smarter than I am, for the annual Software Architecture Workshop (SAW). The SAW in Europe is an initiative of Jimmy Nilsson, and uses the Open Spaces methodology to let the participants discuss all kinds of topics during a set of parallel tracks. This year, the organization was done by Beat Schwegler of Microsoft. From the Netherlands, Paul Gielens, Arjen Poutsma (of Spring framework fame) and myself were present. The SAW is an invite only event.
What was so great about the event was that all 40 participants were considered equal and everyone was able to setup a session about a topic (related to software architecture of course) in the slots on the parallel tracks. It was a blast, I can tell you. Not only was it great to finally meet Jimmy Nilsson, Mats Helander, Sebastian Ros and others in person but the event itself was awesome as well, with every session giving you a big set of ideas, insights and visions on new directions in software architecture and software engineering. Because a lot of the participants (I think 25-30 people of the 40 people participating) were Java oriented architects, as a .NET software engineer I learned a lot of new insights in how things are done on other side of the fence and also how they look at how software should be archtectured.
Mats Helander describes on his weblog one of the sessions, which was about O/R mapping. The participants who were working on O/R mapper frameworks agreed on the fact that it's not about O/R mapping anymore, it's about managing domain objects/entities in a complete system. Mats explains it better than I do so please pay his article a visit .
So what did we discuss, which topics were hot? Of course TDD/Agile, however this year DSL's were the core topic in many sessions. It's amazing how much you can do with them and how little current technology actually lets you use them and combine them at full power. Other topics were Behavior Driven Development (BDD) presented by Dan North, Event Driven Architecture, code generation, Service Oriented Architecture, REST, Aspect Oriented Programming, Visualization of metrics related to the state of the software, Domain Driven Design and many more.
Eye openers, an example
One of the things that really made me sit there thinking how I could have been so stupid all these years was a session initiated by Dr. Kresten Krab Thorup, about Performance Metrics, what to accept as the 'acceptable 0-level' and how to measure these performance metrics during software development and after deployment. What was so great about Kresten's approach was that he had build a framework (using AOP) into the actual enterprise application so at any given moment fine grained call graphs, performance metrics for every call etc. (think in the graphs you obtain from a profiler). could be obtained from a live running system. The idea is that a big service consuming applications are only truly 'done' when they're deployed which means that any measurement of performance before that point is relatively meaningless.
Because the performance metrics could be obtained at any given moment, so after deployment but also during unit-testing with for example continuous integration, a live visualization could be made with comparisons of older metrics, e.g. graph comparisons of current performance mentrics data and the data from last week. Because the data was fine grained, great insight was obtained in where the hotspots in the live system were located and thus how to fix them properly. Don't consider the Windows performance counters useful in this case, you really need information about which code actually is taking which amount of the available performance, resources etc.
How many of you decides to build in such a framework so these performance metrics can be obtained later on? And how many of you are actually willing to give in some performance, say 10%, to get the right data to really be able to optimize the whole system properly? I bet not a lot. But think about it for a second... : have you ever even thought about this to build this in from the start? I haven't, but after I was confronted with the brilliance of the idea and the big help it can be for enterprise applications, I can't imagine you wouldn't build it in.
The whole idea is also a great example of how AOP can help you with the engineering of the software you have to create: the performance metrics logic isn't part of the business domain of the enterprise application however it is part of the whole system when the system is live. This is also an example how much more mature the Java world sometimes is compared to the .NET world: AOP and more in particular Dependency Injection and byte code manipulation at runtime are part of every day's life however in .NET land, AOP is a technique used by a relatively small group of people, and byte code manipulation at runtime isn't that easy as Microsoft more and more closes the door on this instead of embracing it in full and making it a first class citizen at the CLR level.
It was a great week and my head still hurts of how many awesome new things I've learned. I hope to formulate them in some blogposts in the weeks to come.