May 27

I was recently asked about our experiences in taking online payments, and in particular in taking regular subscription payments. The company we chose to handle our payments is called Realex, and we’re very happy with them. 

However, thinking back over everything that we’ve done since we started, there were plenty of things that we did that made our lives difficult after the fact, especially when it came to reconciling accounts and processing refunds. Hopefully sharing our missteps and mistakes might help save you a bit of time if you plan on taking payments yourself.

The first mistake we made was to be too worried about what would happen if our payment processor’s API took a long time to respond. We coded a lot of safety nets around this, recording all the details of the transaction in case something went wrong so we could redo it at a later time if necessary.

As it turns out, we’ve never experienced a timeout or overly long delay, so all that safety net coding was a waste of time. I wouldn’t bother with it now if I was starting again. You could just log timeouts or send an email alert and deal with them by hand should it ever happen to you.

The next thing we did that made our life difficult was to store the credit transactions in one DB table, and the calls and responses to the payment processor in another. This meant that when we came to reconcile the credit transactions without bank statements, we were missing some vital information.

Our payment processor batches payments together and we couldn’t easily work out which payment belonged to which batch without a lot of complicated work after the fact. Now we store the payment processor’s transaction and batch IDs with our own record of payment and it makes it very easy to reconcile our accounts whenever we need to. I really wish we’d done this from the start!

Another thing to bear in mind is that inevitably people make mistakes, and at some point you are going to have to process refunds of one sort or another. Doing the refunds themselves isn’t difficult. In our case Realex has simple online tools to handle them. However, you will want to design your system to handle refunds in such a way that you can reconcile your accounts afterwards. Just deleting or altering your own record of the payment will make this very difficult. You’d be surprised at how quickly you forget what the heck went on.

By way of example, if you take a payment and then have to refund it two weeks later, you could just delete the original transaction from your system and the books will balance, but you will be out of sync with your payment processor in two places – the original transaction and the refund. If each of these happened in different accounting months it can lead to real headaches. Ultimately, even if you don’t handle refunds directly through your transaction system, you will need to setup your code to handle refunds transactions that you enter by hand.

New credit card details can also cause problems. People get issued new cards for all sorts of reasons, so the details you have today are not necessarily the details you will have tomorrow. If you ignore this and just let people overwrite their current credit card details, it can make looking back at old transactions next to impossible. You should code for multiple cards, so a new card is added rather than overwriting the current card’s details.

Finally, if and when a customer complains about a transaction to you, stop and listen. As soon as they go to their bank and ask for the transaction to be reversed, you will be punished with higher fees and a permanent flag against your account. The banks have made this very easy to do in recent times, so it is in your best interest to avoid any dispute as quickly as you can. If in any doubt, refund the transaction. Even if you are proved to be right in the long run, your account will still be flagged because you haven’t done enough quickly enough to avoid the dispute.

Hopefully the advice above is of some use to you. We’d love to hear your stories of setting up to receive online transactions too, so leave a comment.

Tagged with:
May 26

Time matters, and when it comes to the online world nowhere does it matter as much as with page render times. We have found a direct correlation between render times and bounce rates, so there is a real commercial need to get our page load times down. One of the problems that we face is the physical distance some of our users are, Australians say, from our server, and the time it takes for our page to be downloaded by their browser.

Now packets travelling down fibre and copper are fast. The problem is that while they’re fast they aren’t instantaneous. Even with infinite bandwidth it takes a measurable amount of time to request a file and get it back to your browser.

The problem only gets worse the further your server is from the user. If, say, the majority of your users are in London then you can potentially minimise the issue by putting your server somewhere physically nearby, in the UK at least. This will give you a round trip delay (latency) of about 30 milliseconds. However, if your server is a continent away the delay is more likely to be 200ms, and if it’s on the other side of the world it going to be about 350ms.

Now 200ms or even 300ms does seem like a lot of be worrying about in the context of a 4 second page load time, and it wouldn’t be if the browser only had to suffer this delay once. The problem is that browsers can typically only download a certain number of files simultaneously.

For example, if a web page has 30 files to download, then the browser could be forced to wait 200ms more than once and maybe as many as six times. This can add nearly a second and a half onto the page load time. In reality it is even worse that than that as each packet must be acknowledged. So not only is there latency with each file, the time to actually transfer the file is also increased as well.

