Tag Archives: riverfold

Long vs. pure App Store names

David Smith has an analysis of long names in the App Store, as developers try to understand the scope of Apple’s upcoming cleanup changes. Don’t miss the text file of 255-character names he found, which are all ridiculous. I’d laugh if this kind of gaming of the store didn’t make me sad.

I’ve always thought that the title shown in the App Store should be the actual app name. Keyword spamming is clearly bad, but I personally don’t like even tag lines in the name. Of the 4 apps from my company Riverfold that have been in the App Store, the names in the store all exactly match what is shown on your home screen:

  • Sunlit
  • Tweet Library
  • Clipstart
  • Watermark Mobile

Maybe my sales suffered because of my refusal to add more words after the real name, but to me, these names are pure and gimmick-free. I don’t want my customers subjected to a truncated mess of words even before they use my app.

If tag lines and brief descriptions in the App Store name are so common (and they are), then Apple should complement the new 50-character limit by having a separate 1-line description field in search results. This was discussed on the latest episode of Release Notes. My worry is that Apple attempts to fight problems with new policy alone instead of also encouraging the right behavior with App Store features.

1 year indie

One year ago, I celebrated my first day without a boss. I had just written 2 weeks of daily blog posts about wrapping up work after 14 years at the same company. Today, I’m wearing the same Mac t-shirt and working from Whole Foods again to mark the anniversary.

So how has it gone, a full year as an independent developer? It depends who you ask. While I was leaving the best day job I’ll ever have, there’s still no substitute for the flexibility and freedom to work on my own projects. From that perspective, the last year has been amazing, with some great success on new revenue from Core Intuition and contracting too.

And I made a few decisions early on with how to manage the business that have proven useful to smooth over the bumps. For example, I pay myself a fixed salary on the 1st day of each month, and for 12 months straight I’ve always met that goal. This month, I gave myself a small raise.

On the other hand, I’m still bringing in less money than when I had a real job, and my wife might say that there’s a fine line between being self-employed and unemployed. We’ve let our credit card debt go unchecked. There’s been no slack in the high monthly expenses of the house, car payments, business costs like hosting, and everything else. My income from Riverfold has grown significantly, but not significantly enough.

Yet, I’m upbeat. I’m upbeat because of the potential for what I set out to do a year ago: ship Snippets.today and help revolutionize independent microblogging. That’s still the plan. That’s still why this experiment of working for myself is in its very early stages, even a year later.

Starting over

“Am I always starting over
In a brand new story?
Am I always back at one
After all I’ve done?”
— Always Starting Over, from the broadway show If/Then

Daniel said on the latest Core Intuition that it’s important to celebrate major work milestones, like shipping a new app or quitting a job. I didn’t think I’d be celebrating right away, but as it turned out, my wife met me for lunch on Friday and we had a beer to mark the occasion. She snapped this photo:

Some things just work out. I couldn’t have picked a better t-shirt to wear if I had planned it.

When 5pm came around I made a final comment on Confluence, replied to a couple emails, and then signed out of HipChat. But I didn’t have time for much reflection. My son and I were busy packing up to head to a campout with Boy Scouts. Then as soon as we arrived back the next day, I turned around again to take my daughter to see Idina Menzel.

The concert was incredible, somehow including both Wicked’s “Defying Gratify” and Radiohead’s “Creep” — and yes, of course Frozen — to make a show with both the occasional explicit lyric and little kids pulled up from the audience to sing. It was only while driving home from the concert that I had a moment to think what I need to do next. Idina’s lines from If/Then at the beginning of this post kept coming back to me.

I’ve worked a long time on a few things, and they were pretty good, but now it’s time to start over. I turn 40 in a few months. It’s time to figure out what the next 10 years of my life should be about.

Two weeks notice: the first weekend

I have some big news to share, so obviously I’m going to write a bunch of blog posts about it. This is the first one.

