my recent reads..

Atomic Accidents: A History of Nuclear Meltdowns and Disasters; From the Ozark Mountains to Fukushima
Power Sources and Supplies: World Class Designs
Red Storm Rising
Locked On
Analog Circuits Cookbook
The Teeth Of The Tiger
Sharpe's Gold
Without Remorse
Practical Oscillator Handbook
Red Rabbit

Tuesday, December 14, 2010

CruiseControlling Ruby 1.9.2 and Rails 3.0.2

CruiseControl for Ruby from ThoughWorks has long been one of the easiest ways to your rails project under continuous integration.

But there's still an issue that it can't run under Ruby 1.9.x. That's not very good if you are targeting 1.9.2 for your project.

Here's a quick recipe for how you can build a 1.9.2 project with CC, using the wonders of rvm..
# download and unpack CC to /usr/local/cruisecontrol-1.4.0 (or where you like)
# for convenience, add .rvmrc in /usr/local/cruisecontrol-1.4.0 to have it run 1.8.7
echo "rvm 1.8.7-p302" > /usr/local/cruisecontrol-1.4.0/.rvmrc
# configure CC:
cd /usr/local/cruisecontrol-1.4.0
./cruise add my_project_name --source-control git --repository
# ^^ This will initialize the ~/.cruise/projects/my_project_name folder for a git-based project

# if you have an .rvmrc file in your git repo, pre-emptively trust it to avoid clogging CC:
mkdir ~/.cruise/projects/my_project_name
rvm rvmrc trust ~/.cruise/projects/my_project_name