As is the case of most web business, RevaHealth.com was global from day one. No matter where we place our servers, they are going to be physically remote from a large number of our users. We have historically addressed this problem by reducing the number of files on our page. However, there is only so far this can go and we have now run into hard limits. If we want to reduce our page render time further we just have to face this latency problem head on.

So what’s the answer?

Content Delivery Networks are the answer. Let me explain why they are so useful and what impact they have had on our own build process. There are three distinct advantages to using a CDN for your static content:

  1. Reduction in latency and therefore improved page load and rendering
  2. Increasing the number of domains where the page’s dependant files are called from increases the number of files that can be simultaneously download. This improves page load and render times.
  3. It removes the overhead of serving these static files from your own server, improving efficiency.

A CDN is a network of servers throughout the world that puts your content physically closer to your users, thus enabling the lowest latency possible. In order to use one you need to change your build process so that your static files are uploaded to and called from the CDN rather than from your own server.

Here’s what you need to do:

  • Create new CNAMES in your DNS records for your static files. Each CNAME will correspond to a bucket on the CDN where you store files. It is a good idea to create enough buckets so that there will be no more than 4 files in each bucket. For example, create css.example.com for CSS files and js.example.com for JavaScript files. This will maximise the number of files that the browser can download simultaneously. You don’t need to worry about which CDN servers are closest to the user; the CDN’s DNS will automatically resolve the CNAME to the closest server.
  • Change all of your references to static files to the corresponding address on the CDN. For example, your CSS file will now be referenced as css.example.com/style.css
  • Upload your static files to the CDN

Unfortunately it does get a little bit more complicated than that. The problem is that the servers at the edge of the CDN are designed to deliver files as quickly as possible so they don’t check with the central server to see if the file has changed. This means that if you change any of your static files, in your next build the user will still be downloading the old version of the file.

Here’s Why
When the first user downloads the HTML for your page, the HTML references the CDN for static files. DNS then automatically resolves the CDN CNAMES to the nearest server in the CDN. However this server does not yet have the files it needs, so it requests them from the central server and then serves them up to the user. In this instance the user sees little or no improvement in page render time when compared to downloading everything directly off of your own servers.

The benefits come when subsequent users in the same geography visit your site. Exactly the same process is repeated, except that now the edge server does not need to ask the central server for the files, as they have them locally.

The problem with this system is that when you change the files on the central server, the edge servers don’t know about them and they keep serving up the old files, typically breaking your site.

How a Content Delivery Network works

How a Content Delivery Network works

What to do about it

To get around this problem you need to implement a build process that iteratively changes all the static file names and the references to them. Now when a user downloads a new version of your page it will reference files that the edge server does not have locally, forcing it to get the new files from the central CDN.

So What about the Results?

We had already put in a lot of effort in optimizing our page render time and it was down to 4 seconds for our average user (4,000 KM from server). Implimenting the CDN dropped this down to 3.5 seconds. While a half second improvement hardly seems worth it when you get to these kind of time even a small improvement can significantly improve the user experience and we are seeing a probable 2-3% decrease in bounce rate as a result. The saving is made because of two reasons:

  1. The javascript required to render the page gets down the browser quicker
  2. The CSS sprite is now downloaded in parallel with all of the files required to render the page, whereas becuase it used to be on the same domain as the other files it would be delayed by the latency of a full round trip.
Tagged with:
May 22

We rolled out an update to RevaHealth.com today at around midday GMT. The main new feature in this release is text messaging. When a user fills in the contact form for a clinic RevaHealth.com will now automatically text the user with the phone number of the clinic. There is also a handy ‘Text Me’ button beside the phone number of the clinic for users that do not want to fill out the contact form.

We still have some work to do to normalize all of the phone numbers (110,000 of them) in our database to try and make sure a user can just click on the number in the SMS. We expect the bulk of this to be complete on Monday, however as we have clinics in nearly 100 countries there are bound to be some problems. We will be releasing our phone number normalization on Google Maps sometime in the near future.

Tagged with:
May 21

In Google Analytics you can only view 500 rows of results from a query at any time. When you try to export the results of the query, unhelpfully it only exports the results that are on your screen at the time, so if you need more than the 500 results on the screen, you have to page through them and export them by hand one page at a time.

