Categories
Programming

Facebook Platform Team Are Thankful

What a nice surprise! As a developer on the Facebook platform for more than a year, I get occational messages from Facebook about new features, such as the revolutionary Facebook Connect functionality that went live recently.  I was pleasantly surprised to find a note from the Platform Team thanking all 600K+ developers!

We wanted to take a moment and thank you for all of your great work and amazing applications that have helped make Facebook Platform the largest and fastest-growing social platform over the past year and a half. As we end 2008 there are over 660,000 of you worldwide building applications that give users more powerful ways to share and connect, and collectively your applications have reached nearly 140 million people.

It’s a stark contrast to the total lack of developer love shown by MySpace. I hope Santa leaves some coal in their stockings. I have no doubt there will be many presents under the trees of the Facebook Platform Team.

I am so very pleased to be working with Facebook in their mission to bringing people closer together. Little notes like this remind me of Mark Zuckerberg’s presentation last July and how I came away feeling inspired. So, to Facebook, I’d like to say, “no, thank you!”

Categories
Programming

MySpace is not Friendly to Developers

I’m reasonably certain now that unless MySpace wakes up and fixes their developer approach, they can expect to lose out to Facebook. The experience for the developer is so off the mark over at MySpace, it is no wonder that after nearly a year of being available, innovation in the applications is stagnant. The reason is simple: MySpace makes it too hard on developers. The rest of this post is rant against MySpace’s developer platform.

Facebook set a standard for the developer experience. It works as follows. I join the developer group; I’m a developer. I don’t wait to be approved. I self-identify and I get started. I can immediately build a demo app. I can place it in a sandbox mode where only people I’ve designated can view it, or I can just make it live. Once I think it’s polished, I can submit it to Facebook’s directory. That will get me some free advertising. Or I could skip it. I could drive traffic to it with ads. It doesn’t matter. Facebook offers me the freedom.

Facebooks offers a system for certification that shows off my app as complying with their ideals for apps. I have to pay for this, and for most apps, it’s probably not worth it. I like that Facebook is trying this and letting the market decide. I suspect consumers won’t care about the certification, but I still appreciate them experimenting and letting developers opt in.

MySpace takes a big brother approach to developers. You apply to get an account, and you wait. I’m not sure what they actual check about people, perhaps that their email isn’t fake. Once you get into the developer program, you must create a “profile” for each application you develop. That requires a unique email address, even for a demo app. This must have been someone’s bright idea to overload the meaning of profiles at MySpace instead of generating unique IDs…except, apps do have unique numeric IDs. Facebook got this right–create an app, get a long, unique ID. Plus, on Facebook, I am shown as the developer. I don’t have some other email address that MySpace sends junk to.

On MySpace, I can see my app, but no one else can until it’s approved. This isn’t actually clear, since as you visit the live versions of your profile or home page, you see your app. If you recommend the app to a friend, no error is generated. I only understood this after I looked over a friend’s shoulder to see that my app did not appear for him when he looked at my profile.

So, I clicked to publish my app, and I waited two days. I was irritated to find it rejected. I got boilerplate complaints that I had to decipher how they related to my app. And I got this warning at the end of the email: DO NOT REPLY TO THIS EMAIL. THIS MAILBOX IS NOT MONITORED. (Yes, it was all in caps like that).

Some of the issues were valid, and it was good to get the feedback. I hadn’t tested the app on MSIE, and some quirks in the Javascript prevented it from working on that browser. Other issues are bogus and prevent me from providing the experience that is best for the users.

I want to allow my users to install the app either on their profile, for their friends to see, or on their home page, for their eyes only. It’s a reasonable decision. MySpace keeps telling me  “must contain unique content on every application surface“. I’ve actually seen other apps behave this way, so I can only assume that whatever mindless approval mechanism is in place (human or otherwise) is just happening to catch me. Perhaps other developers have figured out that you develop your app once for approval and then again for being useful. I have to finally get approved before I can test that idea.

I’m on my third round of asking for approval. I’ve made 5 minutes of changes today and now I can wait another 24 hours to see if I get satisfaction. One of the latest bit of feedback, which was new to the latest round but had been there from the beginning, is related to targets for links. If you link off of myspace.com, then you must set your link to target a new window. I see why you have to do this–the app is in an iframe and it loads the remote site in the little frame otherwise. MySpace hosts the application code. Why don’t they just add targets to links themselves? Facebook touches every bit of code to make it work best with their site.

I can only conclude that MySpace does not think of developers as providing value for their site. Facebook clearly understand the fair exchange of values. Developers make these sites more attractive to users. The more time spent on Facebook, the more ad revenue for Facebook.  MySpace seems to take the attitude that developers are miscreatants who must be forced to follow the rules. Facebook has a laisse-faire attitude. Developers try ideas in the market and Facebook only intervenes in cases where the apps are clearly being harmful.

It’s an interesting balance. Certainly MySpace tends to allow it’s users run rampant. They still allow users to place big chunks of CSS code in their “about me” profile box. Facebook attempts to keep the user experience uniform. You don’t get to have a black background on your profile page. It’s clear that Facebook spends time on serious user experience development. MySpace continues to appear to be an ugly hack.

Update 12/19: Of course, the next day I get a brand new complaint from MySpace. Today, it’s “Canvas Surface of the app is not appropriately sized to fit the module.” When I get these complaints, they include a link to Application Guidelines. That previous complaint about unique content quoted these guidelines, but this time I can’t find the word size anywhere on the page! Maybe that guideline was revised away the last time they updated the guidelines November 19th. I think I’ll just turn off the canvas page completely like I did the home page.