In ~/.cruise/projects/my_project_name, edit cruise_config.rb to run a shell script instead of the standard build task (I'm calling it and it will be in the root of my git repo):
Project.configure do |project|
# [.. other stuff ..]
project.build_command = './'
# [.. other stuff ..]

Add to your repository (don't forget to chmod u+x it). It needs to ensure rvm script is loaded and activate the correct ruby & gemset.

The script initialization is necessary because it seems the way CC spawns the shell script it doesn't pick up the rvm initialization you might already have in .bash_profile. Without rvm script initialization, "rvm" will invoke the binary which can't make the direct environment mods it needs to do.

Here's what I have in

if [ "$(type rvm | head -1)" != "rvm is a function" ]
source ~/.rvm/scripts/rvm || exit 1

if [ "$(type rvm | head -1)" != "rvm is a function" ]
echo "rvm not properly installed and available"
exit 1

rvm use 1.9.2-p0@mygemsetname --create
bundle check || bundle install || exit 1
rake # setup to run all required tests by default

Once that's checked in and pushed to the repo, you can kick-off CC:

cd /usr/local/cruisecontrol-1.4.0
./cruise start

Now my ccmenu is green, and CruiseControl is running my project under 1.9.2 and rails 3.0.2;-)

Blogarhythm: Waiting for the light ART-SCHOOL

Saturday, November 06, 2010

Rock till you

Bombshell announcement on 29-Oct: have .. struck a deal with Facebook.
What this means is that Facebook has bought most of’s technology and assets, and Sam Lessin is moving to Facebook. was widely acclaimed as the simple file sharing mechanisms we all needed. It resolutely solved the problem that everyone with a computer and a network connection has known at one time or another: how to share files too cumbersome for email, without resorting to techno-geekery like ftp and such. And it worked. Beautifully.

But it doesn't work anymore.

Goodbye! You were an amazing service. One of the best and brightest of the Class of Web 2.0. You made things simple. You solved a real, pressing problem.

Unfortunately, that's not what I'll remember you for now.

Instead, it will be for brewing a thunderstorm of concern over the very dependability of cloud services, as John C. Dvorak went to town on in his column.

And for teaching us that it's true - startup founders really don't give a toss for their customers if they can get a sweet deal and a plum job with one of the heavyweights instead.

And for once again propelling Facebook into the privacy-conspiracy-theory limelight. Sure, "no data will be transferred to Facebook", but they put you out of business and bought "most of [your] technology and assets", right? So will we be surprised when Facebook takes aim to lure it's unsuspecting users into sharing pretty much anything and everything - private, commercially confidential, and otherwise - using Facebook?

Well, I guess does really deserve our thanks for that last point, if anyone cares to notice.

The very best news—for anyone who can't imagine life without—is that there is another exceptional product out there called Dropbox that can handle most team sharing needs in addition to looking after your personal documents.

That's not a paid advertisement or anything. I simply use Dropbox everyday and just love it. I wouldn't be exaggerating to say it's probably improved the way I work more than anything even the folks in Redmond or Cupertino have shipped in recent memory.

Blogarhythm: Rock Rock (till you drop) .. Def Leppard

Saturday, October 30, 2010

The Ultimate Steampunk Project needs $10

I heard John Graham-Cumming on TWiT #269 talk about the project he has started to build - 173 years later - a full scale realization of Charles Babbage's Analytical Engine. Amazingly, it's never been done (only partial models exist).

Now, we are talking about a truck-sized, steam-powered machine that is Turing-complete and features (without silicon or electricity) "modern" ideas like instruction pipelining. The ultimate steampunk project. It also has a serious educational and academic aspect (including to digitize all of Babbage's plans and notes).

Due to significant private support coming forth, the pledge target has apparently been reduced from 50,000 to just 10,000 signatories. At the time of writing, John only needed another 6358 pledges of $10/£10/€10 each to get the project moving.

Now I don't often get behind fundraisers and campaigns, but this strikes me as one of those once-in-a-lifetime follies you cannot help but support. And all for about the price of the cheapest bottle of wine in the shop around the corner.

Sign my pledge at PledgeBank

Blogarhythm: L.O.V.E. Machine WASP

Sunday, October 03, 2010

Add to Calendar with a jQuery Widget

If you deal with any kind of event-based information on your websites, you would probably really like an easy way of letting users add it to their calendar.

Unlike link sharing—where there are some great drop-in solutions like AddToAny and AddThis—calendar integration unfortunately remains a bit rough around the edges. Varying standards with varying degrees of adoption; consideration for desktop and web-based calendar clients; and the complicating factor of timezones make it all a bit harder than it really should be.

AddToCal is a jQuery UI Widget that I put together to help me solve the problem and do things like you see in the screen clip on the right. It's freely shared and available on github.

Using it on a web page is as simple as including the js links, binding it to the DOM elements or classes on your page that contain "events", and provide an implementation of the getEventDetails method that knows how to extract the event details from your particular DOM structure.

The example also demonstrates how to use AddToCal in conjunction with the hCalendar microformat for event notation (try it out here).

I've currently included support for the web-based calendars by Google, Yahoo!, and Microsoft Live. If you can serve iCal or vCalendar format event links then AddToCal also links to 30boxes and iCal/vCalendar desktop software—including the iPad Calendar application;-)

Serving iCal and vCalendar links

What about iCal and vCalendar formats? These are complicated a little because we need a URL to the respective iCal and vCalendar format resources .. so we need to be able to serve them before AddToCal can link to them.

Thankfully, this can be relatively trivial once you get a handle on the file formats. Here's an example of how to implement with Ruby on Rails.

Say we have an Events controller and associated Event model that represents an activity people may like to add to their calendars. A simple iCal implementation with ERB means creating a views/events/show.ics.erb along these lines:

PRODID:-//AddToCal Example//EN
DTSTART:<%= @event.start_time.rfc3339 %>
DTEND:<%= @event.end_time.rfc3339 %>
LOCATION:<%= event_url( @event ) %>
DTSTAMP:<%= %>
DESCRIPTION:<%= event_url( @event ) %>\n<%= @event.full_title %>
SUMMARY:<%= @event.synopsis %>

Sharp eyes will note the unusual rfc3339 helper method I've provided to make it easy to get date/times in RFC3339 format as required by the iCal and vCal standards. You could extend Time::DATE_FORMATS, but here I've simply added the method to ActiveSupport::TimeWithZone

class ActiveSupport::TimeWithZone
def rfc3339

To support vCalendar, we also implement views/events/show.vcs.erb

PRODID:-//AddToCal Example//EN
SUMMARY:<%= @event.full_title %>
DTSTART:<%= @event.start_time.rfc3339 %>
DTEND:<%= @event.end_time.rfc3339 %>
URL:<%= event_url( @event ) %>
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:<%= event_url( @event ) %> =0A<%= @event.synopsis %>

Depending on your Rails version and web server, you may have to teach it about these MIME types e.g. add to config/initializers/mime_types.rb:

Mime::Type.register "application/hbs-vcs, text/calendar, text/x-vcalendar", :vcs

Blogarhythm: Remember - Jimi Hendrix

12 Things Every Programmer Should Know

Samnang Chhun posted his neat little presentation from BarCamp Phnom Penh 2010. It's a good summary of the leading memes of the moment..

Blogarhythm: everybody wants the same thing - scissor sisters

RFC 3339 / ISO 8601 dates in javascript

Many server-side languages (e.g. Ruby and Python JSON encoders) and encoding formats like ATOM send dates in RFC 3339 / ISO 8601 format. The standard Javascript Date object cannot parse these values, which can make client-side scripting involving dates a pain.

There have been snippets of code floating around the net for ages, and various libraries that include necessary support. rfc3339date.js is my attempt at rolling the best into an standalone, unobtrusive, and open-sourced Date extension that plays well with other libraries that also extend the Date class.

It lets you do things like:
var d = Date.parse( "2010-07-20T15:00:00.333Z" );

=> "2010-07-20T15:00:00.333Z"

=> "20100720T150000.333Z"

=> "20100720T230000.333+0800" // assuming current timezone is GMT+8

The readme in the project repository on github has more information about the range of date formats supported and other methods available.

Blogarhythm: Too Many Times - Mental as Anything

Sunday, July 25, 2010

DHH, Lars, and the Quality of Water

Just for the record:
I wonder what they added to the drinking water in Denmark back in the 70's?

Blogarhythm: Smoke on the Water - Metallica covering Deep Purple.

Saturday, July 24, 2010

DBS, Intuit: Doing the Hard Yards for Transparency in a SaaS Era

I arrived back from Tokyo to the news of a major DBS snafu, involving the loss of the entire ATM network, Internet and mobile banking services for 7 hours on the 5th July.

That's bad.

However, the unqualified apology by DBS' CEO, Mr Piyush Gupta, was truly a breath of fresh air. Not only was it devoid of the typical corporate hedging, but I believe it was the most frank and technically detailed account of a failure that I have ever read in the press.

Mr Gupta's response has actually increased my confidence and loyalty in the bank. Which is a rather unusual outcome for a screw-up.

NB: .. to the extent that I actually thought it rather mean-spirited and self-serving for the Monetary Authority of Singapore (MAS) to step forward and emphasize the fact that it was actually the MAS who ".. instructed DBS to give a full account of the incident to the public, including the actions it will take to prevent future recurrence".

I can't help but compare and contrast this to Intuit's woes of late. On 15th June, Intuit experienced catastrophic failures of their, Quicken, QuickBooks, and TurboTax services. Services were only restored more than a day later, and it wasn't until 7pm on the 16th of June that customers had any kind of detailed explanation.

In both cases, the organisations concerned were caught out in the short-term. Customers were affected and actively seeking answers within minutes. But the corporate responses can be measured in hours and days.

It is also worrisome that in both cases, the reported investigations point to failures in standard maintenance procedures: ".. during a routine maintenance procedure.." (Intuit) and ".. IT vendor IBM [..] had used an 'outdated procedure' to carry out the repair.." (DBS).

SaaS providers should take note! Better to learn the lessons from others rather than make our own mistakes. Two take-aways:
What is your realistic response time to a service issue? Can you identify a problem and open a communication channel with customers within minutes or the hour? And does this only really work during normal business hours, or is it 24x7? Prompt and open communication can avert a tsunami of customer complaints in a serious situation. Do you have that insurance in place?

Do you really have production change management under control? My natural assumption is that neither DBS nor Intuit have (a) the staging systems available, or (b) the procedures in place, to exactly and incontrovertibly test production changes. The nett of my years in enterprise computing: "never, ever, make a change in production that you haven't first tested and practised elsewhere". What is your situation, honestly?

Of course, reality bites. Notwithstanding any and all preventative measures you put in place, there's a good chance that one day you will find yourself in a situation as dire as DBS or Intuit (let's not even mention BP, which is a whole different ballpark).

transparency is not a gambleIt may not be easy, but the DBS case in particular demonstrates that no matter how bad things are in the short-term, full and frank disclosure - and the balls to take unequivocal responsibility - are essential to getting you back on track. Transparency is not a gamble.

Blogarhythm: I think I must have written this post purely for the excuse of linking to Tell me, Tell me by S#arp, who are responsible for saving my sanity during a singular .com project back in the day.

Tuesday, July 20, 2010

iPad Singapore - nice price, no telcos

I was so-o tempted to buy one in Japan last week, so I'm happy that TODAY reports the Apple iPad will go on sale here in Singapore on Friday (23rd Jul 2010, with iPhone 4 expected on the 30th).

The biggest surprise for me was that it's only selling through Apple and authorised resellers. None of the local telcos will be offering it directly at this point.

Now, I definitely prefer not to have an operator or service provider involved in any of my device purchases, but I'd still be intrigued to know the inside story (Apple asking too much? Apple not interested in a deal for such a small market? Telcos don't see any real benefit without exclusivity? TODAY - go investigate and report on that, not just the pricing press release maybe?)