Or so I thought.

A little bit of digging around has revealed that if you add the string &limit=50000 to the end of the URL of the page you are looking at, and then export as CSV or TSV you will get up to 50,000 records in your downloaded report file.

Being able to export large volumes of segmented data is of great value to us here in RevaHealth.com, especially with our focus on long tail SEO. Hopefully this tip will save you some time too.

P.S. If you’re using Analytics and haven’t checked out advanced segments yet, you owe it to yourself to do so. They are the answer to innumerable problems that existed in Analytics reporting up to now.

Tagged with:
May 21

One summer, in college, my friend received a postcard. It was addressed: (his surname), Offaly, Ireland.

This is a classic example of where humans deal with ambiguity a lot better than computers. Addresses are tricky things for non-humans to understand. The London Road is unlikely to be in London but is likely to be in any number of places on the way to London.

If we want to look for something these days we are likely to type it into a search engine. If what we want to look for is a place, then that search will be interpreted against a mapping services and in case you hadn’t noticed, most of these are awful. Well, I mean, they are great –  mostly, but you would not want to rely on them.

The problem runs something like this:

Rathfarmham is a place in Dublin, Ireland. It is a place which people quite happily put in their addresses and then receive replies to.

The Google Maps product has a geocoder. If you send it an address, it sends back where it thinks that is. If you type in ‘Grange Road, Rathfarnham’, it will tell you where that is. However, it doesn’t really know a Grange Road in Rathfarnham, only a Grange Road, and because of the crazy old world country I live in there is another Grange Road a few clicks away.

Even worse, it doesn’t really know Rathfarnham is a locality. If I try ‘Silverwood Drive, Rathfarnham’, then I get back the correct ‘Silverwood Drive’, but if you look deep inside the response it thinks the real address is Silverwood Drive, Ballyboden.

Now until I used the Google geocoder I did not know where Ballyboden was, despite having lived close to it throughout my childhood years. Somebody, somewhere down the line has made the seemingly unimportant decision that Ballyboden is the main locality and that Rathfarnham is a place and not a locality.

Ok, so this stuff is just annoying, nothing more, right? Well not really. There’s money in search results. How many people who have a business think about the appearance of their physical address to search engines? I’m guessing very few. For instance it is common for people from the same business to write their business address in quite different ways. Even if you have a standard address and never deviate from it, is it one that is mapping data friendly? You might be missing out to a competitor with a less ambiguous address (machine-interpretable).

Ambiguity and commonality are the enemies of correct identification. Our ‘Grange Road’ issue becomes a more common problem if our address is Main Street or High Street. Now we definitely need another matchable identifier within the address to have any chance of finding our High Street and a different one on the other side of the county, state, or country.

The challenge is to provide a solution that is both machine-interpretable and human-readable. This has been solved by several countries such as Singapore where the postcodes have been honed to building level accuracy, and from there a standardised floor/suite syntax completes the address.

As we use more machine based location services it makes sense to use increasingly machine readable addresses. This is not to say we should give up the addresses of our forefathers to an alpha-numeric string or abstract machine interpretable symbol but there is a good case for including a unique identifier in physical addresses as standard.

At one stage ad hoc delivery/location solutions were fine: a package would cross an international border and a large purpose built organization would take responsibility for its correct delivery. However this approach is unreliable and archaic when applied to divererent automated systems controled by an expanding number of companies. The internationa situation makes life even more complicated as because of a network of varying standards and methodologies across the world. In the absence of international standards it is up to individual governments to assemble solutions, each requiring a separate approach.

Zip codes and other unique identifiers are one solution. However, these were often designed to handle a different problem and may not be sufficent accurate, relying finally on a level of human interpretation. Some of these are further tied to commercial organizations making their availability unreliable. For many applications any charges  will create an unacceptable barrier to entry. Location based services aren’t just going to be “find a pizza joint”; public information from health screening services to disaster emergency updates are part of the story too.

Some countries, notably for me Ireland, are falling worryingly behind. Systems are  being developed for public services that rely on commercial organizations with varying levels of commitment and skill. Where a government should see a responsibility to provide equal service support across its territory, current mapping and geocoding vendors will naturally apply their efforts to high return sectors first.