Update 12/22: I guess the reviewers take weekends off. Of course, the app was rejected yet again. Last Friday I used the checkbox on the developer console labeled “Enabled”. I unchecked it. I didn’t bother to click to where the “canvas surface” used to be because I logically assumed that with it disabled, there’d by no point. Applying logic to this process is clearly a mistake. The rejection I this time complained about an invalid canvas surface. It’s invalid to uncheck the checkbox?!? Why is it there?!? OK, so, the canvas is turned back on with just some plain text explaining that although I don’t want anything to be here, I have to put something there. I have to admit, I’m just about done screwing around with them. I feel like I’m talking to a random error generator.

Update 12/26: I guess putting some text for the reviewer on the canvas page works because I got a reply that makes it seem like it’s in reply to my complaint. Still, the app was rejected. This time it’s because I used the word “MySpace”, which implies affiliation with MySpace. Right. I did did get some advice for how to disable the canvas: redirect the user to the profile. I think the advice was meant to be about gadgets.views.requestNavigateTo(), although the advice mentioned navigateTo, which I think is a method on the window object in MSIE. I decided to be nice and tell the user that they are about to be sent to their profile page by including a 3 second timeout with a link to go their immediately. I wonder what error the MDP folks will complain about next.

Update 12/29: I’m finally approved. Now that I am, I can see that any change I want to make must go through the approval process again, even just a small text change. I have to think that however they are reviewing apps, it can’t scale up if they ever match Facebook which has more than 660K developers. It also strikes me that rapidly adapting the app to user behavior will be dampened if you have to wait a day for every change to be approved.

Categories
News Programming

LinuxWorld 2008 and PHP Meetup

Computer science super genius and Python proselytizer JJ Behrens and I returned to LinuxWorld again this year. We’ve been doing this together for many years with only the pesky birth of a child interrupting my attendence. As JJ says, the conference was disappointing. It does seem like it’s on its last legs. The decline of this conference matches the shrinking posse that I bring with me. Two years ago I brought my entire department with me. It was pretty cool to have six Clear Ink technologist all running around hassling booth people. Last year, my department had shrunk a bit and this year, the one guy I’ve got reporting to me is didn’t come because he’s on vacation. At least I had JJ and Carl to hang out with.

One of the most enjoyable parts of LinuxWorld for me is the spectacle of JJ asking booth people really hard questions. The atrophying conference meant there were fewer people to put on the spot, although we did give the NYT guy and the mobius strip gal some trouble. When we passed the foot massaging shoe booth, I realized what this was–spam! My conference has been spammed! Yuck!

After the conference, I had the pleasure of chaperoning Dmitri Gaskin, Drupal wunderkind, to the PHP Meetup at the CNET building. Dmitri is 12 years old and the son of Igor Gasowski, with whom I’ve worked at Clear Ink for the past five years. JJ and I both had a lot of fun sitting in Starbucks and advising Dmitri on various computer science topics. There was a time when JJ was fresh out of college and I had a few things to teach him. I now find it hard to understand him half of the time. Fortunately, I can still understand the things Dmitri tells me, although when he first explained CCK to me a few months ago, it took me a bit.

One thing JJ and I agree on is that young programmers should read Hackers by Steven Levy. Programming techniques are one thing, but it’s harder to acquire an understanding for history and lore of the craft.

Dmitri and I had dinner with Lee Springer at Chevy’s and then headed over the CNET building for the PHP Meetup. Joe Stump talked about a new system in PEAR for hosting your own repository channels. It’s obvious how this can help keep code straight, especially for a company like Digg that has many production servers. PEAR’s system for installing modules is similar to Apt or RPM. Having been coding in PHP for so long (11 years!), my tendency is to do things the “old way”. So, while I’ve taken sips of the PEAR koolade, I’ve never taken a big gulp. I’m still trying to sort out PEAR versus Zend Framework versus sticking with my FreeEnergy codebase.

Categories
Business Politics Programming

Optimize the Most Significant Parts

There’s a general principle to optimization that many people miss, but seems so simple once you know it. I’m sure I first read about it in The Practice of Programming from Kernighan and Pike. You should optimize the most significant part of a program to get the most reward for your effort. The procedure is simple. Measure how much time the computer spends in each part of your program. There’s likely a loop that takes up a significant portion of the time. Optimize that part first. If you don’t follow this formula, you’ll probably spend a bunch of time optimizing what you intuitively think is slow, but it may not matter at all.

I’ve found that this approach applies equally well to optimizing money. For example, when you’re running a business, you have a range of expenses. Some of them are for tangible goods, some of them are for outside services and some of them are for salaries. Imagine an office with a fancy coffee maker. Everyone might think it’s a waste of money and a luxury, but the cost of that expense is likely minuscule compared to salaries. You’re usually better off figuring out how to improve efficiencies in your work process than going with cheapo amenities.

Of course, once you know how this work, you can use it deceptively. Politicians do it all the time. Watch how they talk about earmarks, or the apocryphal $100 hammer. You might agree that it’s not a good idea for a congressman to request a $1mil earmark for his wife’s employer, but even $1mil is nothing compared to the most significant costs to the U.S. budget: Social Security and Medicare. If you check the measurements, you’ll find that all the earmarks together total about 1% of the budget, which Social Security and Medicare are about a third. (Total federal spending is about $2.9tril, and Social Security plus Medicare is about $900mil).

I’m a relatively young person in my late 30s. I wonder if I’m not alone in counting on getting absolutely nothing from Social Security by the time I might need it. I’m not taking that chance. I’m saving money in a 401K plus whatever else I can beyond the annual limit of a 401K. I really wouldn’t mind if my taxes were 30% lower and I had to take responsibility for my own retirement.