For a while now I’ve been juggling working on my own projects, with my indie company Riverfold Software, and having a regular job at the education e-book software company VitalSource, where I’ve been for over 14 years. As much as I felt like this balance mostly worked, lately it has become clear that the “nights and weekends” approach to Riverfold just isn’t going to be enough time going forward. Last week I resigned from my job at VitalSource to focus on growing Riverfold and shipping new apps this year, some of the most ambitious products I’ve ever tackled.

I thought it would be fun to do a series of blog posts about the early part of this transition. For the next couple weeks, as I wind down one set of projects and ramp up new ones, I’m going to post here with the slightly-catchy title prefix “Two weeks notice”. It will be me thinking out loud about the transition, kind of in the informal spirit of Brent’s syncing diary, or like a more serialized version of the classic indie posts from Gus Mueller and Paul Kafasis.

But unlike the authors of those posts, I can’t claim to have found success yet. If you take Scotty’s definition from the iDeveloper podcast, in fact, I’m not “indie” at all; I expect some percentage of my time will have to be reserved for client projects to help pay the bills. While I used to find that idea distasteful — why give up a consistent salary if you’re not even going to call the shots? — I’ve come to realize that client work can be pretty interesting. The cycle of starting new projects and shipping them is a good way to learn new APIs and iterate on how to build an app from scratch.

While reading all these 2005-era indie blog posts, I was surprised to rediscover that Daniel Jalkut also mentioned mixing in consulting work:

“Consulting makes an excellent back-up plan. You’ve always got a job if you need it, and your destiny is very much in your own hands.”

Of course he wanted more than that: to build a great company based around his own apps. I’m sure Daniel and I will be talking about this on Core Intuition later this week.

So it is a little in the vein of “leap and the net will appear” that I’m moving on from a stable job, where I worked with great developers and friends, to something new that is a lot less certain. I thought that would make for a stressful week, but so far, everything seems okay.

There’s paperwork to do and code to write. There’s health insurance to figure out. But there are also some things that have already been wrapped up. My projects at work are in a good place, hopefully not needing constant maintenance. We just refinanced our house, so that’s a monthly savings, and something that I’m told is difficult without a “real” job.

Friday night I started catching up on some late business taxes (whoops). Saturday I finished editing the podcast (which we recorded over a week ago). The rest of the weekend I tried to relax with family (but I worked anyway). It’s Monday now and there’s a busy week ahead. Let’s see how this goes.

Write locally, mirror globally

The Atlantic has an interesting essay on whether Twitter is on a slow decline, less useful and meaningful than it once was:

“Twitter is the platform that led us into the mobile Internet age. It broke our habit of visiting individual news homepages first thing in the morning, and established behaviors built around real-time news consumption and production. It normalized mobile publishing power. It changed our expectations about how we congregate around shared events. Twitter has done for social publishing what AOL did for email. But nobody has AOL accounts anymore.”

It reminds me of something I brought up on Core Intuition a few months back, wondering if Twitter is a core part of the web, something that would be with us forever, or if it is “just another web site”. When we get into the groove of using a new service for a few years, it’s easy to forget that web sites don’t have a very good track record. Giant sites like Facebook and Tumblr seem to have been with us forever, but my personal blog is older than both.

Think about this: if it’s even possible for Twitter to fail — not likely, just possible — then why are we putting so much of our content there first, where there are rules for how tweet text can be used? Storage for all tweets is so massive that there’s no guarantee that other companies will be able to take over the archive if the service has to fold. It’s why I built Tweet Library and Watermark to archive and publish tweets.

Decentralization is the internet’s greatest strength and weakness. There shouldn’t be one service to hold all of blogging; each writer should have his or her own domain and web site. But web sites also die all the time from neglect. We need centralized services to index and syndicate content so that it’s preserved and accessible to more people.

Longevity is the next great challenge for the web. All of my work on Riverfold apps is leading this way, from archiving tweets, to curating and publishing your best photos, to indexing a copy of the text and HTML from your blog. But I’m just one guy with a limited server budget.