Many countries recognized early on the importance of a mail system to their societies, enacting legislation to ensure universal accessibility and harsh penalties for interference in its operation. As the transference of information and its type changes, the willingness to approach the associated opportunities at a societal or governmental level appears particularly moribund.

Tagged with:
May 19

As a rock climber I view the mountain rescue services with a mixture of potential embarrassment and a lot of respect. On the embarrassment side of things, I worry about someday being stuck on a ledge in Dalkey Quarry with an over sized team of rescuers determined to strap me into a stretcher whether I need it or not, and all this to the cheers and jeers of a large crowd of onlookers.

However when the mist starts to descend over the Wicklow hills and you realize that you are lost there is great comfort in knowing that a well trained, well equipped and organized group of rescuers are willing to brave the elements to bring you down safely. It is the organisation of volunteer rescue teams that Decisions For Heroes focuses on.

What is Decisions For Heroes?

Decisions for heroes is a rescue team management web application that aims to save lives by making volunteer rescue teams more efficient and enable them to share vital knowledge between groups. Rescue teams using Decisions For Heroes are provided with a simple web interface where they can log all their training and rescue activities along with details of their team members. It then provides analysis, such as heat maps of the number of incidents in an area, that enable the team to plan how best to meet the unique challenges of their local area.

What is fantastic about the goals of the product is its genuine life saving potential. I love the fact that web 2.0 technology has allowed a small Irish company to make such a big difference to a vital worldwide service. 10 years ago this just wouldn’t have been possible.

How Well Does It Work?

The product itself is fairly simple and it only took me about 10 minutes for me to get to grips with it. I think that the Byte Surgery team have done an excellent job in providing an intuitive user experience and it looks like they have stripped out any unnecessary features so it is very focused. What is left is clear, concise and blindingly fast.

Decisions For Heroes in action

Decisions For Heroes in action

  • Dashboard – Summarise the key activities that have taken place, with short cuts through to reports,etc
  • Activities – This is the core input area of the product, where training sessions are scheduled and logged. Incidents are logged according to a timeline of: alert received, arrived on scene, departed scene and time the team stood down. There is a very nice Google Maps mash-up as part of this interface.
  • Members – This section lists the details of each of the team members with their qualifications, also lists the incidents that they have attended.
  • Analysis – The analysis section is where I think most of the value of this product will be delivered. It is through the reports on Decisions For Heroes that teams get to see where the geographical hot spots in their area are and what they need to be prepared for. It also makes it clear which team members are responding and what resources the team needs.

Byte Surgery have also taken a really nice approach to product features requests. First of all, it is integrated into the product allowing you to request an improvement as you are using a particular feature. In addition, your feature request is then shared with other users in the system, allowing them to contribute, so when the feature is eventually coded it should be well thought out.

Overall I’m extremely impressed with Decisions For Heroes and I think any organised rescue team will see immediate benefits from using it.

Tagged with:
May 18

In preparation for tomorrow’s Tuesday Push for Decisions For Heroes, I thought it would be interesting to look at how being the subject of the push two weeks ago has benefitted RevaHealth.com so far.

The purpose of the Tuesday Push is to “make some noise about ourselves [the small but growing tech community in Ireland] by picking a good example of an Irish Tech Company and highlighting their product(s) every second Tuesday”. It’s a way of increasing the visibility of our sector, one company at a time, and also a way of fostering a community in the industry through honest feedback.

So, let’s get the easy part out of the way. Has being the subject of the Tuesday Push benefited us? Absolutely, but maybe not in the ways that people might have expected. We certainly haven’t gotten any extra (traditional) media or press attention out of it yet, and in terms of extra traffic, we’ve only had around 150 visits to the site or the blog originating from the articles that were written about us (excluding any mentions on Twitter).

We did however get two things that were invaluable to us. Honest feedback, and links to the site.

The feedback was largely positive, but a few people did either run into problems using the site or didn’t like the way some of it worked. This was great to hear, especially because they gave real examples of what their problems or dislikes were. Some of the problems were new to us, others were ongoing issues. We have fixed or are planning to fix all of them. The dislikes were more varied, and often design related (not our strongest area by any stretch of the imagination!). We’ve taken them all on board and we hope that we will get to address as many of these as possible over time.