Secondly, and not so surprising: the pricing is real nice. Probably one of the lowest worldwide, and not encumbered by contracts.
The WiFi-only models will retail for $728, $878 and $1,028 for the 16GB, 32GB and 64GB models, respectively. iPads with WiFi and 3G connectivity will retail for $928, $1,078 and $1,228 for the 16GB, 32GB and 64GB models, respectively.
I was in Japan last week and checked out the iPad (of course). I now know it's true: once you touch it you must have it. It is just so responsive and smooth to use, and the size and weight are just right for casual browsing and apps.

Remember the reports of 1km queues for the iPad in Japan back in May?. Well, now of course you just walk in and there are more demo units and helpful sales people than customers.

btw, I don't know where all the Japanese iPads went .. traveling all over Tokyo for a week and I only saw one being used in the wild (and the owner appeared to be American), with everyone else still glued to their flip phones. I wonder if it's just not private enough to be used on crowded public transport?

I didn't have the SG prices at the time, but as a general rule Singapore tends to be cheaper for tech. I [just barely] managed to resist temptation, and it turned out the right bet - at least from a financial standpoint.

Now I can go queue for an iPad in Singapore;-)
<brain style="state:on;fanboy:off;">..or maybe just wait a few more days</brain>

Blogarhythm for this post: Bachelor Pad - Fantastic Plastic Machine

Tuesday, June 29, 2010

kalinka: Google Calendar Link-maker and Any+Time jQuery demo

Any+Time was one of the more interesting options I covered in my Quick Review of jQuery Date/Time Widgets the other day.

Any+Time had a lot more functionality than I got to investigate at the time, and there were some specific features I wanted to checkout in more detail - in particular timezone handling - so I built another little demo called kalinka.

kalinka is a simple tool to construct Google Calendar Event URLs without needing to publish an event in your own calendar. You can then put the link in an email or a website. Other people can then use the link to create the event in their own Google Calendar.

kalinka mimics the basic functionality of the Google Calendar Event Publisher, except that it also demonstrates using Any+Time to offer specific control of the timezone.

Try out kalinka here, and feel free to pillage the scripts.

Blogarhythm for this post: kalinka malinka - The Red Army Choir (a.k.a. Alexandrov Ensemble or Дважды краснознаменный академический ансамбль песни и пляски Российской армии имени А. В. Александрова)

Tuesday, June 22, 2010

The third-party authentication dilemma: does Facebook pwn my site?

I've argued for some time that it is crazy for most websites to have their own authentication (username/password) system these days.
  • We the users have no patience for yet another registration process, validation email flow, and password to remember

  • Security is too easy to get wrong, unless you truly have security professionals on staff

  • Designing sites with a registration process, issuing credentials etc is a legacy holdover from the days when we had no choice. OpenID, OAuth (in particular) have long since changed the game.

