Eddie Sullivan at Chickenwing Software has a fascinating post entitled The Facebook Platform is Dead. I agree with many of his comments. I don't think there's anything terrible about the "Facebook Certified Application" program; that's a business decision, not a software policy decision. But Sullivan says one thing that set me off. He wrote:
The big companies can afford to hire someone full-time to test and re-test their apps against every change to the back-end, but the rest of us cannot.
To which my reaction is: shut up, and don't be so damned lazy.
Install Celerity, and get headless testing with WATIR in a rapid-response environment. Install Hudson and get fully automated continual integration. Install Git as your repository, and tell Hudson what your master is, and honor it. Install Cucumber so that when it fails, the failure reports are in clear and unambiguous English. Put this all on that archaic hunk of junk PC in your basement, give it a fresh hard drive and install Debian Linux. Give Hudson a mailserver so it can notify you when an automatic test run fails.
None of this, from building your own PC and installing Linux all the way up to installing Ruby, JRuby, Java, and all of the other tools necessary to support your build environment and make it work, ought to be beyond the ken of the average programmer.
Facebook is just a web application. Treat it as such. Test against it. Get a few Facebook Test Accounts, write a few WATIR scripts to automate their Facebook relationships and friend graphs, write more to log in and go to the application, then test the Hell out of your application.
None of this is hard. If you spend one week teaching yourself how to set Hudson and Git up correctly, you'll benefit forever from Kent Beck's famous quote, "transmuting fear into boredom." Even better, by putting it on Hudson and Git, you get freedom from even the boredom, for the most part. Instead, you get knowledge that your fixes don't break anything, and the capability of backing out when they do.
What is hard is being in the habit of testing. Of writing testing in terms of expectation. I'm fair at it, but I'm getting better. I aspire to Beck's mantra: I'm not a great progammer. I'm a good programmer with great habits. Test-driven development (and behavior-driven development) are great ideas (although a lot of TDD zealots go overboard, with the predictable backlash), but integrating them with even better,_ continuous_ building and continuous testing, should make all web application development better.
Believe me, Facebook apps are in desperate need of two things: automated testing, and better graphic design. I can at least contribute to one of these.