Monthly Archives: September 2008

Ajax as a scaling tool

When “MobileMe”: launched with a beautiful new design, the web application suite was essentially unusable because of terrible performance. Timeouts and slow page refreshes were the norm. At the time, I didn’t think too much of this. I just waited a couple of weeks until they had either improved their backend infrastructure or until traffic had died down enough to make the site work again.

But one thing that did catch my eye is the insane number of Ajax hits from the SproutCore-based UI. Even “Cappuccino”:, which I praise as brilliant to everyone I talk to, seems to join Gmail’s progress bar with this same loading overhead cruft.

Maybe I’m reading too much into it, but I think as work shifts from the server side to JavaScript there is the potential for waste and chattiness. It’s like the countless pixel spacers from the 1990s table-based designs all over again.

Now there’s a counter-argument to this, that you can cut down on the weight of hits by just sending snippets of JSON or some other lightweight format without the baggage of too many HTML tags, but in practice I think the overhead of the large JavaScript libraries and resources to construct modern app-like UIs overshadow potential gains.

Unavoidable? Maybe. Or maybe most applications will still benefit from “traditional” Ajax. “Twitter recently redesigned”: and made their web site faster in that way. Instead of a completely new client-driven interaction model, they just take pieces of the web site and load content without requiring a full page refresh. Easy wins. Web 3.0 not required.

Cuts in Core Intuition

When producing “Core Intuition”: we generally record more than we need, giving us flexibility to cut out the rambling tangents, technical errors, and frequent “uhms” that threaten to destroy any kind of pacing or interest in the show. The decision of what to leave out is just as important as the original source work — being able to recognize the best parts that add value vs. the fluff that can be dropped to make the whole thing stronger. It’s that way with any product, not just podcasts.

For episode 8, posted this morning, we ended up recording even more than usual, so we cut a batch of insignificant things but also a few good points in an effort to bring the podcast down to something closer to 30 minutes. I wanted to gather a few of those lost topics here.

Politics. We recorded the show Friday before the first presidential debate, so it only made sense to discuss the campaign. Core Intuition started before the Democratic primaries were officially over, during which time Daniel and I were quite vocal on Twitter and blogs about the election. It still surprises me that we haven’t let politics get into the show. Probably for the best.

SXSW. I talked more about the SXSW Interactive festival, from its beginnings in the 1990s as a multimedia show to the current mix of web, social media, and design. Some of the most interesting talks in the last couple of years trended away away from “5 experts on a panel” sessions to more formal talks, by speakers who love SXSW and don’t want to see it fall into mediocrity. While it’s not a developer conference, there has been a steady attendance increase from web application developers and even Mac developers.

TED. Daniel commented on the 20-minute sessions at “TED”:, and how any conference would benefit from this focused approach. Imagine how much more useful sessions at WWDC would be if the speakers cruised through their technical slides in 20 minutes and then left much more time for Q&A.

So those were a few of the segments we left out. The final show included a wrap-up of the C4 conference, insight from Daniel’s “Shush” iPhone app, and rants on Google Android and user experience. “Check it out”:

Ship it, software and newsletter

I’ve been meaning to link to “this post by Justin Williams”: on shipping his Today app quickly:

“I’m a big fan of foundation releases. In other words, release the bare minimum you possibly can to constitute a 1.0 and then let your users help decide the direction your application ships.”

There is always more to do, a never-ending stream of features you could implement for 1.0, and the same can be set for other non-software projects. When I started preparing a newsletter last month, the features crept on: I should have a coupon code, and maybe a special URL to track links, or a survey, or HTML email design instead of plain text.

I explored most of these options before finally realizing it was more important that I send the newsletter than wait for it to be perfect and solve every problem. In the end I’m glad I didn’t spend much time on it, because overall the newsletter was not very successful, providing just a blip in web site traffic and negligible increase in sales.

Almost-right Amazon response

I placed an order on Amazon last week and chose Amazon Prime overnight shipping, something I do pretty often. The package was late. Even on Saturday, when the package was nowhere near Texas, the Amazon order page still showed estimated delivery for Friday.

