There is a site I’ve seen around lately called The Twelve Factor App which lists 12 rules for building a web application.
The goals are noble: to build scalable, portable, easily deployable web applications, while being language and framework agnostic. Unfortunately I found several of the points to run against my experience and personal opinion, so I wanted to go over the 12 tenets they recommend and offer my thoughts on each. Please keep in mind that much of my experience is on ATG, J2EE, and large complex applications.
1) Codebase
Overall this is pretty normal, but in some cases I don’t completely agree with the idea that shared code can only be handled through independently built-packaged libraries included via some sort of dependency manager. I haven’t really used a good J2EE level dependency manager, perhaps Maven makes this easy?
2) Dependancies
I have several issues with this “factor”. Firstly, Java doesn’t have a packaging system for distributing libraries and common app bundles. Next, I’m not sure what a “dependency declaration manifest” actually DOES at the app level or what “dependency isolation tools” I should be using. ATG has module dependencies defined within the MANIFEST.MF files which is great, but isn’t something you can use to handle extra-ear dependencies (JBoss, JDBC drivers, native apps, etc…).
Further they expect the app to provide/package ALL system tools it may need. The examples they use are ImageMagick and curl. This is crazy for many reasons: first, many of these tools are different on each platform, packaging/building/installing these tools on each different platform is a massive effort and not something easily bundled into your app, nor should your Java/Ruby/PHP developers have to deal with multi-platform C++ build issues, secondly most platforms have their own package installation and dependency management system (yum, apt-get, etc…) which ensure supported platform specific versions, which not only will work, but also may be required for support for Enterprise Linux distress for instance.

Steve Jobs is dead. My sympathy goes out to his family and friends who will miss him the most. I think tonight much of the world mourns with them. Apple fans or not, most people know and respect Steve Jobs for the huge impact he has had on everything from modern computing, to remaining your phone, to inspiring entrepreneurs around the world. He drove a revolution around industrial design, user interaction, and hardware, and grew a very small niche computer company into a major world player and leader.