Welcome to Grayson Technology

Website performance: Concurrency and its evil brother latency

July 6th, 2010

There was a lot of buzz about Ruby On Rails a few years ago, many would say there still is. I find Rails focus on productivity very attractive, so a few years ago, for web work, I shifted over from Java to Rails. One significant difference between the two environments is how concurrent requests are handled; in particular the potential impact of high latency requests. This post isn’t about Java vs Ruby. However, the differences and similarities between their deployments did get me thinking about the impact of latency and concurrency on web performance and wondering about other approaches such as the event based approach of Node.js.

I use the term “high latency” to mean requests where the response doesn’t complete in under a couple of seconds, though arguably a couple of seconds is not particularly quick.

In our Java web systems we had lots of threads available. We didn’t tend to worry all that much about the odd high latency request as there were always plenty of other threads to serve other requests. In reality though, that was perhaps a little naive. In many applications there’s plenty of opportunity for a thread to consume and hold resources needed by threads e.g. db connections.

I shifted to using Ruby on Rails a few years ago now. Moving to Ruby on Rails was an eye opener for lots of positive reasons but (at the time) I was surprised to discover that Ruby servers are effectively single-threaded (there is threading in the de facto ruby 1.8 implementation (Matz MRI) but it’s cooperative rather than pre-emptive switching). The threading model effectively means that processes are used for concurrency – one request per process. On many systems (but by no means all) spawning processes can be slow, also processes consume memory – even if just the web stack when idle. As such there’s a relatively low limit to how many Ruby processes can co-exist vs the number of threads available to a similar Java web system running on the same hardware.

The one request per process model tends to make me much more paranoid about high latency requests than in my Java days. However, looking back I wonder if our old Java systems would have benefited from greater attention to eliminating high latency requests. Server crashes tend to creep up on you and often it’s not obvious what the one thing that’s causing the crashes is because it’s not one thing but a gradual degradation in responsiveness, that eventually gets to a point at which it tips into a server crash/stall. I rather grandly think of this as the “tipping point of crashes”.

You see a similar effect on busy motorways (highways, autobahns..). Think of the lanes as being like the processes available to service requests from browsers concurrently. If there is a slow car in one lane, the lane starts backing up and vehicles start switching to the other lanes. Capacity is reduced and the likelihood of a slow car entering one of the other lanes increases. The problem effectively cascades until suddenly everything stops. Once the congestion has passed and you’ve travelled a few miles more you may wonder what caused the problem in the first place, there’ll be no obvious cause.

So how to solve this.. Well continuing the motorway analogy, more lanes can obviously help. With more lanes you’re reducing the chance of a slow car affecting others. With additional lanes you may have moved the tipping point further out, a single slow car is less disruptive to others. However, the problem is still slow cars. Take the slow car off the road and the motorway copes with no problems. Here lies the danger, whilst lanes help, don’t let more lanes fool you into ignoring slow cars.

The Node.js web framework is interesting because it doesn’t follow the common model of process/thread per connection. Node.js provides an asynchronous framework, which put in very plain language means the thread doesn’t sit around waiting for databases, filesystems, messaging systems etc to reply to requests, instead it registers a callback to be called when the database/filesystem etc responds, the thread proceeds onto processing the next request.

Programming a system like this is a bit of a paradigm shift for most web developers, it is more like programming a GUI. However, decoupling concurrent processing of requests from the number of processes/threads should result in lower memory footprints and fewer problems with occasional high latency requests blocking out new requests and causing congestion problems.

I’m planning to have a go with Node.js pretty soon so it’ll probably form the basis of a future post here. In the meantime, here’s a good example explaining node.js.

So my tip: no matter what the system, always pay attention to high latency requests particularly if you are having occasional “mysterious” crashes.

WordSnack: Our 1st iPhone & iPad App now on the App Store

June 24th, 2010

We’re excited to announce that our first iPhone and iPad App is now available on the iTunes App Store. Read more about WordSnack on our iPhone/iPad App site Touch Rocket.

Google Analytics tip – Definitions

April 23rd, 2010

Just found a page defining metrics in Google Analytics. GA users might find it a useful reference. http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=99118

Speed, Conversion & SEO: for Google speed is a factor

April 11th, 2010

