ALL IN Expert on Russian Poker Blog

ALL IN Expert, a poker equity calculator that I worked on back in 2008, still brings in a steady stream of traffic to this site.

I just ran across a post title “How do defend against shortstackers once and for all” from a Russian poker blog on how to defend against shortstackers (click here for the translation) which demos ALL IN Expert with a series of screenshots.

While ALL IN Expert never took off like I had hoped, I’m happy that people are still writing about it and finding it useful.

Adding a Survey to Preceden with Wufoo

Yesterday I added a survey to Preceden so users could tell me a bit more about their experience, and I think it’s going to be one of the best decisions I’ve made.

I chose to use Wufoo, a service for creating forms, rather than rolling my own because a) I hate making forms and b) I heard they make it easy.  It’s free to try and I’ve also heard they have great customer service, which is always a plus.

Patrick’s McKenzie’s post on integrating Wufoo into BingoCardCreator was my inspiration for doing this and I highly encourage anyone trying this to read his post too, as he has a lot of good ideas on incentivisation which I don’t cover here.

Wufoo has a slick web interface that lets you build a form by dragging and dropping controls onto it:

You also have the ability to customize the fields which makes it powerful, though it does so without being complicated. It’s clean, well thought out design is refreshing.

I added six question, which are based on the ones Patrick used for BingoCardCreator:

  • Male or female
  • Age
  • What do you use Preceden for?
  • What’s your favorite thing about Preceden?
  • How can we make Preceden better?
  • Would you be interested in using any of the following web applications? …

When you’re done, Wufoo will generate the JavaScript required to embed the form into your site:

I created a survey action in my home controller, with a corresponding survey.html.erb for their JavaScript:

And then I added a link to it from the user’s dashboard:

Clicking it takes you to the actual survey:

When users submit it, Wufoo sends me an email with the results, plus you can also check it on their website:

You’ll notice on the dashboard screenshot that there’s a small X in the top right corner of the survey notice.

I wanted users who have taken it or who don’t want to take it to be able to close the notice so it doesn’t show up forevermore on their dashboard. To do this, I added a surveyed attribute to the User model, which is set to false by default, but is changed to true when the user clicks that X.  Then on the dashboard I can say:

New! Help improve Preceden by taking our two minute .
'close'), :id => 'close-survey', :title => 'Hide this notice' %>

In total, integrating it took about two hours and it would have been a lot less if I didn’t want to keep track of who didn’t want to see it.

While there is already a contact form on the site, adding a survey link in a prominent location has already resulted in a great deal of  really good feedback. Here’s a snippet from one submission:

In no particular order :)

* Would love today’s date to automatically be in the ‘start’ box.

* An API so I can interface with our Bugzilla!
– This would boost other people sending data into preceden (hopefully) and raise awareness. Gosh, imagine a facebook app that logged and timeline’d exactly when you were on facebook. Ouch.
– I would love to see some kind of sync from preceden to Google Calendar (which in turn syncs with everything I own). Easier than developing multi-platform synchronization yourself!

This person probably wouldn’t have taken the time to write me an email, but by asking him directly “What do you want?” he opened up with a ton of useful ideas.

With Wufoo, there’s no excuse not to survey your users. For the amount of time it takes to do it and the value you gain from the results, it’s the easiest decision you’ll make all day.

Preceden’s Homepage Heatmap

About a week ago I signed up for CrazyEgg, a service that tracks where users are clicking on your site. It’s $9/mo for the cheapest plan and I figured I’d give it a try.

This, for example, is a heatmap generated by CrazyEgg showing the key areas where users are clicking on Precedens’ homepage:


  • Lots of people click on the large green “Sign Up Now” button. (A clear call to action on the homepage is a big, big win for any web app.)
  • Lots of people click on the “Examples” link to learn more about the service.  I haven’t spent much time optimizing the Examples page, but it’s probably something I should do given its important role in converting users.
  • Lots of people click on the “Pricing” link, which makes sense. Interestingly, until several days ago there was no Pricing section at all; the price was only mention in the FAQs. However, I noticed that a lot of people were signing up and hitting the free account event limit, indicating that they weren’t aware of the restrictions so I decided to give the price its own, prominent section of the homepage. I predicted there would be a noticeable drop in the conversion rate, but after several days, it’s remained at about 13% (new users / new visitors from Google Analytics). I’m thinking that’s a really good thing, because if people are not dissuaded by the presence of a price (ahh!), it indicates that they’re at least willing to consider paying for the service.
  • Not a lot of people click on the “Buzz” link, but that’s OK. I might want to A/B test a few more testimonials on the homepage to see how it affects the conversion rate. (PS: I recently added this gem to the top of that page: “The fact that Preceden offers “layers” and “milestones” puts your product miles ahead of other timeline apps that I’ve seen” which is from an email I received).

I might not continue paying the $9/mo, but it’s well worth the $9 to get that initial analysis.

A Simple Fluid-Fixed Layout

The illusive fluid-fixed layout has the following properties:

  • One column that expands to fill the screen
  • A second column that has a fixed width to the right of the expanding column