I emailed support asking for a refund of the $3.99 overnight charge since they failed to ship on time, and the answer I got back surprised me. They would refund it “this one time”, but in the future I should know they don’t do Saturday delivery. All the details I had provided in my email had been glossed over, and instead they had essentially called me an idiot.

The refund itself was irrelevant. It’s just 4 bucks. But please don’t blame the customer. Even if it’s not your fault, but especially when it is!

(A second email with Amazon cleared up the matter and they apologized. I’m a happy customer again.)

I’ve blogged before about “refunds in the context of customer support”:, and this Amazon situation just underscores that how you treat your customer is actually more important than the money. I would have been much less upset if they had refused to refund the shipping, but at least acknowledged that I was right about the order date and expected delivery.

Developer-hostile platform

“Paul Kafasis writes”: on the Rogue Amoeba blog:

“I certainly feel like I’ve been talking about the iPhone a lot, particularly for a company that doesn’t currently have any iPhone software available. There are many reasons for that, but perhaps most important is that we believe the iPhone is a fantastically promising platform, and we don’t want to see that promise squandered.”

In some ways it feels like nothing has changed since March when I “posted here about the iPhone NDA”: I guess I’m disappointed that there hasn’t been more public conversation about building iPhone apps until now, but there’s definitely an attitude change just in the last few weeks — one in which fear of Apple’s lawyers is replaced with something closer to rebellion: posting sample code, blogging extensively, and abusing ad-hoc distribution. It’s right and healthy for developers to become as distrustful toward Apple as Apple has been hostile to developers.

Wil Shipley on bugs

From a “Wil Shipley post”: a few months ago:

“Software is written by humans. Humans get tired. Humans become discouraged. They aren’t perfect beings. As developers, we want to pretend this isn’t so, that our software springs from our head whole and immaculate like the goddess Athena. Customers don’t want to hear us admit that we fail.

“The measure of a man cannot be whether he ever makes mistakes, because he will make mistakes. It’s what he does in response to his mistakes. The same is true of companies.”

I’ve been thinking about mistakes and bugs as I beta test “Sifter”: Since it’s not ready for launch yet I won’t comment on it specifically, except to say that despite many bug systems becoming very mature (in some cases, too mature) every developer still has a different set of needs. There will always be a new bug system promising to fix all your problems, and for many of us we have to keep reminding ourselves not to code our own. Been there done that.

River of news

No, I don’t mean “Dave Winer’s thoughts”: on RSS reader design exactly, although that’s part of it. It’s more the way we in the technology community interact with the world. Hundreds of news feeds, company chat, external IRC channels, private AIM, email dinging every 5 minutes, and the constant flow of tweets. At home, we’re connected essentially 24/7; on the road, the iPhone brings it all with us. Plus there’s the never-ending pile of work to do on too many projects.

Technology news or politics or development moves too fast and doesn’t slow down. It’s easy to feel like you’re being pulled down the river, one hand struggling to hold on to the raft and the other deep in the current, information overload all around.

Since coming back from C4 I’d been fighting a cold, which developed into a cough and sinus infection and fever and whatever worse. I finally hit the doctor up last week and just unplugged, checking email twice a day for emergencies only. I spent the rest of the day sleeping, reading, and with family — a self-imposed vacation for my brain as much as my body.

Four days later I’m feeling quite a bit better, and trying to think about what changes to make in my schedule so as to not wind up insane or dead before I’m 35. But even as I say that I acknowledge that it’s stretching the truth, because I’ve never been happier.

Tracking sales referrers

The primary way to track marketing and word-of-mouth about your product is to look at web site referrers. Easy. Just install “Mint”: and you’re done.

But not all referrers are created equal. A prominent link on Digg might lead to sales or it might lead to dozens of “wish it was free” comments on your blog. To really judge the effectiveness of referrers (and in turn give a better idea about where resources should be placed in the future) take it one step further to track the initial referrer link all the way through to purchase. You want to know where the customer first learned about your product.

This isn’t a new idea and I’m certainly not the first to do it. Wil Shipley spoke at length about this technique during “his C4 talk”: in 2007, in the context of online advertising. In talking with other developers it became clear to me that most people don’t do this, even though it can be achieved in about a dozen lines of code.

The basics are pretty simple:

  • When a link comes in to your site, see if a special cookie is set. I called mine “WiiTransferRef”.

  • If the cookie is set, you have a repeat visitor. Nothing to do at this point.

  • If the cookie is missing, this user is likely visiting your site for the first time. Put the referrer value in the cookie.

  • After a purchase is complete, check for this cookie and add an entry to the database with the referrer value and timestamp for the order.

You can add more intelligence as suits your requirements and available time, but the basics don’t need to be any more complex than this. For bonus points and slightly improved security, you could add a database entry that tracks the referrer value and use the cookie as a session that simply points to that row, updating the database to show completed orders, but I chose not to do that to keep the database uncluttered.

Here’s the PHP source for my main product page:

And then the source for the final “thanks!” page after a purchase is complete:

Note that because I am using simple PayPal buttons, not all customers actually reach the last page, because they can ignore the “return to seller” link after a completed transaction and instead go wherever they chose. This limitation goes away if you have rolled your own store or used something like “PotionStore”:

I’ve been tracking these for over a year now. I’ll share some stats about what I’ve learned in a future blog post.


There will be many C4 wrap-up blog posts, but “Fraser Speirs hit the spirit of the conference”: very well:

“I thought C4 was incredibly reflective. If you imagine it as a smaller WWDC, it’s really nothing like that. The amount of code shown on-screen is really quite small, and the conversation is really about the art, craft, business, science and lifestyle of Mac development.”

I had a great time at C4. As always I met a bunch of new folks and caught up with everyone I hadn’t seen since WWDC or the previous C4. It was especially wonderful to hear the positive feedback about “Core Intuition”: in person. Thanks!

I also participated from the stage, as Wolf called me up to be on Saturday night’s panel literally minutes before it started. I have a feeling I came off as a bit of an oddball — I managed to shrug off software pirates, decry moving away from Subversion, suggest a “crap” label for the App Store, and actually recommend Dreamhost — but I hope there was value in it for attendees, even if it was less exciting than last year’s panel. Wil Shipley did a great job guiding questions for the panel.

For a view into what the conference was like, “check out the C4 Flickr pool”:

Promoting Core Intuition 7

The latest episode of “Core Intuition”: is up. Daniel and I focus on promotion and marketing in this show — releasing a new version, sending email newsletters to customers, and promoting your brand on a blog. We also hear from Daniel about development life with the new baby and talk up C4, which starts tomorrow in Chicago.

The web site now includes links for products and topics mentioned in the podcast. We’ll be transitioning the site to a full blog with listener comments soon. In the meantime, send an email to “” with thoughts about the latest episode or suggestions for future topics. Thanks for listening!

Wii Transfer 2.6 and August

As I mention on the next “Core Intuition”:, which I’m currently finishing editing and should be out tomorrow, “Wii Transfer 2.6”: was very well received. I put out a 2.6.1 tonight to address Mii problems for some customers, and with new encoding settings that improve movie streaming quality significantly.

The following chart shows the spike in sales for August along with every month of 2008 and 2007. This isn’t revenue but total units sold for the month.


While I don’t expect nearly this level for September, I am nevertheless interested in how far it will drop. Maybe I’ll post an updated chart at the end of the year.

For the extra curious, the jumps in September and October of last year were when I released version 2.5 and when I did the MacZOT promotion. December was MacSanta, and somewhere in the middle of there I did the Nintendo Wii giveaway.

BBEdit 9

“BBEdit 9 is out”:, and it’s a solid upgrade. A recently came across an old BBEdit 4 CD, which Rich Siegel gave me back in the mid 90s when I was helping run the WebEdge Mac web developer conference. Good times! Bare Bones is one of the only “old indies” to make the transition so strongly to Mac OS X. Rich is also “speaking at C4”: this coming weekend.