It’s time for a new web standard — a metadata format and API that describes how to mirror published content. Maybe it’s part of IndieWebCamp? When I write on my blog, I want the content to flow to GitHub Pages, to the Internet Archive, to Medium. When I post photos, I want the content to flow to Dropbox, to S3, to Flickr. It’s not enough to backup or copy data blindly; the source must point to each mirror, and each mirror service must understand who the creator is and how to find the original data if it still exists.

Unlike a distributed platform that works at the level of raw data, like BitTorrent, this new system should work natively with well-understood common files: text, photos, video, and the glue (usually HTML, Markdown, or JSON) that makes a collection meaningful. Instead of yet another generic sync system, it’s a platform that understands publishing, with adapters to flow content into each mirror’s native storage.

If you accept that this is something worth doing, then every place we put our content must be classified as either an original source or a mirror. And this brings us back to Twitter. Because while I think the next 5 years for Twitter will be strong, I’m not convinced that it will last 50 years. Therefore, Twitter cannot be an original source of data; it must be just one of several mirrors for micro-blogging.

17 services for hosting and business

While doing our taxes this month, I was a little surprised just how much I spend for various web apps and services to help run Riverfold. While I could trim some of them, most are essential and save a lot of time. I thought it would be interesting to write up some of the most important ones.

Linode: I’ve moved nearly everything to Linode. I like their style: just basic, solid hosting, with good features but not an overwhelming number of services or fancy stuff. They’ve recently increased their RAM and added SSD. I have servers there for Nginx/Unicorn, MySQL, Redis, and Elasticsearch. I also use their load balancer and Longview stats app. This link uses my referral code.

Amazon Web Services: I no longer use EC2, but I have some DNS hosted in Amazon’s Route 53. I also use S3 for backups and a new feature that’s coming to Sunlit soon.

Heroku: Before moving to Linode, most of my stuff was on Heroku. Now I only have one small app and database there, and I’ll be completely moved off by the end of the year. I’m including it here for completeness only. It’s a great option to get started if you don’t want to be a part-time system administrator, but I think Marco sums up nicely why you want to use Linux servers instead.

Stripe: Can’t say enough good things about Stripe. Watermark, Searchpath, Tweet Marker, and Core Intuition Jobs all use it for credit card processing. It’s the best.

Gauges: As much as I always loved Mint, as my business grew to several web apps and web sites, I looked for a new stats package that could support any number of sites, and which would work better across hosts, since I don’t need to run the database. I’ve been very happy with this.

AppFigures: I’ve used this for years to track Tweet Library sales. It’s great. I also like that I can enter other people’s popular apps and get an idea of how they’re trending if they make it to the top lists.

Blinksale: Kind of an ancient invoicing app that hasn’t changed at all in years, but it works so I keep using it. Originally started by the folks who would go on to do Gowalla.

Beanstalk: I moved the source for all my Riverfold projects here because it can do Subversion and Git well. I sometimes wonder if I should move to GitHub instead, since I do use GitHub and have a couple tiny public repositories there, but I like that Beanstalk is focused only on private hosting. No social; just a well-designed web app.

Postmark: Run by the same team as Beanstalk. I switched to this after Sendgrid had some PR problems you may remember. Email receipts and whatnot go through Postmark now.

Dreamhost: Still using this for email and a few static or PHP sites. It’s cheap and works well. Not much benefit in moving away from it, though I prefer my more important web apps to be hosted on Linode.

DNSimple: I have a few domains here and hope to have all of them moved over eventually. I want to have a single place for DNS. Right now I have registration and DNS hosting spread across Dreamhost, Amazon, and Network Solutions. Makes it difficult to remember where everything is and to keep track of expirations.

