Sunday, May 25, 2008

Google App Engine

A few days back, I received an invitation to create an application on Google App Engine (GAE). I was impressed with the ease with which I was able to create a quick CRUD application. Even though I am not very knowledgeable in Python, it took only a few hours from downloading the framework to creating a usable application (different from the example app), and that time would have been shorter, if it hadn't been for some minor troubleshooting with configuration issues.

Google markets GAE as providing you with the ability to "build web applications on the same scalable systems that power Google applications." The High Scalability site has some good advice on how to leverage the framework to build a scalable solution. However, I think GAE may be more attractive to those building small-scale web sites that do not need a whole lot of programming.

Consider the web sites of typical small businesses. Many of them have a few pages describing the company and their products with a few email forms for sales or support. GAE can be used to create and host such web sites. Those sites have been pre-dominantly built with plain HTML with PHP or Perl for the web forms. Now, they could be created on or moved to GAE which has free hosting and an arguably better programming infrastructure.

Personal web sites hosted on web sites like Geocities can also be moved to GAE. While Geocities charges for programming in PHP and mySQL, GAE provides a free option to program with Python and the GAE Datastore. Most of these web sites (business or personal) will never come close to consuming the 500 MB and 5 million page views that would require additional cost. And so, the value proposition of GAE is very high.

For large-scale web applications, I feel that GAE may serve more as an incubator rather than a long-term hosting solution. During the initial stages of building an application, GAE provides a convenient programming environment at zero or low cost. However if the application becomes popular, the developers require greater control over the programming environment (hardware and software). Presently, GAE does not provide scheduled processes or database export, two features that would be essential for a large consumer application.

The most important barrier, though, is the lock-in to the Google infrastructure. Being tied to GAE will keep you hostage to Google's pricing, infrastructure and service. Porting to a different infrastructure might require time-consuming changes to your application. The longer you wait, the larger your risks. So, using GAE for creating an initial version of your application may make sense from a cost and prototyping-ease perspective, but if you have a much larger vision for your application, you may want to examine other platforms too.

Google now has a few services that are separate, but would seem to belong together: Blogger, Google Pages, Google Sites and App Engine. Let us call the amalgamation of these services as, say, Google SiteBuilder. It would provide the ability to create dynamic pages in Python (and other languages). You could create static pages and edit them visually. You could perhaps edit the dynamic pages along with the static ones in an administrative interface. You could change the site layout through pre-built or custom templates.

Google SiteBuilder could allow you to add different blogs and feeds to your website. You can also create a wiki or more for different people to collaborate. This last feature is an extension of the function of editing static pages: You are allowing other people to edit the static pages and upload documents, while maintaining the history. With all these features, Google SiteBuilder perhaps becomes more like an online Visual Studio for web applications.

I suspect that we will not see such a consolidated product from Google soon because of the possible administrative complexity for end users, many of whom are not programmers. For example, a user of Blogger simply wants a good-looking layout and the ability to add and edit posts, and may dislike seeing an interface showing the various files for the application. What may happen is these applications will start converging towards each other and co-opt each other's features.


Technorati tags: ,

Monday, May 05, 2008

Outbursts of Creativity

Cornelius's post on his recent low frequency of blog posts was very interesting. Since my blogging frequency has also gone down, I look back at 2007 and wonder the same thing: What helped me blog so much then? To some extent, Cornelius is right in saying that the less structured one is, the more output one can produce. But that explanation does not really solve the problem, because the trick is: How do you produce quality in greater quantity, at least in accordance with one's own definition of quality?

I feel that the biggest requirement of any creative work is the availability of time, or more accurately, the assumption of uninterrupted time. Creativity, by definition, means doing something that has never been done before or never been done quite the same way before. Because of its uncertain nature, it is difficult to estimate how much time it would take to complete a creative endeavor. To start a creative task, a person must have some confidence that he or she would be able to complete it, and what they need most, apart from tools, is the feeling that they will have sufficient time to complete that task.

Now strictly speaking, time is always available. It is possible to find gaps of unallocated time in the midst of other tasks that one is doing, but such time segments are useless for creative work. Creative work requires a significant focus of the mind to achieve a state called "flow". Flow is achieved when the mind is fully knowledgeable about the critical pieces of the creative work and at the same time, heavily processing that information to make new decisions. Until the first stage (knowledge-acquisition) is achieved, the second stage (decision-making) is very inefficient. The first stage always requires some time, and the more complex the creative work, the more time it consumes.

When you have a short time segment, you don't have enough time to achieve the first stage, even though the actual work accomplished in the second stage could have been completed in that time. When you are interrupted in your creative work, you have to start all over from the beginning. When you feel that you are likely to be interrupted, you decide not to start something because of the same reason.

There is sometimes a "zeroeth" stage (if I may use the term) of "desk-clearing". Sometimes, a person will go out of his or her way to dispose of other totally minor tasks like replying to emails or taking out the garbage, even though the more urgent work is pending. To an outside observer, this behavior can be ridiculous and frustrating. But what the person is doing is to remove all possible distractions and create a solid chunk of time that can be spent on creative work.

High performance in creativity comes when the person has achieved flow and can count on not being interrupted. This usually means very early hours or very late hours when the chances of being interrupted are very low. Another option is, of course, a physical location where one can work in peace for long periods of time.

I don't want to confuse this with workaholism, which is about spending more hours per day. A more creative person may or may not spend less hours than a hard-working person, but they spend those hours with more focus. Creative passion can lead to voluntary workaholism (at work or as a hobby), but that is a different topic, some aspects of which I have discussed previously.

One technique around the constraints of uninterrupted time is to convert creative work into mechanical work. For example, one could design a mechanical way of writing blog entries, such as post the most interesting link you read all day and write a couple of paragraphs outlining your views. Sticking to a well-defined structure can reduce the need for greater analysis and ramp-up time. However, the quality is the production-line type of quality with less deviation from the norm. So even though you are unlikely to produce total failures, you are also less likely to produce hits.

The other technique is to maximize the use any sufficiently long time period at the risk of being less productive. This article on sleep deprivation by 37 signals is pretty accurate, but it misses the point that when it comes to creativity, you are usually operating (without sleep deprivation) nowhere close to 100% unless you are well isolated from interruptions. If you are doing mechanical work, it does not make any sense to stay late hours, but if you are doing something creative, it may pay off to continue to produce until your brain drops off the flow state.


Technorati tags: