Escher's Drawing Hands

I’m a big fan of Douglas Hofstadter’s Strange Loop theory. Strange loops exist in all sorts of places, in art, in music, in math and in software. I’ve found that the most impressive pieces of software are often those that inherently take advantage of a strange loop.

Take for example, a company like FogCreek software. FogCreek makes FogBugz, an web app used for tracking bugs. Interestingly, FogCreek uses FogBugz to keep track of bugs in FogBugz. At a certain point, the software got to a point where it could bootstrap itself and report its own bugs. The better FogBugz gets, the better FogBugz gets. Likewise, Apple uses their own computers to design their next computers, and 37signals uses Basecamp to organize Basecamp.

Now strange loops are not the same thing as dogfooding, although equally important to startups and nascent projects. Dogfooding is the forced interaction with what you just built; software that creates a strange loop never needs an email from a supervisor encouraging everyone to use the product.

While I’m not designing LayerVault, it’s remarkable to watch Allan come up with mockups for new pages for the product. I’ll cruise through and see the changes that he’s made. He started pursuing an idea for the new File Page that he later rolled back. He was able to do that easily because of LayerVault. The better LayerVault gets, the better LayerVault gets. The improvement is nearly thoughtless: all we have to do to get a better a product to keep using it. It’s already become irreplaceable in our workflow.

When building software, if the strange loop option exists, take it. It’s such an easy way to guarantee that your software, or anything else, will become as good as it can get.