Google have officially announced that page speed is now a factor used to determine search ranking. You can read Google’s announcement on their Official Webmaster Central blog.

There’s some interesting details in Google’s post. As we’ve mentioned before on this blog, speed is a significant factor in conversion optimisation. Google want more money to be spent online. Money spent on online advertising would no doubt also increase.

So making your site faster is now very likely to improve conversion and a site’s position in Google’s organic search results too (page speed has been a factor in Adword’s Quality Score for some time now).

Paul

Page speed & conversion: Mozilla increase Firefox downloads 15%

April 7th, 2010

I’ve previously written about the importance of page speed to optimizing conversion. Mozilla achieved a 15% increase in downloads of Firefox by speeding up their download page.

The guys at Mozilla noticed the page for downloading Firefox was slow. They worked out how to speed the page up. Split (A/B) tested the new fast page vs the old slow page and achieved a 15% conversion increase – in their case 15% increase in downloads of Firefox which could amount to an additional 60 million downloads per year.

Here’s their concise post on how they improved conversion through improved speed.

Tip for email Marketeers – don’t keep changing your email address

April 1st, 2010

Ever noticed how email clients like gmail don’t (by default) load images in emails? Most email marketing systems use an embedded image to track who opens their emails. To protect your privacy and thwart spammers discovering which email addresses are valid and active, gmail (and many others) don’t load images unless you tell them to.

You may have noticed a link for loading images, and a link for always loading images in emails from sender Y. I get quite a few marketing emails, ones I’m interested in from companies I’ve previously made purchases with. I’m continually amazed at how often I have to click the ‘always allow images from Y’ link because someone has yet again changed the email address the marketing email comes from.

So nice email marketing people, please stop changing your send address. Do this for me, so I don’t have to keep clicking on a link to see your image laden messages. Do this for yourself so you can better track who reads your emails. You do use stats of your email marketing funnel to improve your emails’ effectiveness don’t you?! There’s an idea for a future post.

8 ideas for understanding product / market fit using the web

February 9th, 2010

Here are 8 ideas for understanding product / market fit using the web. Please add thoughts and other ideas as comments.

1. Run a news aggregator

Run a site which aggregates interesting news and articles related to your product area, presenting a headline / brief summary and then linking out to the original content. Categorise the articles and tag them. Keep a tally of which tags are used most often and observe clickthroughs, keeping a tally of clicks by tag.

A good source of content is twitter and it is relatively easy to do. Create a twitter list of people that post news and articles relevant to your area. Bingo!

This is more likely a qualitative aid than a hard quantitive technique, it would take quite some time and effort to make such analysis statistically significant and it is important to understand how the content you are posting may bias clickthroughs. However, if you do succeed in building an audience or community, that in itself is valuable.

2. Run a forum or question/answer site

An interesting example of this is Oracle Overflow. Whilst the aim may be to attract and help a community of Oracle users, this is potentially a gold mine of information on problems Oracle users encounter which in turn could spawn many ideas for products and tools. 

3. Survey, send out short questionnaires – perhaps with a prize draw

Ask customers or potential customers to fill out a questionnaire asking about their requirements and/or experiences. My advice would be to use a mixture of multiple choice and free text questions. Multiple choice questions have the advantage of being relatively quick to answer – many people don’t like writing. As multiple choice questions have a closed set of answers they are easier to process and analyse. However, sometimes you want to get a feel for problems people are having or their feelings towards your product so it can be useful to mix in some free text questions.

Achieving a good level of participation in your survey is very important. To encourage participation, keep your questionnaire relatively short and tell the user upfront how many questions and/or how much time it will likely take to complete. Consider giving them an incentive to complete your questionnaire. This doesn’t necessarily have to be something very big and expensive. I’ve successfully run a questionnaire offering a £50 SatNav as a prize and got over 500 replies. Obviously, the size of your response will be affected by the size of your audience.

Here’s an excellent post on “What my Survey Taught Me” .

4. Encourage questions and enquiries – make sure you follow up though

If you have the resources to answer questions then why not encourage visitors to your website to ask questions about your product / service? Along with their question make sure you automatically capture what product/content they are looking at and any options they may have already selected i.e. a hotel room in Amsterdam, April 25th. The product data and options are important because it may help you to categorize your data when you analyze it.