And the shift is well underway. More sites these days are offering the ability to authenticate using twitter, facebook, google or other credentials. Janrain chief executive Brian Kissel has said that
..publishers are jumping on-board as they realize it’s valuable to know who their readers are and that it’s much easier to convince them to sign in with an existing account than to create a new one

Perhaps like many sites, you integrated with Facebook Connect to let users sign into your site with their Facebook account. Which all sounds great, until you wake up one day, and are caught you off guard by two bits of news:

Jason Calacanis was one of the high-profile Facebook quitters who got "caught" sneaking back in. He explained the reason on a This Week in Startups .. to (temporarily) regain control over all the third-party applications he'd forgotten were using his Facebook account for authentication.

Suddenly, you are feeling the downside of depending on a third-party authentication service:
  • The amount of engineering required to "keep up" with the evolving identity management space is unpredicatable since someone else is calling the shots

  • Your site and brand is totally exposed to a user backlash over something that you have have no control over and has nothing to do with you

So is there better way?

If your site is directly linked to the third-party service (e.g. a tool for twitter, or a Facebook application) then the answer is no, and the question doesn't even make sense.

But for most cases, we are basically outsourcing the identity management and authentication, and want to avoid getting caught down a blind alley.

Pure OpenID is one approach: it is not controlled by any single vendor, and there are capabilities such as delegation which allow users to pick and choose their provider. The unfortunate fact is that OpenID is far from mainstream, and will likely remain a mystery for most users (even if it is hard at work under the covers of their Google or Yahoo! sign in).

Personally, I think the best approach is to disentangle ourselves from directly dealing with identity providers. By outsourcing the identity management and authentication process to an intermediary that aggregates the services of many identity providers we get a nice compromise:

  • Someone else to take on the burden of securing the system and keeping up to date with the improvements made by the various identity providers

  • We get to offer the convenience to our users of signing in with a wide range of identity providers

  • And I am making my site directly dependent on only one service provider, and one that specializes in identity not other business interests which may potentially bring us into conflict

The best solution I have found so far is Janrain Engage (formerly RPX). I've used this on a number of sites (e.g. CloudJetty - my directory of cloud/SaaS applications), and released a gem (authlogic_rpx) for easily using the service with Ruby on Rails.

If you are concerned about your website getting locked in to a particular authentication provider (whether it is Facebook, twitter or anything else) then I would certainly recommend you check out Janrain Engage.

Now I realise this may come across as an unabashed plug for Janrain, but the truth of the matter is that (a) it works, and (b) I haven't really been able to find any fully baked alternatives. If you do know of other similar services or ways of approaching this problem I'd be really interested to hear about them.

Blogarhythm for this post: IDentity - 玉置成実 Tamaki Nami
The light will shine on me allowing me to make progress and start on the road to my identity

Monday, June 21, 2010

The CSS Zen Banger

Ever need to try some simple CSS tweaks on an existing website? I needed to do something like that again recently, and a little hack I used to do the job just turned into the CSSZenBanger.

CSSZenBanger is a simple tool for previewing style modifications on an existing web site—mainly intended for web designers who want a quick way to review stylesheet changes without the trouble of setting up a project environment.

This is certainly not a new idea, but I googled in vain for something similar. And while it's pretty easy to make on-the-fly changes with tools like Firebug, sharing the results with others is tricky.

So here it is... if you ever need to test some css fiddles, maybe it can help you too.

Blogarhythm for this post: Cobrastyle - Robyn

Thursday, June 17, 2010

jQuery Essentials

On a jQuery binge today and saw a tweet fly by with this excellent overview by Marc Grabanski (via @elijahmanor)

Motivated me to finally toss out my old jQuery wallpaper. There's a great selection over at devcheatsheet (I'm going with Future Colors for now).

Update (via @mahemoff): Rebecca Murphey has just released the "jQuery Fundamentals" Open-Source jQuery Training Curriculum under Creative Commons. Some kind of awesome!

Blogarhythm for this post: Run with the $ - Lita Ford

LOLs: ..and some dumb script at amazon translated $ to dollar, when she actually sings "money";-)

Quick Review of jQuery Date/Time Widgets

Once again I find myself browsing around for a better javascript calendar tool. I'm particularly looking for jQuery support, the ability to handle both date and time entry, and — being post-iPhone/Android/iPad 2010 — I'm concerned about making sure it is finger friendly (i.e. it works on a touch screen).