Buffer: This company has been on my radar since someone asked me to support it in Tweet Library. They also have a really interesting blog where they share revenue, salaries, subscribers, web traffic, and other usually private details from a company. I admire that a lot. Daniel and I use it to automate sending Core Intuition Jobs links to Twitter, App.net, and Facebook.

Mapbox: We use Mapbox throughout Sunlit. I wrote more about why here.

FogBugz: In the past I’ve build my own bug tracker, used Jira, Redmine, GitHub issues, and others I’m forgetting. They all have problems so for Riverfold I keep it simple with hosted FogBugz. To complement this I use OmniFocus for non-bug tasks.

Zendesk: For too long I was just using Apple’s Mail.app to handle support email. Now support email goes to Zendesk, where I can better track and reply to it. The downside is I’ve had a couple cases of people not seeing the replies, possibly because the HTML email is more often flagged as spam. Need to investigate whether I can switch it to plaintext, but otherwise I’m happy.

Keen.io: I was inspired to try this after reading Justin’s post on analytics. I’m experimenting with it to get better insight into how people are using my apps. So far so good.

Tapstream: Just started using this to help track Twitter ads and other links, to see what marketing actually converts to App Store sales. The web app is good, they responded to a support question the same day, and I love that the SDK is just a handful of .m files that can be dropped into an iOS project.

And that’s it. I may have left a few things out (like consumer-focused apps Dropbox, App.net, and Twitter), but these certainly cover the major services I use now. In the old days it was common to just have one server that did everything. Now there are so many specialized services. While it seems like a lot to manage, each one does a much better job than I could do with a home-grown solution.

Update 9/16/2016: I still like all of these services, but since originally written I’ve consolidated Beanstalk and FogBugz to GitHub; Postmark to Mailchimp; and stopped using Gauges, Keen, and Tapstream.

New product coming soon

Last year I started working on something new. It was going to be the first product after I refocused Riverfold around a new mission statement: apps to keep and remember what matters. It starts by solving a very basic problem, but the long-term scope is very big.

It’s for anyone with a web site or blog. It’s incredibly simple to set up. It’s a web app with a free trial that works like magic, requiring no registration.

Finally I’ve been able to dust off the project, give it a new name, and get it ready to ship. Launching tomorrow, February 14th.

Preserving the blogosphere

This is kind of a short, technical footnote to my last essay. There I linked to an older blog post from Dave Winer, just one of many of his on this subject. Today he writes how we should archive blogs before we worry about Twitter:

“With Twitter there’s a rich corporation minding it. They can and imho should be funding their own archive. But with the historic blogosphere, dating back to the early-mid 90s, a lot of it is already gone. The need to preserve it, by independent historians and librarians, is greater than the need for Twitter to be publicly archived.”

I have a lot to say on this, and I can’t wait to share a new web project that I started recently which could play a small roll in blog backups. When I killed off my little app Wii Transfer, I did so to refocus Riverfold around preservation. I wrote:

“It also doesn’t fit into a new theme I have for Riverfold: apps that are all about keeping and remembering what matters. For Clipstart, that’s family videos. For Tweet Library and Tweet Marker Plus, that’s old tweets.”

Dave mentions libraries several times in his blog post. It’s no accident that the word “library” is in Tweet Library’s name; my ambition for this app far outpaces my coding speed. But blogs are a different problem, and they need something special — perhaps multiple solutions.

Clipstart 1.4.2 (on MAS)

Just approved in the Mac App Store, Clipstart 1.4.2 fixes upload issues with YouTube and especially Vimeo, which was broken in previous releases because of Vimeo API changes. I expect this to be the final Mac App Store release for Clipstart. As I blogged about before, all Mac App Store customers can upgrade to the direct download version for free.

Here’s what you should do if you bought Clipstart from the Mac App Store:

  • Update to Clipstart 1.4.2 using the App Store app.

  • Run Clipstart at least once, then quit it. This allows it to copy the Mac App Store receipt so that it’s accessible to other versions of the app.

  • Download the latest version from the main Clipstart web site and replace the existing copy in your Applications folder with the direct download.