When reading through peoples’ questions, make sure you tag them into categories for later analysis – for example, if you sell radios you may find 30% of questions are asking whether the radio has a USB port for MP3 upload, if you’ve tagged these questions with for example ‘usb’ and ‘mp3′ this should be easier to identify and quantify.

Once you’ve collected a large set of questions you may be able to improve the product. If you can’t improve the product, perhaps you can improve sales by changing your sales pitch, or including an FAQ.

5. Gather reviews, use post purchase or enquiry questionnaires

Gather data and content about people’s satisfaction and experiences with you product and purchasing / enquiry processes. As before, make the questionnaires relatively short, use multiple-choice questions possibly with a few free text questions mixed in.

Design your questionnaire so you can categorize replies and if necessary take further action, for example: happy, unhappy, needs follow up. One way of doing this is to explicitly ask them if they are (a) very happy, (b) happy, or (c) unhappy.

If would like to use content from these questionnaires on your website, encourage advocacy by asking a question such as, “What would you say to a friend to encourage them to buy?”. You probably want to avoid using their answer to this question if they have earlier selected option (c) unhappy!

6. Design your site to self segment

Enable the user to self-segment by providing section or filter links.

For example, if you are selling televisions, you probably already provide filters to limit the list of available products by type, size and other features. Capture this information and use it to inform the selection of products you offer such that it better matches the demand your marketing is creating.

If your site is about operating an email server, you no doubt have sections about different aspects of operating the service, for example: backup, setup, spam, performance etc.. By getting people to self segment you can get a idea for where the biggest problems and pain points lie.

The following may be  a little controversial. If you use it, I’d recommend you use it with care. Consider providing links to products or content you don’t currently have but are considering. Don’t over do this though, people hate following links then being disappointed. Don’t do this is you cannot or do not intend to fulfill the need very soon. As a consolation, offer similar alternative products or related articles.

7. Look at funnel drop outs

Using Google Analytics or a similar tool, set up goal tracking e.g. product purchase, sign up for newsletter, post question, make enquiry. How to setup goals and funnels in Google Analytics.

Once you have goals and funnels set up and have a few weeks of data (depending upon how much traffic your site gets). Take a look at Google Analytics’ Goals > Funnel Visualisation. You’ll see a vertical list of funnels showing progress through each step. Take a good look at the right hand column, it shows where people who abandon the funnel go to. Any patterns in funnel abandonment will likely be useful for web design and conversion optimisation activities but they may also point to product opportunities to or problems.

For example, if you have a site which sells flights, you may have a banner or link to pre-book car parking at the airport. I wouldn’t advise adding such distractions to your checkout process, but if you already have them they may give clues as to related items your customers are looking for, or concerns they have with your product or process. In this example, perhaps flight and car parking could be offered as a single package/purchase.

8. AB test

This requires more expertise and effort but can be a very effective way of evolving a website to better suit customers needs. For those not familiar with AB tests the idea is that users are split into 2 groups, each group is shown different content, features or user interfaces. The test measures how likely each group is to complete a goal. If you are selling something the goal is usually a sale.

Do you have any techniques or tips for understanding how users use your sites or products? If so please share them in the comments.

Paul

Dumb-ass Features and Really Agile Management

February 7th, 2010

If you have been a professional developer for a while, at some point you’ll probably have thought to yourself, “why are we going to so much effort for this dumb-ass feature!?”. If you work with developers, there’s a very good chance that at some point they’ve thought this about your project – honestly. Thinking through this question and its causes can give some insight into why software development customers should embrace agile approaches as part of their product marketing toolkit.

IMO there are 3 answers to this question (not mutually-exclusive):

  1. The customer doesn’t realise how “expensive” the feature is;
  2. The developer/s don’t know/understand how much of a benefit this feature will bring;
  3. Nobody knows how much of a benefit this feature will bring.

Answer 3 is where the real power of agile development lies – much more on that in a moment. First let’s briefly address answers 1 and 2.

Answer 1, “the customer doesn’t realise how expensive the feature is”, is bad because the business really ought to know what it is spending – how much a decision is going to cost before they commit to it. In the short term this is most likely an opportunity cost. However, if systematically repeated, this can have a huge impact on both effectiveness and efficiency. Both developers and customers have a duty to each other to expose likely costs of alternative solutions as early as possible. 