The table below summarises my findings at this point (see here for my full survey results). The ranking is just my personal view, and this list is certainly not all inclusive (if you know of other/better options I'd be really interested to hear from you). Each tool links to a test page where I've tried to cut everything back to the bare essentials needed to run a demo. Feel free to pinch the source if it helps.

Conclusions? There are some reasonably effective tools here for quickly dropping in date and time editing support, but at the end of the day I'm not sure that Google haven't already got it right with the simple combo-box time selectors in Google Calendar (is there a widget that includes something similar? Haven't found it yet).

The Field

* indicates the latest versions that I have been able to successfully test

jQuery Datepicker [Rank: B]
  • jQuery*: 1.4.2

  • jQuery UI*: 1.8.2,1.7.3

  • Dates: Yes Times: No

  • Finger Friendly:Yes

  • Comments:The standard widget

Any+Time [Rank: A]
  • jQuery*: 1.4.2

  • jQuery UI*: n/a

  • Dates: Yes Times: Yes

  • Finger Friendly:Yes

  • Comments: Extensively customisable and scriptable. Supports jQuery UI themes. Also works with prototype instead of jQuery. Cannot edit the bound field while the widget is active [Update 18-Jun-2010: fixed incorrect statement that jQuery themes not supported]

Martin Milesich's Timepicker [Rank: A-]
  • jQuery*: 1.4.2, 1.3.2

  • jQuery UI*: 1.8.2, 1.7.2

  • Dates: Yes Times: Yes

  • Finger Friendly: Cannot use the time slider with finger, but you can select a point on the slider with finger OK.

  • Comments: Generally neat extension of the standard datepicker. Supports alternate fields to split out date/time component for easier processing.

Trent Richardson's Timepicker [Rank: B+]
  • jQuery*: 1.4.2

  • jQuery UI*: 1.8.2

  • Dates: Yes Times: Yes

  • Finger Friendly: Cannot use the time slider with finger. You can select a point on the slider with finger, but there is a minor bug meaning you need to select twice. You can also edit the bound field while the widget is active.

  • Comments: Generally a very neat extension of the standard datepicker. Doesn't support all features however e.g. alternate fields

W3VISIONS Date-Time-Picker [Rank: B-]
  • jQuery*: 1.3.2

  • jQuery UI*: n/a

  • Dates: Yes Times: Yes

  • Finger Friendly: Yes. Slider button doesn't work with the finger, but can select positions on the slider OK

  • Comments: The UI is a bit klunky and no themes support so I didn't bother with a demo page for this

timepickr [Rank: C]
  • jQuery*: 1.4.2

  • jQuery UI*: 1.7.3

  • Dates: NoTimes: Yes

  • Finger Friendly: No fingers, no play (unless the device has a trackball you can fallback on)

  • Comments: A different take on time entry. Maybe too different.

Additional Resources

  • jQuery Home

  • Datejs extends javascript Date parsing capabilities and adds nice syntactic sugar

  • Date Format extends javascript Date formating capabilities

Alternative Frameworks

jQuery is not the only game in town of course. Here are some others...

Blogarhythm for this post: Time - Pink Floyd

Tuesday, June 01, 2010

10 Tips to boost SaaS customer conversion

@DaveMcClure gave a great keynote this morning at #echelon2010, and he emphasized a selective focus on critical metrics to drive your business.

This post is all about improving conversion (customer activation) rates for SaaS companies, suggesting 10 areas where things often go wrong. If you are a SaaS company, I expect this is one of your key metrics and I hope the article provides some hints on where to look for your next round of improvements.

Last year I started CloudJetty, which is a directory of cloud/SaaS products. Since then I've researched almost 1000 different product offerings for potential listing. Aside from being a tremendous learning experience and really opening my eyes to the incredible range of products available, I guess it was inevitable that I'd develop a critical eye for how SaaS products are presented on the web.

I started making notes; patterns appeared; and when Dave mentioned activation today I thought it was about time I bullied my thoughts into an actionable top 10 that I could share.

My main observation was that after getting users to your site, many SaaS companies seemed to slip up in relatively trivial ways in the quest to convert. It points to a few simple interventions that could have a marked impact on your activation rates. After a good shuffle, my top 10 stands like this:

  1. What does it do?!? Be clear about what you are selling

  2. Help me tell others what you sell

  3. Products, Editions, Features - Be clear about what I can buy

  4. Let me buy it!

  5. Can I sign-up now?

  6. Be clear about future costs

  7. Who are you?

  8. Do your Corporate and SaaS sites agree?

  9. Can I get my data?

  10. You have mobile support of course?

  11. Bonus #11: Watch the evolution of Application Marketplaces

Some relate to technical capabilities, but the majority may be classed as failures in clear communication, or areas where silence is not a great idea.

Most of these are also not exclusively issues for SaaS companies, but I couch this specifically for SaaS because I believe they face particular challenges.

Cloud Computing is one of the most significant trends in IT, and 2010 is likely to be remembered as the year the cloud went mainstream. While many established vendors have been busy cloud-washing their products, we've also seen an incredible number of new products hit the market - in part because cloud infrastructure has itself drammatically reduced the cost of entry of delivering applications in the cloud (Software-as-a-Service / SaaS).

If you are in the business of building and providing a SaaS product, this is a mixed blessing. Yes, a rising tide floats all boats. But at the same time, the market is getting very crowded, very quickly. Standing out from the competition, and getting users to at least try your service is as tough as it's ever been. You don't want to make it any harder for yourself than it has to be.

Before we dive into the Top 10, I should be clear that this is based purely on my personal research and evaluation. There's no science or measurement to back this up.

If you have a Cloud/SaaS product, I'd simply encourage you take a fresh look at your website and use this as a quick checklist. If you "fail" any points, take these as areas you might want to review in more detail with you team to decide if you need to take action.

In short, forgive me if this sounds a bit preachy, and take it in the spirit it is offered: observations from a bloke who has looked at many SaaS sites and is offering some suggestions for the benefit of us all. I sincerely look forward to any feedback and additional suggestions you may have.

That said, here we go...

1. What does it do?!?

Figuring out what you are offering should not require the skills of an investigative journalist. Anything less than bleeding obvious then your chances of activating a new user take an immediate nose dive.

This is easier said than done, but it is still surprising how many SaaS sites fail to get this right. The three most common problems I've seen:
  1. Omit a meaningful description altogether(!)

  2. Provide a description, but one that is so grandiose, conceptual and all-encompassing that it doesn't help at all

  3. There is a good description, but it is burried somewhere in an About page or other secondary page

While this is a well-known web design challenge, it is particularly critical for SaaS. The product may not only be inherently complex or conceptual (e.g. subscription billing, sales force automation), but you also need to engage customers who are new to the whole cloud distribution channel.

How to fix this? First, you need good copy. Hire a skilled writer if needed to capture the essence of your product in concise, straight-forward language. Don't confuse this with writing a tag line or motto. It is about delivering the 5 bullet points or 20 word description that gets people past the "Ahah, I understand what you do" moment.

Next, you need a place to put it, which may require a review of your home page / landing page web design. Don't hide it on an About page; make sure it is up front and cannot be missed. If you do a good enough job, you may find your About page becomes redundant or can be relegated to a more detailed backgrounder.

2. Help me tell others what you do

One of the benefits of having a wonderfully succinct product description is that you make it so much easier for people to tell other people about what you offer.
This is particularly important for business software, where a bit of internal lobbying may be required to get the ball rolling.

Why make it difficult for people to write the email:
Hi Boss,
We've being talking about improving our project invoicing for ages. Well, I found this site {paste URL here} that seems a perfect fit.
It offers {paste wonderfully succint description here}.
Certainly seems to address all the problems we've identifed - can we add it to the weekly meeting for a demo and decision on trying it out?

Many sites make this so difficult, the poor person who is trying to be your champion literally has to rewrite or reinvent the way to describe your product in order to tell other people about it.

These people are trying to sell your product for you, so it's probably a good idea to make their life as easy as possible! Consider helping them out..
  1. Don't lock up key product descriptions in images. Make sure the important stuff is text that can be copied

  2. Avoid relying too heavily on customer quotations for the bulk of your site copy. These may convince me, but re-quoting a quote doesn't usually help me convince others

  3. Provide graded levels of detail in your product information. Many sites have high level taglines, a very detailed technical data sheet, but not much in between

3. Products, Editions, Features - so, what exactly do I buy?

There are quite a few SaaS companies that do a great job of communicating what they sell, but then totally lose the plot when it comes to being clear about what I can buy.

The distinction may be subtle, but it is critical for making it easy for me to hand over my money.

I may immediately grasp that you sell small business accounting solutions, but then get completely lost trying to understand whether I need the premium edition or the SOHO suite, with or without the active ledger integrator pack or advanced payments option. And does option mean I pay extra, or just that it may or may not work depending on my bank?

Some of the more mature SaaS offerings also fall into the "platform trap". You will recognise these by the tiered architecture diagrams. The confusion arises when trying to understand whether platform layers and vertical modules are just part of the product's logical design, or whether these represent separately licensed components.

Basically I want to buy, but I can't - because I'm confused or paralysed by too many options.

The most common solution these days tends to be the simple tiered payment plans, with a matrix of features available in each plan.

4. Let me buy it!

No kidding, I've seen too many sites that sell me a great product story but for the life of me I cannot discover how to register or purchase. These tend to be the brochureware-gone-wild type sites.

Some I suspect are companies that don't support a direct sales channel, but if this is the case I don't know why I'm not directed to a distribution partner.

If you are still pre-launch, there's no excuse for not providing at least a mailing list, guest book, facebook or twitter account that I can connect to.

5. Can I sign-up now?

True SaaS products have a huge advantage over traditional software: there is no shipping, distribution, installation or configuration phase to get in the way of instant gratification.

Which makes it baffling why so many purportedly cloud players do not capitalize on the opportunity for the impulse buy and immediate activation.

If you do not offer immediate sign-up, my first thoughts are frankly:
  1. You are not a true SaaS/cloud player. Cloud-washing alert!

  2. You have let your bureaucratic and legal processes overwhelm common sense. You are obviously not the agile, customer-focused company that I'd like to do business with

Neither reaction is beneficial for your business. If you can't already offer immediate registration, why is that? Is it a legal issue, engineering challenge or side-effect of your sales commission and distribution channel agreements?

The most common and apparently successful pattern is to enable immediate sign-up for a time-limited trial or basic free plan (the freemium model). Your foot is in the door, and the chances of coverting these users to paid plans just took a big leap forward.

I'd suggest that a free trial has already become a standard customer expectation. You seriously risk being passed over without a thought if you do not offer a free trial.

Whether you offer a freemium model is a trickier decision. Many are finding it hard to make fremium work in practice (such as Ning who recently switched to the free trial/paid model after years of trying to make fremium pay). The catch is that you must provide an incredibly compelling differentiation between free and paid, while at the same time not making your free plan so brain dead that it turns people away before they even consider paying. Not an easy feat.

I think there is still a valid place for freemium offerings in the business applications space, specifically because it is easy to define free/paid thresholds that make sense e.g. free to invoice up to 3 customers, but 4+ become paid services.

6. Be clear about future costs

Quite a number of SaaS sites offer a free trial or demo account without disclosing the pricing details for the real thing.

People aren't stupid, and I suspect most are immediately on the lookout for the bait and switch. Even if everything is above board, I am disinclined to waste my time signing up for a trial in the first place if I have no way of knowing whether the eventual costs will even be close to my budget.

It seems to have become the industry norm for SaaS companies to openly publish their pricing (usually a prominent "Plans / Pricing" link). If you can't or won't do the same, it will inevitably turn some people away.

There is a special problem of course if your service is in beta and the pricing of monetization plan hasn't been finalised. I think the best you can do is just be transparent and avoid giving your users any nasty surprises.

7. Who are you?

It is surprising the number of sites that make it difficult or impossible to identify who is really behind the site. Doing so just creates additional buyer resistance, which you don't need.

If you are offering applications for business, trust will be a significant factor in the decision to start using your product. The more sensitive and critical the information and processes involved, the higher the trust threshold will be.

In the consumer space, it may be sufficient to identify yourself simply as a web address (with perhaps an associated company). But smart businesses will want to know a little more about who you are before committing to a relationship.

That doesn't mean you need the brand recognition of Google or Salesforce, but you should be more than just an IP address.
  1. Get the advice and make the effort to ensure your SaaS business is appropriately incorporated.

  2. Clearly state the company name in your web footer/copyright notice and link it to the company contact or information page

  3. Include your real-world contact details and physical office address (if you have one)

  4. Quote your business registration number, and make sure the country or legal jurisdiction is clear.

The objective is to present your company as a tangible entity that exists in the real world and is able to entertain a serious business relationship. Admittedly, geography can be a double-edged sword. There's a big difference between having a business address in Prague or Palo Alto. But play to your strengths and don't be unnecessarily silent about where you operate in the real world.

8. Do your Corporate and SaaS sites agree?

You can find quite a number of SaaS sites that do the right thing and identify the corporate entity behind the operation, but when you visit the corporate site, there's no return link or mention of the SaaS product offering.

This is quite common with SaaS offerings that have spun out of a web design or development company, or have been obtained as part of merger and acquisition activity.

When you discover this as a potential customer, the impact is hugely negative. It raises questions about the degree of corporate support, and the prospect that the SaaS site may be on the verge of being cut lose or wound up.

Mostly I suspect this is an oversight, or just content management problems where web properties are under the control of unrelated groups. Eminently fixable. Do it!

9. Can I get my data?

SaaS is still in its early days, and so adopters are clearly taking a risk when compared to "traditional" approaches, especially in a business context. That risk equation is significantly rebalanced if there's a clear way for users to recover their data if things go pear shape.

Google made one of the boldest steps to address this issue when it established the Data Liberation Front.
Users should be able to control the data they store in any of Google's products. Our team's goal is to make it easier to move data in and out.

The large majority of SaaS sites are completely silent on the ability for users to extract their data from the service in a usable format. You can remove this as a barrier to adoption by providing a suitable data interface and being clear about this in your product documentation.

Better yet is to have an full open API, and support for data/integration standards that are relevant in your domain. But getting the data out is fundamental.

10. You have mobile support of course?

Smartphones - iPhone, Blackberry, Android and so on - are becoming the norm in business. And now we are looking at a new wave of tablet devices lead by the iPad (already 2 million units shipped) and a mob of android-based tablets on the way.

Increasingly, business functions are migrating from traditional computing platforms to these devices. CRM, contact management and social networking are already there.

So expect the questions like: "do you work on mobile? Do you have a native iPhone/iPad/Android application?"

Again, many SaaS sites are silent on the topic. Your web site may already be optimized for mobile browsers. Make sure we know it. Do you have plans for mobile applications? Make sure it is clear it is in the roadmap.

It is not a topic you should be silent about (unless you truly have nothing to offer).

Bonus #11. Watch the evolution of Application Marketplaces

We are all becoming familiar with marketplaces for mobile applications, digital books and videos. It is likely only a matter of time before marketplaces are to become significant distribution channels for SaaS applications.

Already we see the rise of platform-specific marketplaces such as Google Apps Marketplace, Salesforce AppXchange, Intuit Marketplace and others. And we have emerging platform-neutral marketplaces such as Cloudomatic and my own CloudJetty.

Smart SaaS providers will be watching closely to see how they can leverage the marketplaces to garner new users.

How to Do It Right

I've avoided citing examples of how to do it badly, mainly because these are such common problems it seems unfair to pick on one or two unlucky puppies.

But here's a pretty random example of a site that does a decent job of it.

Chargify simplifies recurring billing for Web 2.0 and SaaS companies. They have a tiered pricing based on the number of customers processed, with a free plan that will get you up to 50 customers. I can sign up now and immediately create a hosted payment page and start doing business.

It took me all of 5 seconds to figure that out. Brilliant!

Blogarhythm for this post: Why don't you do right - Peggy Lee (2010 remix)

Monday, February 01, 2010

Open Innovation

A provocative comment by Jason on This Week In Startups had me stop and think about the open innovation "fad".

He said something to the effect that all the open feedback and idea suggestion sites like UserVoice and GetSatisfaction were nothing but a great way for your competition to sponge on your success and out-innovate you by just pilfering all the good ideas. And you'd be a muppet to use one for your business.

The automatic reaction is that this makes logical sense. It is similar to the classic objection by the insecure and IP-obsessed to justify a closed innovation processes.

Certainly, innovating in public does expose you to some risk of IP leakage. That's undeniable. But maybe it's not so black and white: it's whether on balance you will gain more through greater engagement of an interested and motivated audience than you lose from competitors looking over your shoulder.

Personally, I think this is a false conundrum, for two reasons:
  • Good ideas are not hard to find, it's what you do with them that matters

  • Open Innovation is not just about the ideas

Good ideas are not hard to find, it's what you do with them

As Scott Berkun writes, it is a myth that "good ideas are hard to find".

So what if a competitor can look at all the ideas suggested and rated by your users? Who has the skill and determination to sort the wheat from the chaff and execute? Unless you have the balls to believe you can out-execute your competition, you should probably think twice about running an open innovation process.

And if you are up against a company that is running an open innovation process, Dilbert has the best advice for you.

Open Innovation is not just about the ideas

So you put up a site soliciting ideas and feedback, sit back and just implement whatever comes in. Really?

Unfortunately that is plain fantasy, perhaps with a certain appeal to (a) those who don't really like dealing with people, (b) the lazy, and (c) epic procrastinators.

Opening up to your customer base and inviting them to participate in improving your products or service is not just a cheap way to downsize the R&D group.

First, it may not be that cheap, and second, you may not get many new ideas you haven't at least considered before. But done well, what you are building is a genuine relationship with your organization's most important constituents: real and potential customers. You are giving them some power over your process, engendering ownership and loyalty.

It is also not a one way street. People will soon give up on submitting new ideas and lose any warm and fuzzy feeling if it appears their suggestions just disappear into a black hole.

In other words, closing the innovation loop with feedback is critical.

It doesn't take much effort either - just commitment. Dell use a simple blog (Ideas In Action) to showcase how IdeaStorm submissions have wormed their way into actual product and service innovations at Dell. Simple and effective, and reinforces the value of participation (hopefully accelerating the innovation process in turn). Contrast the success of IdeaStorm with other innovation forums that do not have an closed-loop process (Oracle's Mix for example).

A competitor looking over the fence into your garden may be able to steal ideas, but they can't steal the community you are building, and can't replace your role in the virtuous feedback cycle.

They can however steal your business if you screw up on execution, or treat your own customers with disdain. But if that's the case, they would have crushed you whether you ran an open innovation site or not, right?

Soundtrack for this post: With A Little Help From My Friends - Joe Cocker

Saturday, January 23, 2010

Nexus One - WIN! Nexus One with jangly bling bits - AWESOME!

..or so my better half would say!

Google/HTC Nexus One is an amazing phone. I love it. Along with whatever Apple are announcing next week I really think it will be a big factor behind augmented reality and always-on mobile internet going mainstream in 2010.

But I do agree with Dvorak who made the point that the Nexus One is slippery and easy to drop, so the fact that Google/HTC packed in every feature but the kitchen sink but did not include a lanyard point is a major FAIL.

But not just for practical reasons... for some, the wrist strap is just a great way to bling your phone.

My partner has a handful of bells, pets and chains hanging out of her blackberry. I'm sure if she got a Nexus it would end up looking like this..

But all her excitement for the phone disappeared when she discovered there's no lanyard point to make this possible. Not interested!!

Did Apple start this trend of "smartphones don't need a lanyard point"? I'm sure Steve would hate to see all those jangly bits falling out of one of his devices.

Come to think of it, maybe there's some cunning google geek logic at work..
No lanyard point = less chance of the phone being purloined by the gf/wife!

Soundtrack for this post? All Within My Hands - Metallica

Wednesday, January 20, 2010

Released: Authlogic_RPX 1.1.1 gem now with identity mapping for Rails

Authlogic_RPX is the gem I released some time back that lets you easily support multiple authentication schemes in Rails without really having to think about it (Facebook, twitter, OpenID, Google, Yahoo! etc etc etc).

With thanks for contributions from John and Damir, Authlogic_RPX 1.1.1 is now available and includes an internal identity mapping that lets you tie multiple authentication methods to a single user. There are also some other bug fixes and improvements, so it is recommended you update Authlogic_RPX even if you don't want to enable the identity mapping.

See the Authlogic_RPX repo on github for information about installation, usage, and don't forget the sample site (and sample code).

Under the covers, it uses the RPX service from JanRain, a bit like this:

To get a better idea of why you might want to use Authlogic_RPX, and some pointers on how to do it, here's a reprise of my presentation on the subject to the singapore Ruby Brigade last year:

Soundtrack for this post? (I want) Security Jo Jo Zep & The Falcons. 1977, tight pants, mo and all;-)