The push has definitely introduced us to more members of the community than we knew beforehand, which is great, and has also increased awareness of RevaHealth.com and our blog within the community itself, which can only be a good thing.

Links-wise, here are the numbers:

Links to RevaHealth.com 20
Links to RevaHealth Blog 9
Links to Caelen’s Twitter 5
Links to our SERPs 4

Those numbers might not look very big to some people, but ultimately those links are going to help us get better positions in Google and the other search engines. The links come from 15 different sites, many of which have never linked to us before. Also of interest to us was the number of people who mentioned and linked to our blog. We’re really pleased that people are finding it useful and we’re going to continue writing for it as often as we can.

Being the subject of the Tuesday Push has definitely been a very positive experience for RevaHealth.com. If you have the time to spare to give an upcoming Tuesday Push company a little feedback and a link, they will hopefully learn from it as much as we have and appreciate it as much as we do.

What can we do to help improve the Tuesday Push? First up, tell people you know about it and ask them to take part. Secondly, try and get some media to mention it regularly. Newstalk radio and Innovation in the Irish Times spring to mind.

Tagged with:
May 15

Last night we launched our latest build of RevaHealth.com which includes a couple of significant new features, one aimed at our visitors and the other at the health clinics that use our site.

Maps

Previously when you looked at the map page in our search results you were presented with just the clinics from the search result. While this made some sense, it wasn’t particularly useful as we had to make the maps static in order to keep page load times down.

Ideally, we wanted the maps to be another way for people to search for clinics, which meant making them interactive again. To do this, and not impact on our page load time, we split each map off onto it’s own page, which has the added benefit of giving them their own URL so we can SEO the map pages separately from the search results pages.

Map of Doctors (GPs) in Cork City

Map of Doctors (GPs) in Cork City

Our map pages are now active. For example, take a look at our map of doctors in Cork city. If you’re from Cork, or in Cork, you should be able to tell at a glance if there’s a doctor near where you are. Where we have the information, we’ve added the price of a general consultation to the map. You can click through to the contact form for each clinic or view their full listing directly from the map too.

As with all new features, we’ll be looking closely at how our visitors use the map to see what we can do to improve it over time, but for now we’re happy to provide what we hope will be another useful service for the public.

Two New Levels of Membership for Health Clinics

We have received a tremendous amount of interest from single professional clinics, such as physiotherapists and general practitioners. They want more than just our Free Listing but don’t have the demand to justify a Pro Listing, and to date we haven’t had a listing to match their requirements. Our new Solo Listing will hopefully be of some interest to these clinics. We have also introduced an Ultimate Listing for large clinics demanding the highest levels of promotion.

Solo Listing

Solo Listings are available to clinics with a single health practitioner treating patients outside of the fields of dentistry and cosmetic surgery. The benefits of a Solo Listing include larger search results, unlimited email enquires and the removal of external advertising from the clinic’s brochure. Solo Listings cost €20 per month or €200 per year.

Ultimate Listing

The Ultimate Listing gives clinics much more than Pro membership. Search results are larger and the clinic is promoted on the front page of RevaHealth.com. In addition to the normal search listing the clinic is also advertised on the right of the page for all relevant search results. Ultimate Listings are available from €750 a month or €7,500 annually.

Our new sign-up page (May 2009)

Our new sign-up page (May 2009)

Clinics that would like to avail of these new types of listing can sign-up directly on RevaHealth.com.

Tagged with:
May 14

Working out what our users have been doing this month has been quite difficult, but for the best of reasons. Thanks to sterling work by our engineering and design teams we have managed to improve the performance of our site dramatically, and consequently the percentage of people visiting our site who end up contacting a clinic has increased dramatically too.

By way of example, our April traffic increased by a modest 8.60% versus March, but the number of enquiries we processed increased by 47.81% in the same period.

RevaHealth.com Traffic and Enquiries Increases - April 2009

RevaHealth.com Traffic and Enquiries Increases - April 2009

Traffic from Ireland increased by 26.82%, traffic from the UK increased by 9.70%, but traffic from the US fell by 12.63%. Unsurprisingly, the fall in US traffic was most notable during the Swine Flu panic, which centred largely around Mexico, our number one destination for our US visitors. We expect traffic from the US to return to normal this month as the panic fades. We expect it increase dramatically in the coming months now that we have started to list local clinics in the US also.