Answer 2, “The developer/s don’t know/understand how much of a benefit this feature will bring“, some people think this isn’t very important but personally I believe it is very important. From the developer’s perspective this is demotivating. If the developer isn’t demotivated by this sort of thing, do you really want to employee them?! It really isn’t a question of just an individuals’ motivation though. The business is missing an opportunity too. With a better understanding of how a feature benefits the business, the developer may also be able to point out low cost improvements or cheaper/better/faster alternatives.

Answer 3, “Nobody knows how much of a benefit this feature will bring.”. This is where the big money is made. The best managers and leaders will strive for ways to answer this question as quickly and as cost-effectively as possible. They’ll look to test their opinions and assumptions about the product/service and the end-customer as quickly as possible. This is where the real power of agile approaches to software lies.

Moving from a Waterfall approach to software development to a basic iteration based agile approach will likely result in fewer defects and a better product – at least in terms of meeting the internal customer requirements. It is also more likely to be released when it is expected. I won’t go into this in detail, but broadly speaking the iteration approach leads to these improvements due to: more and more frequent internal customer involvement; better understanding of what needs to be built; and more frequent integration and testing.

Broadly speaking (though there are many nuances in practice) these improvements can be achieved by taking, for example a 16 week development project and organising it into 8x 2 week iterations/sprints each followed by customer acceptance (iteration meetings / sprint reviews).

Unfortunately, none of this addresses answer 3, “Nobody knows how much of a benefit this feature will bring.” End-customers still haven’t used the new features, new product or service. Even if the customer is internal and is involved in the agile process they probably still haven’t used the new features in earnest or for real work.

To understand the customer better and what features or changes will benefit them and our company we need to break these projects up into much smaller feature increments and move towards an even more agile approach.

Many projects are conceived from a piece of data and/or an assumption about the end-customer. What if our first iteration of development work is the smallest thing we can do to try and move the data point, or test the assumption we’ve made about the end-customer? The development team work for an iteration then release. Now the end-customer can see and use the new feature and we can assess its benefit before deciding whether to take it further and making another smallest step.

Lots of small quick steps enable us to evolve our product based on end-customer data and feedback. That’s really agile development and evolutionary product marketing.

Thanks for reading.

Paul

Site Conversion and Lipstick on a Pig

February 2nd, 2010

“You put lipstick on a pig, it’s still a pig” – Barak Obama

If I’m looking for a 40 inch LCD HD TV and your site only sells 28 inch Plasma you’re not going to make a sale. If you’ve spent money advertising your “wide choice of LCD HD TVs” then too bad :-p

When it comes to ecommerce website conversion the strongest lever probably isn’t how the site looks. If you don’t have the product people are looking for at an acceptable price then endlessly tinkering with how the site looks won’t make a jot of difference to conversion.

If you’re an ecommerce site then spend some time and effort determining what visitors to your site are currently looking for. They’re probably giving signals left right and center. What do they search for? What filters do they apply? What product sections do they click through to?

Thanks for reading,

Paul

P.S. my earlier, longer and slightly more serious post about 3 ways to improve conversion

3 Approaches to Improving Website Conversion

January 3rd, 2010

Looking to improve your site’s conversion? Many people focus a lot of effort and money on improving the design of their site but is that the only way of improving conversion? No, there are other approaches that you may not yet have considered. Whilst these are perhaps less obvious, in many cases using these could lead to considerable conversion improvement - often more significant than continuous improvement of a site’s design.

