Thursday, April 10, 2008

Thoughts on The Google App Engine and Good Web Application Design

Last week, Google announced and made available the Google App Engine. I watched the series of 6 videos that discuss what its all about - including a demo of coding, building, and hosting a web application in 8 minutes. Given all of the complexities behind build, deployment, and hosting of web applications, I can see how this is very attractive.


But, I have also been spending a lot of time thinking about agility and its focus on code quality and code testability. I am currently reading Scott Bain's great book, Emergent Design where he discusses at length the need for professionalism in software engineering - that just because you can write code, doesn't make you a software engineer professional - and it is the lack of attention to professionalism and quality that has contributed to a poor relationship between the customer and the developer - because of years of crappy code, missed projects, and high costs dumped into fixing production bugs and re-writing entire systems. His definition of professionalism is tied to adhering to a set of design principles and patterns that have been learned and established over time.

In the google demo, we watch a web app strung together in a matter of minutes in a very non-object oriented fashion - very procedural, tightly coupled and without cohesion. The message - you too can write code in a matter of minutes and have a web app. But what we have learned so many times is that unless you pay attention to key design principles such as loose coupling, high cohesion, single responsibility principle , open-closed principle, encapsulation, etc (see Agile Principles, Patterns, and Practices in C#) - you will end up with code that is not testable and very costly to maintain or change - so much more costly in the end, despite the quick initial ability to get the app out there and see it working.

My point is, that with all the latest in rapid application development such as the google apps platform, python, php, and other scripting languages - we're not maturing as a profession (that of software engineer) until we can start demonstrating the use of these patterns and principles as part of the overall message.