And if you’re thinking about buying Clipstart for the first time, please get it directly from the web site and checkout via PayPal. There’s also a demo with support for 2 uploads and tagging 20 videos.

I’m now turning my attention to version 1.5, which will improve a few things and add support for Gatekeeper on Mountain Lion.

Congratulations, you’re a manager

The sort of odd “best of both worlds” balance in my different projects at “VitalSource”:http://www.vitalsource.com/ and as a solo shop is that I love working with a team, and I also love working alone. I mean really alone, doing the planning and design and coding and marketing. I’ve resisted farming out any piece of my apps at “Riverfold”:http://www.riverfold.com/ (except the application icon) so that I can have complete control. It’s brutally hard sometimes, but it’s mine.

If you’re working by yourself and add another person to the project, a funny thing happens: you become a manager. Before, you could spend 100% of your time on the work. Now you can allocate 50-75%, because you’re getting the new programmer up to speed, answering questions, and setting priorities. If you’re lucky (and I usually am), the person you added is contributing so much that it easily makes up for your loss in productivity, and then some.

The trade-off is worth it. Exchange the previous low communication overhead for extra coding man-hours.

You can build something great with a team, something that would be impossible alone, if you surround yourself with people who are better at your job than you are. I love that first moment when a team doubles in size from 1 to 2, or 2 to 4.

But after the initial frenzy of coding and emails and new features, I usually get burned out again. The project doesn’t strictly need me anymore, and I’m ready to get back to starting an app from scratch, when the scope is so small that the whole thing still fits in my head.

Was Macworld worth it?

As I “wrote in January”:http://www.manton.org/2010/01/macworld_expo_2010.html, I decided to go to Macworld to show off Clipstart and Wii Transfer, and to experience the conference again and hang out with friends. I ended up doing less of the latter, because I lost my voice and was feeling terrible for a couple days, but nevertheless the trip was great and I’m very glad I went. Worth it.

Here’s my summary of the show, what it took for me to be there and what I got out of it for “Riverfold”:http://www.riverfold.com/. This is supposed to be in the spirit of “Rogue Amoeba’s excellent series on Macworld”:http://www.rogueamoeba.com/utm/2007/01/16/should-i-exhibit-at-macworld-part-1-costs/, but more from a super-tiny company perspective, and just where my experience differs.

I do want to quickly mention costs, since that’s the primary consideration when planning these things. I took advantage of the Indie Developer Spotlight shared kiosk to keep investment low. In fact, I wouldn’t have gone otherwise. I kept the whole trip to about $2700, with a rough breakdown like:

$1250 – space on the show floor

$900 – hotel for 4 nights

$250 – flights to and from San Francisco

$100 – printed “2000 flyers”:http://www.flickr.com/photos/manton/4326331440/

$200 – other misc costs, cabs, and food

I could have saved some money in there on the hotel, but in general I think I did pretty well. For a lot indies it’s probably not that much different than a WWDC trip.

flyers_ollie.png I worked 8 hours each day on my feet at Moscone North, in my little booth space in the very corner of the expo. I was lucky for two things: Guy English was awesome and covered for me a couple times so I could take a real break; and the restrooms and water fountain were so close I could slip away when traffic was slow and be back without missing much.

The less expensive booth option was supposed to be for a table shared between 3 developers, with presumably a dozen or more small companies filling the area. But unlike the iPhone pavilion in the center of the tradeshow, which was packed with exhibitors, hardly any Mac developers took advantage of this offer. It was just me and one other company.

This was disappointing at first, since a less dense area doesn’t convey the same excitement and means less foot traffic. But there were other aspects of the deal that turned out better than expected, such as included wired internet even though none was originally promised. Compared to a traditional booth, it was a bargain.

Before leaving Austin for San Francisco I jotted down a few notes on how I could measure success, since I didn’t want to pin whether it was worth it just to direct sales.