This post outlines 3 approaches to improving website conversion: 1. Improve site design (the usual focus of effort); 2. Improve site speed; 3. Demand / Supply match (for ecommerce sites this is often untapped and has much greater potential than 1. Future posts will investigate and elaborate each of these approaches.

1. Improve site design

This is the most obvious and most common approach to conversion improvement. I split site improvement into Aesthetic and Ergonomic improvements:

Aesthetic Improvements

Improving the visual attractiveness and appeal of the website in the hope that people will trust the ‘brand’ and aspire to own its products or use its services. Many many people focus the vast majority of their effort on aesthetics. Perhaps because often the people responsible for marketing have a background and experience in static print media, brochures, print adverts etc.

Ergonomic Improvements

Improving the usability of the site. Are the calls to action obvious, well labelled, placed in consistent and logical positions; does the site help try to prevent errors; is the flow between the various stages of a checkout process natural and logical, can the user undo previous actions and change previous personal information, quantities of product etc?

2. Improve site speed

A less obvious way to improve conversion is to improve the speed and responsiveness of your website. I say this is less obvious, perhaps it is obvious that faster is better but how many of us settle for a slightly sluggish site, where pages take 1 or 2 seconds to appear? What is less obvious, is that loading pages faster (certainly faster than 1s) can make a significant difference to conversion. Why?! Fast sites encourage learning by investigation. There is no wait “penalty” for clicking on links/buttons. The browsers’ Back button gives a quick ‘undo’ feature.

Not convinced!? Take a look at the effort Google are going to to speed up the web with Chrome, Speedy, Google DNS etc. Google even have a website dedicated to it, Lets Make the Web Faster. As Google’s Vice President of Search Products and User Experience Marissa Mayer says, “Users really respond to speed.”. Various studies and experiments by Amazon and Google show significant improvements in usage and conversion with speed.

Personally, the biggest step change in conversion I’ve ever seen occurred when we improved the page response time on a site by a factor of 4, taking pages from a slow typical response time of around 2s to just 0.5s. In that case it was pretty obvious we needed to do something about speed but the magnitude of the improvement in conversion was quite surprising – and very welcome!

3. Sell what your users are looking for

“Sell what your users are looking for” and its corollary, “Acquire users that are looking for what you sell”.

Sounds simple and obvious doesn’t it! But is it? What are your users looking for? I don’t mean what do you think they are looking for but what those actual users are actually looking for on your site. Do you know? Do you know what they’re looking for this month? Next month will you know what they are looking for?

I’ve seen this point arrogantly and confidently dismissed by some very experienced people with many years experience in busines but not online business. Why did they dismiss it? Well their years of experience in their industry sector and their sales figures showed that most customers wanted product X. They weren’t wrong about average trends across this industry sector but what they hadn’t considered is what the customers that their marketing was driving to the site where looking for might not match the industry averages. The mismatch between the demand their marketing created and the products they sold meant they had low conversion and hence poor return on their marketing spend at all but the lowest levels of spend. Their marketing was a very weak lever and as such it was hard to compete and hard to scale the business. Their best selling product was product X but if you stock product X rather than products Y and Z, that’s not surprising is it. As it happened about 35% of visitors where looking for product X but the other 65% where looking for products W, Y, A, B and Z which they didn’t offer. 65% of their visitors just were never going to convert into customers because they didn’t sell what these people were looking for.

Online business is not different to Offline business in some mysterious nefarious way, but with online you can relatively easily measure customer intent and desire and perhaps quickly respond to it. Business is competitive, if you don’t respond, sooner or later someone else will and they’ll beat you.

There are two approaches to solving this demand/supply mismatch: 1) change your marketing to attract more targeted traffic to your website, traffic that wants to buy product X; or 2) start selling the products your users are looking for, products W and Z as well as X. Before you can do either of these though, you need to know what user are after.

How do you know what your website’ users want? Look for onsite signals. Can you redesign your site so that users self-segment? Perhaps you can add filters or look at what people are searching for. Do you have this data? Have you ever analyzed it? Given this data, is your marketing spend proportioned to match?

For example, say your site sells televisions, what size televisions are they looking for? What % of users click on the “40 inch” filter? How does this compare to the products you offer? What if 35% of your users are looking for 40 inch televisions but only 1 of the 20 models you stock are 40 inch, 35% of your demand is for 40 inch televisions whilst just 5% of the range you offer matches. Even worse, what if you spend 40% of your money on adwords adverts for terms like, “40 inch lcd” or perhaps you have a banner advert on a home cinema lovers community site which mostly attracts the people looking for relatively large televisions.

Few businesses realise and make profitable use of such data, yet it is potentially available on many many websites, certainly all ecommerce sites.

I’ll follow up on each of these areas with future posts and update this post with links to the follow up posts. In the mean time, I hope you’ve found this both useful and thought provoking.