Monday, November 12, 2007

General thoughts about the QCon conference - San Francisco Nov 07

http://qcon.infoq.com/sanfrancisco/conference/

Great conference: excellent speakers, very relevant topics, just enough product pushing without it becoming annoying. All in all a conference I would highly recommend to any architect or project manager. Following are some of the themes from the conference, at least the way I perceived them.

Coping with volume growth....

During the 3 days, I felt that a general theme that permeated through many aspects of the conference focused on discussions related to finding ways in which companies can better respond to increasing transaction volumes and demand for new software applications. A large focus was put on ways to manage larger numbers of transactions through:
  • A whole track dedicated to presentations of architectures of very large scale internet applications: EBay, Yahoo, SecondLife, LinkedIn, Orbitz.
  • A significant presence of exhibitors specializing on large-volume, highly scalable, in-memory databases/caching systems & products: Coherent, Terracotta, Gigaspaces
  • Various sessions in the Architecture Quality Track like: "Architectures of extraordinarily large, self-sustaining systems" or "Architect for latency"
  • General comments in the closing panel that evolved around the implications of the transition of future gains in processing capacity from faster CPUs to multi-core and multi-CPU hardware.
This topic is near and dear to my heart:) as I am working for a company whose business has been growing 20%-40% for the last 7 years or so and where preparing and planning for increasing transactions volumes is a constant challenge. It has been very refreshing to see that implementation patterns/architecture decisions that have been part of the common "technical wisdom" but never felt quite right do not always make sense and there are many instances where they can be avoided and replaced with other implementation choices much more suitable for highly scalable systems. Although many of the presentations I mentioned above touched very well on this subject, I think the best incarnation of these ideas came through Randy Shoup's presentation about EBay's architecture principles.

For example I thought that things like:
  • XA coordination for apps working with multiple resources
  • using a database extensively as the main/only reliable holder of system of record data
  • never having any entities go out of sync in different systems, even for a short amount of time
  • processing large chunks of business logic as one synchronous unit of work
are good items that can and should be part of the arsenal of technical implementation choices that one would consider when building high-volume systems.

As many of the presenters showed, it turns out that systems that can massively scale can be built without using any sort of XA coordination, by breaking up long running transactions into multiple process flows/short-lived transactions that can be chained through asynchronous messaging, by using database mostly for write activities and serving read requests from data loaded into memory or by mirror databases, by avoiding state management at the application server level and abstracting the hardware implementation details in the application layer to allow for automatic fail-over and by partitioning data as much as possible. These types of implementations do require however up-front and careful thought in regards to how the application needs to be designed and changes in the mindset used when approaching development of high-volume applications. This brings me to the last topic related to this theme.

A good amount of time was spent during the closing panel, moderated by Martin Fowler, on discussing how to prepare for continuing to take advantage of increasing hardware processing capacity but keeping in perspective that the growth in speed of CPUs in the near future will decrease and that this paradigm will be increasingly replaced by one that relies on more and more parallel CPUs/cores.

Although a lot of focus has been put during the closing panel into what is the level of abstractions where increased support for multi-core processing needs to be supplemented (language, architecture, applications) in my view the biggest challenge we are facing in the future is more related to changing the "single-thread app" average developer mentality (if such a thing even exists - I do happen to believe though that concurrency/parallel processing are afterthoughts for many developers as they typically rely mostly on the environment or container hosting their apps to take care of that) and put a lot more emphasis on the design patterns aimed at supporting parallel processing. If before, the average application could scale well with time just by relying on faster CPUs, this will probably soon cease to be the case.....

Agile trends

Another important theme during the conference was the rise and penetration of Agile methodologies and finding ways to overcome some of the challenges they bring. This was well reflected as part of a full track on this subject. Probably the best example in regards to this topic was Kent Beck's opening keynote highlighting how trends that have been part of the business world for awhile now (eg. accountability, responsibility, transparency) are starting to make significant inroads into the software industry as well. Another very important note about Kent's presentation was his assertion that software developers need to start making the transition from technical wizardry to behaving more like business partners. In my opinion, there is no doubt that Agile methodologies in a matter of years will hold a central stage among the software development practices and processes.

I came to this conference though with a few questions and concerns about some of the practices advocated as part of the Agile current. Many of them were answered in the various sessions but some of the tougher ones did not really get addressed until I saw a presentation given by the TestNG guys (Cedric Beust and Alexandru Popescu). I had a sense of relief when I heard some more pragmatic answers to real-life questions like: "Should I test first or last?", "What should my test coverage percentage be?", "Can pair programming really work in my organization?". I thought first that they were just able to provide the answers that I was subconsciously and conveniently looking for so I got their book too - Next Generation Java Testing, co-authored by Cedric - and after reading a few chapters I realized that they are really on to something good here.....

Java Technologies

A whole track on Java Technologies included excellent presentations about the Spring Configuration project and OSGi technologies as well as Concurrency in Java. The track concluded with a heated debate, at times, during the "The future of Java development" panel - there is no such thing as a good panel without a little bit of dueling:). In my view, this panel's discussions led to the general observation that Java is a very mature language and itself needs to become more "agile" in order to be able to keep and increase its viability among the languages of the future.

As Joshua Bloch mentioned, Java needs to adopt those improvements that bring the largest amount of benefit to the users with the least amount of changes in the language while Rod Johnson put emphasis on staying in tune with the Java community needs and where possible making changes to support the "peeling off of the crusty layers" from the Java platform (I believe the Java CORBA APIs came up on the top of that list of layers:).

Other relevant topics....

I would not do enough justice to this conference:) if I would not mention some other very good sessions - judging by the enthusiasm of the participants and the quality of the presenters - focused on the Ruby language, Application security, Microsoft technologies (the leads of LINQ - Erik Meijer and Spring .NET - Mark Pollack held sessions as well) or REST vs WS.

There were a few other sessions I would have liked to attend but there was only so much time and in my case, the conference atmosphere had another rival: this was my first stay in San Francisco..... I was able though to attend two other great keynotes that I would put in the "reflection upon ourselves and the work that we do" or "I am happy I am a programmer" category:) : James Noble's - "The Lego Hypothesis" and Richard Gabriel's - "50 in 50" (A history of programming languages).

I had a good time, learned a lot and I am looking forward to next year's conference.