See friends and meet new people. Check, but there were a lot of people that I ran into very briefly and didn’t get to really talk to. See aforementioned lost voice.

Get ideas from customers. Check, got plenty of great ideas. I loved talking to random Mac people, not limited to just the ones who bother to send email.

Figure out how to sell the product. There’s nothing like explaining your application over and over again all day to refine your pitch. I feel like I have a much better handle on this, but there’s still work to do, and web sites to update.

Actually sell some copies. I used a coupon code to track sales. During the conference my sales were flat, but in the weeks since I’ve had the best sales days of Clipstart ever.

Get exposure in the press. Check, was interviewed by Ryan Ritchey for “The Digital Lifestyle”:http://thedigitallifestyle.tv/home/2010/2/12/wii-transfer-at-macworld-2010.html, Merlin Mann for “MacBreak Video”:http://www.pixelcorps.tv/macbreak301, and talked with other members of the press on the show floor. I should have done more but lacked the energy.

Win best of show award. Nope, but wasn’t expecting it. I think it’s a shame that only one Mac application won, but on the flip side it’s great that it was “Inklet”:http://tenonedesign.com/inklet.php. Really cool app.

Everyone’s expectations coming into the event were low — the previous exhibitors who backed out, the attendees who wrote Macworld off, and the press who questioned the show’s relevance. But clearly Macworld 2010 was a success. The second day of the expo I was late to the show floor, arriving just a few minutes before they opened the hall. There was a huge mass of people waiting to get in.

There will be a Macworld 2011. I’m really excited to see how it works to move the whole expo and conference to Moscone West. I’m not sure if I’ll be there yet, since as demonstrated this year I can’t plan nearly that far in advance. Throwing all of this together 2 weeks before the show only worked because of everyone who made things a little easier during the week.

Thanks to Jason Snell, Merlin Mann, Adam Lisagor, and everyone else who stopped by and waited patiently through my demos; also Guy English, Paul Kafasis, David Barnard, John Fox, John Chaffee, the RogueSheep guys, my booth buddies from “Hello Chair”:http://hellochair.com/appsaurus/, and the other indie developers I’m forgetting; and especially Albert McMurry, Dan Moren, and John Gruber for telling people about Clipstart. It succeeds only because of word of mouth.

In closing… Maybe it’s because James Cameron is still in the news, but I’ve always loved this line from the character Rose in Titanic: “It doesn’t make any sense. That’s why I trust it.”

That’s mostly how I felt about exhibiting at Macworld. Even though it was “cheap” by tradeshow standards, for me it was real money and a risk. I booked my flight the day I realized that the only reason not to go was because I could fail.

Macworld Expo 2010

I haven’t been to a Macworld since the late 90s. I’ve had it in my head for a couple years that I’d like to go back, but with so many developer-focused conferences it’s been hard to justify an extra trip for Macworld. At the same time, my “indie apps”:http://www.riverfold.com/ need a nice marketing refresh. So why not exhibit at Macworld and get to see the show again while reaching a new audience of potential customers?

I knew I’d regret it this year if I didn’t take advantage of the “small indie pavilion kiosk”:http://macworldexpo.com/indiespotlight. So with frighteningly little planning so far, I’ve booked the expo, flights, and hotel. I’ll be at the show and I’ll be demoing the just-released Wii Transfer 2.7 and the unannounced Clipstart 1.3. The rest of the details… not so clear.

But I’m pretty excited about the conference and hope to see many of you there. The expo runs February 11th – 13th, and you can “get a free expo pass here”:http://rcsreg.com/macworld/AMU29713.

Indie Relief

It was “just last week”:http://www.coreint.org/2010/01/episode-25-maybe-its-a-deprecated-thing/ that we mentioned “Today 2.0”:http://www.secondgearsoftware.com/today/ from Second Gear on the Core Intuition podcast, and now Justin Williams at Second Gear is making news again by organizing Mac developers to donate to charity in the wake of the Haiti earthquake.