Tuesday, January 19, 2010

Cloud Computing - Why IT Matters

I caught Simon Wardley's presentation from OSCON on the IT Conversations Network; you can see in video below. He's an engaging speaker, and I think his characterisation of Cloud Computing as nothing less than a cultural transformation akin to the Industrial Revolution is spot on.

Soundtrack for this post? Mr Blue Sky

Saturday, January 16, 2010

ActiveWarehouse/ETL and Reflections on BI for Rails

I've recently been considering the opportunity to apply Ruby and Rails goodness to mainstream Business Intelligence applications.

During my research into prior art I discovered Anthony Eden's ActiveWarehouse and ActiveWarehouse-ETL projects, and gave them a test drive using a fictitious "Cupcakes Inc" site.

I presented this at the Jan 2010 Singapore Ruby Brigade meetup held at My "point-of-view" slides are embedded below, and you can find the sample project and doco on github.

  • ActiveWarehouse is a textbook implementation of classic data warehousing techniques. That was clearly Anthony's intention, but it also means it does not really attempt to explore how data warehousing might be approached quite differently with Ruby and Rails

  • ActiveWarehouse/ETL are not for the faint-hearted. When you get them working, they works well, but the lack of documentation basically means it's inevitable you'll end up reading the sources to figure it all out

  • I have concerns about scalability. Having worked on terabyte warehouses using "classic" technology, I know just how far you push databases in order to scale. This bears more investigation and testing before it would be sensible to commit to ActiveWarehouse for a large-scale DWH implementation

Nevertheless, ActiveWarehouse and ActiveWarehouse-ETL are interesting projects, and the underlying implementations make for some educational code reading. Hopefully my slides and the Cupcakes sample project will add a bit to the available documentation, and give a bit of a leg up to anyone intersted in checking out these projects;-)

Soundtrack for this post: Information Overload- Living Color