Irish Visitor Analysis – April 2009

An interesting metric that we look at every month is the proportion of enquiries for clinics at home versus abroad. In April the split was 64.89% in favour of local clinics, versus 35.11% for clinics abroad. This is a significant shift towards people contacting clinics at home, as last month’s figure was 58.83%.

Irish Enquiries -  Home vs Abroad Split

Irish Enquiries - Home vs Abroad Split

Digging deeper, while the number of visitors from Ireland who contacted clinics abroad actually increased by 65.10%, the number who contacted clinics at home increased by a far greater amount, 74.83%.

Interest in dental treatment in Northern Ireland continues to be the talking point for Irish visitors. Following on from roughly doubling for each of the last two months, this month there was a staggering 256% increase in the number of enquiries for clinics in the North. The media coverage of “everything is cheaper across the border” seems to be having an even greater effect on people as the economic situation continues to deteriorate. Clinics along the border and on the main traffic routes to Belfast in particular are benefiting from people already travelling for groceries, alcohol and Ikea.

Clinics in Northern Ireland now account for 19.73% of all enquiries made by people in the Republic, up from just 9.96% in March.

The other most popular destinations abroad were Poland (7.91%), Hungary (4.51%), Turkey (3.40%), Poland (2.22%), and Spain (1.18%).

Top 5 Destinations (from Ireland) - April 2009

Top 5 Destinations (from Ireland) - April 2009

Back to the overall picture of visitors from Ireland, dentistry is still the number one thing on their mind, with dental clinics taking 70.81% of all enquiries, followed by cosmetic and plastic surgery clinics, with 21.80%.

The top 5 most commonly requested dental treatments are Teeth Whitening (17.12%), Braces (10.75%), Veneers / Lumineers (9.08%), Implants (7.62%), and Root Canal Treatment (3.24%).

Top 5 Dental Treatments (Ireland) - April 2009

Top 5 Dental Treatments (Ireland) - April 2009

The top 5 most commonly requested cosmetic or plastic surgery treatments are Botox (16.92%), Tatoo Removal (9.77%), Liposuction (8.27%), Mole Removal (6.39%), and Breast Reduction (5.26%).

Top 5 Cosmetic Treatments (Ireland) - April 2009

Top 5 Cosmetic Treatments (Ireland) - April 2009

UK Visitor Analysis – April 2009

As with Ireland, the breakdown of whether UK visitors are looking for treatment at home or abroad is one of the most interesting to look at. This month there is a continued swing in favour of contacting clinics at home, with the April figures showing that 63.60% of enquiries are for local clinics, versus 36.40% for clinics abroad. This is an increase from last month’s figure of just 43.89% of enquiries being for clinics in the UK.

UK Enquiries - Home vs Abroad Split - April 2009

UK Enquiries - Home vs Abroad Split - April 2009

While there was a modest increase of 37.62% in the number of people from the UK contacting clinics abroad in April, the number who contacted clinics at home increased by 112.36%.

Northern Ireland and the Republic of Ireland are responsible for their fair share of enquiries from the UK, at 3.91% and 4.52% respectively. Outside of these countries, the most popular destinations for visitors from the UK were Poland (7.91%), Hungary (4.17%), Bulgaria (3.21%), Turkey (2.43%) and Thailand (2.09%).

Top 5 Destinations (from the UK) - April 2009

Top 5 Destinations (from the UK) - April 2009

While dental clinics are still the most contacted by visitors from the UK, with 60.82% of all enquiries, cosmetic and plastic surgery clinics have increased their share from 22.72% in March to 31.45% in April.

The most popular dental treatments requested were Veneers / Lumineers (14%), Braces (12.43%), Implants (9.86%), Teeth Whitening (9.86%), and Dentures (2.14%).

Top 5 Dental Treatments (UK) - April 2009

Top 5 Dental Treatments (UK) - April 2009

The most requested cosmetic and plastic surgery procedures were Botox (9.67%), Facelift (8.89%), Tatoo Removal (8.29%), Mole Removal (5.25%) and Trachea Shave (4.14%).

Top 5 Cosmetic Treatments (UK) - April 2009

Top 5 Cosmetic Treatments (UK) - April 2009

Tagged with:
preload preload preload