I’m happy to announce that Riverfold is participating. Since my wife and I already gave to the Red Cross, I decided to donate my sales to “Save the Children”:http://www.savethechildren.net/, an international organization working in Haiti now. It’s amazing how many Mac and iPhone developers have come together for Indie Relief, and great that we are able to do something that reaches more charities and has a bigger impact than if we were all just making individual contributions.

So if you’ve been on the fence about whether you need Wii Transfer or Clipstart, “buy a copy today”:http://www.riverfold.com/. Thanks!

New blog design

I’ve been blogging here since 2002, and I started Riverfold in 2006, but it’s taken me a while to realize something pretty obvious: traffic flows back and forth between my personal blog and the company site, and I should stop fighting it. Today I’m embracing that in a small way by adapting the “riverfold.com”:http://www.riverfold.com/ design to this blog, and linking more prominently to my indie products.

I’ll still post about things that have nothing to do with software. I don’t want to give that up, and some of my favorite posts wouldn’t exist if I stuck to programming or business topics. Some non-software favorites I found while surfing “the archives”:http://www.manton.org/archives.html include “Ollie Johnston died”:http://www.manton.org/2008/04/ollie_johnston.html, “Perfection”:http://www.manton.org/2005/08/perfection.html, “The Great Scott”:http://www.manton.org/2005/02/the_great_scott.html, “Bush veto”:http://www.manton.org/2007/11/bush_veto.html, and “50,136 words”:http://www.manton.org/2005/12/50136_words.html. But hopefully by unifying things a little it’ll be more consistent, and encourage visitors coming to my blog for the first time to also buy some Mac software.

Thanks for your support over the years. Even when the referrers dry up and the click-throughs aren’t worth graphing, I’ll still write here, and maybe every once in a while it’ll be something good.

Ugly reminders

In my “last post about family pricing”:http://www.manton.org/2008/10/family_packs.html, I mentioned that I modified my PayPal scripts for backend order processing to support family packs, but I left out that the whole system is a hack. A hack that processes a nice chunk of money, but a hack nonetheless. Hard-coded PayPal buttons and coupons, PHP that would make even newbie web developers cringe, too few lines of code to really be taken seriously.

I refactored it a few months ago, but kept some ugliness in there to remind myself that I should move to a “mature store solution”:http://www.potionfactory.com/potionstore. Sometimes we build systems that are flawed from the start, and it’s wasted effort to invest time into something that will be replaced. Instead, let the thing stand out like a sore thumb.

It’s a complement to doing things simply and taking shortcuts even when it’s tempting to overengineer and build the perfect system.

This ugliness trick works for other things too. For example, the Wii Transfer product page is /software/wiitransfer/ instead of just /wiitransfer. I gave this URL more thought and second-guessing than it deserved, and every time I type /software/ or see the link I cringe a little. But I did it for a purpose: one day I hope to sell or promote things other than software. For example, when I registered riverfold.com I was working on an independent animated film which I planned to sell on DVD direct to customers. (I’ve had that shelved for years now, though, as I’ve recently discovered there are only 24 hours in a day.)

Others will say that you shouldn’t mix such different projects under the same brand, and that makes a lot of sense. But I also know it to be true that if you want to build a strong blog following, you should stick to one subject and become a respected voice in that field, and I didn’t do that either. I made a conscious decision with my personal blog to keep it loose and cover several different things that I am passionate about, and because of that I’ll likely never have tens of thousands of readers as other popular Mac development blogs have.

So maybe one day Riverfold will sell something other than Mac software. When that time comes, it won’t matter what the URLs are, but until then, the /software/ URL won’t let me ever forget that I have other things in mind.

Software product myth

“Rob Walling has a good post”:http://www.softwarebyrob.com/2009/01/07/expenses-you-dont-think-of-when-starting-a-business/ about all the expenses it’s easy to overlook when starting a software business. The most insightful line is this:

“The point of The Software Product Myth is that at some point you are going to have too few sales to support yourself monetarily, yet too much work to fit comfortably into your evenings and weekends.”

This rings true for me. Wii Transfer is too successful to abandon, but not successful enough that I can retire to a beach house. Luckily I love the “people I work with”:http://www.vitalsource.com/, but I’ll admit that running Riverfold on the side is making me a little bit nuts.

I guess the “good news” is that I’m pretty used to too much work and too little sleep.

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”:http://www.haveamint.com/ 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”:http://www.viddler.com/explore/rentzsch/videos/4/ 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”:http://www.potionfactory.com/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.

Wii Transfer 2.6 and August

As I mention on the next “Core Intuition”:http://www.coreint.org/, which I’m currently finishing editing and should be out tomorrow, “Wii Transfer 2.6”:http://www.riverfold.com/software/wiitransfer/ 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.

Rails on shared hosts

“David Heinemeier Hansson writes in detail”:http://www.loudthinking.com/posts/21-the-deal-with-shared-hosts on the problems with Rails in shared hosts:

“Most Rails contributors are not big users of shared hosting and they tend to work on problems or enhancements that’ll benefit their own usage of the framework. You don’t have to have a degree in formal logic to deduce that work to improve life on shared hosting is not exactly a top priority for these people, myself included.”

Although I’ve been building Rails apps for a couple years, and will continue to do so, I made the choice with “Riverfold”:http://www.riverfold.com/ to go PHP-only so that I could deploy on inexpensive shared hosts and easily move my sites. Fact is, you need to dedicate a significant portion of your time to being a system administrator if you run a Rails site.

I find the general “we don’t owe you anything” attitude in the Rails community off-putting. What it means is quite simple: Rails is not a product, despite what it might look like when you “visit the web site”:http://www.rubyonrails.com/. This is fine and consistent with the opinionated nature of Rails (which from a design perspective is what makes Rails excellent), but it also means that features like backwards compatibility are not just ignored but actively discouraged. The message this sends is that the core team values their own personal productivity over the productivity of the general Rails userbase.

Also, make no mistake, the performance questions surrounding Rails are directly related to the web shared host issue. Rails can’t be hosted in the same way that PHP is hosted because it takes so long for a Rails application to be initialized, requiring dedicated long-running app instances and an ever-changing array of “best practice” solutions starting with mod_ruby to FCGI to Mongrel to “Thin”:http://code.macournoyer.com/thin/.

My friends and “co-workers”:http://www.vitalsource.com/ are no doubt sick of me bashing Rails (see “this post on the priorities of the community”:http://www.manton.org/2007/09/rails_and_mac_dev.html), but I still admire Rails and do want to see these problems solved. I would love to use “PotionStore”:http://www.potionfactory.com/potionstore to power the Riverfold site, or to base my registration database and sales tracking in Rails.


After I “blogged last month”:http://www.manton.org/2007/01/i_hate_domains.html about the very small number of domain names I own, I got some good feedback from people I respect. They basically said: “You’re an idiot. Domain names are cheap.”

And the more I thought about it, the more they were right. So last week I made an offer to buy the wiitransfer.com domain from its current owner, and after just about 48 hours I had the domain and was updating Wii Transfer to use it. Now all registered users can use the simpler bookmark URL wiitransfer.com/username to point to their shared music.

I’m also finally rolling out a bug fix update tonight (version 2.2.1, “available here”:http://www.riverfold.com/software/wiitransfer/). The most important change is that some MP3s that would not play will now work. Some customers never saw this, but for some people a large percentage of their music library was unusable. It turned out to be that certain kinds of embedded cover album artwork in the MP3 would break the Flash player on the Wii. The work-around I used is to load the MP3 into memory and clear all its ID3 tags before sending it over the wire.

It feels good to be working on Wii Transfer again. The next version is already underway and should make a lot of people happy.