I rarely remember the CSS syntax to do this, so I’m posting it here both as a reference for myself as well as for anyone else looking for a solution.



	<title>Fixed-Fluid Example</title>
	<style type="text/css">

		body {
			color: white;

		#wrapper {
			float: left;
			width: 100%;

		#fluid {
			background-color: #336699;
			margin-right: 200px;

		#right-col {
			background-color: #bd2115;
			width: 200px;
			float: right;
			margin-left: -100%;

		.padded-content {
			padding: 5px;

	<div id="wrapper">
		<div id="fluid">
			<div class="padded-content">Fluid</div>
	<div id="right-col">
		<div class="padded-content">Fixed at 200px</div>

Preceden’s Paid Conversion Funnel (Infographic)

On May 4, three months after Preceden’s launch, I started charging for it. Preceden, for those of you who are unfamiliar with it, is a web app for making timelines.

Not completely charging for it though; I’m employing a freemium business model, which basically means I give it away for free and charge the folks who want a premium version of the product. In Preceden’s case, users can add a limited number of events to their timelines (20) but if they want to add more than that, they need to upgrade for a one-time payment of $29.

I haven’t followed the numbers too closely, so I decided to spend this weekend figuring out just how well the site was converting visitors into paying customers.

Here’s the result:

There’s good news and bad news.

The good news (great news!)  is that 5 people upgraded, for a total of $145.

The bad news is that only 5 people out of 316 upgraded (1.62%). Actually, I have no idea if this is good or bad. It seems bad. Regardless, I’d like it to be higher.

Until several days ago, the homepage didn’t have a “Pricing” section. I did mention the price in the FAQs, but I think a lot of people signed up without realizing that you were limited until you upgraded. A preliminary analysis of the new numbers shows that adding the “Pricing” section cuts the visitor to sign up conversion rate in half (12% to 6%). However, there should also eventually be a corresponding spike in the paid conversion rate, because everyone who signs up now should understand the limitations of a free account.

To complicate things, I also just changed it from a max of 10 events per free account to 20 events per free account. This is a tricky number because too low and users won’t add enough events to appreciate the product but too high and no one will need to upgrade. I thought 10 was too low, so I up’d it to 20. I don’t know yet how this will affect the conversion rate, and it’s going to be hard to tell whether that or something else affected it if it does change significantly.

I’ve also considered limiting free accounts in some other way (no printing?) but haven’t decided on anything yet. Another option is to lower the price from $29 to $19 but this is also complicated (what happens when the folks who paid $29 realize you just lowered it to $19?).

AdWords has been a flop so far. At $5/day, I spent $60 on it over this time period without any conversions to paid users. However, with such a small conversion rate (1.62% so far), the lack of upgrades could just be due to variance, so I’m going to keep at it a while longer.

Now that I’ve got a good system in place for measuring the affects of advertising, I’m going to experiment with some other ad programs and see how they measure up. I’ll make a follow up post in a few weeks showing my progress.

If you have any feedback, especially ideas on ways to improve the conversion rate, please let me know.


Preceden 20x Faster

I received an email a few days ago from a customer:

I’m loving your tool and using it to build a pretty extensive timeline for a project I’m working on. However, it seems to have stopped loading.

After a bit of troubleshooting, I realized that he had added so many events (217) that it took upwards of 30 seconds to load the page, causing Heroku to throw an error.

I decided to spend today seeing what I could do to speed things up a bit.

To do this, I created a timeline on my local machine and used the Rails console to add 50 events to it. I loaded it a few times and checked the server logs, which indicated that it took about 15 seconds to load on average. Eesh.

I set out to time all the major sections of code to see if I could determine what was taking the most time. I did this by creating a two methods on my Timeline class: initialize_ticker and tick:

attr_accessor :start_tick

def initialize_ticker
  self.start_tick =

def tick(str)
  diff = ( - start_tick) * 1000
  puts 'Tick %sms - %s' % [diff.to_i, str]

I called initialize_ticker at the top of the show method in the timeline controller and then added tick method calls to the top of every significant section of code. This let me narrow down where the slow code was. When I determined that something was slow, I added a few more tick method calls within the method to narrow it down even further. Once I had the block of code that was causing trouble, I tried to identify ways to improve it.

One of my major finding was that converting a DateTime object to a float (like in the code above) takes a nontrivial amount of processing time on the backend. Since Preceden’s code was doing this thousands of times whenever a timeline was loaded, it added a lot of time to each page view. Where I could, I started returning floats rather than DateTime objects so it wouldn’t have to be converted later on.

I made a lot of other changes too, but they’d be hard to explain without the context of the code.

tl;dr: I was able to get that 15 second page load down to about 700ms, an improvement of about 20x.

You notice it even more on timelines without a lot of events because what would take several seconds, is now almost instantaneous.

Not bad for a few hours of work.

Preceden Updates

What I’m working on this weekend, among quite a few other things:



Also of note is that I’m starting to charge for Preceden.

In the past, users could create an unlimited number of events on all of their timelines. Now, you can add up to 10 and after that you’ll need to upgrade for $29.

This decision, which I debated for weeks, will ultimately be a good one, I think. User count is great and all, but without revenue, you’re very limited. Sure, a lot of startups do it and it might make sense for them, but at this point in my pursuit, it makes more sense to focus on profits than acquiring a large user base (both would be good though!).

It changes things a lot and it will be interesting to see what happens.