AOP with Groovy

I’ve been doing some development work on an Online Store with Grails for sometime now, but have not yet investigated the use of AOP with Groovy.

John McClean has a lengthy but very clear article on InfoQ.com that walks you through how to create around, before and after advice on a Groovy class. This article is defintely worth a read, as it is something that I hadn’t picked up on that is possible with Groovy.

70% of development time spent on non-differentiating tasks or features? – Jeff Bezos

Jeff Bezos, founder of Amazon, recently spoke at the MIT Emerging Technologies Conference, and noted that 70% of development tasks or features do not add to differentiate the product from competitors. Frank Sommers summarizes Bezos’ points in an article on the Artima Developer website.

It’s true that every system has a necessary amount of infrastructure that has to be developed in order to support the system, and these features such as error logging, error messages, security – all these features are essential overhead that you have to incur even before you start implementing the core features of your application. Bezos’ point is that in order to be successful, you need to be able to implement these infrastructure services quicker than your competitor in order to work on the differentiating features that will give you the advantage over your competitor.

Approaches being made popular like Ruby on Rails are providing frameworks that do just this. The ‘muck’ as Bezos decribes the unavoidable infrastructure, is already provided. The core infrastructure services are all provided, and even a certain amount of configuration is avoided by using the ‘configuration by convention’ approach. The trouble with the RoR approach though is that this is a ‘one size fits all’ solution for web application development, and if it does not meet your needs exactly, then it really does not provide any value. I still believe that this is the way to go though, and expect we’ll see variations on this theme that will allow for easier development of other types of applications, and not just web apps.