2017

  1. I’m getting married

    I proposed to Julia in August, and we’re tying the knot in October.

  2. I sold Visitor Boost

    Visitor Boost was my first really successful website. Over 12 years it generated $1.5 million in sales. It was an exceedingly simple and low-effort business: resell another company’s advertising packages at a markup, the orders got filled automatically, and the support burden was minimal. Basically digital dropshipping. And it paid for most of my undergraduate college education.

    Changes in Google’s search algorithms, increased competition, and my investing no time into the site for years led to a steady decline in traffic and revenue. By 2017 it was generating only $1200/month in sales. I sold it through Flippa, a website brokerage, for 24X monthly profits last month.

    That was a good sale for me. I was never going to invest time into that site when investing the same time into Improvely would always have a better ROI. There’s no guarantee monthly sales wouldn’t decline further, but I locked in 24 months worth of profit. And the taxes on that money will be lower than had I earned it from customers, since it’s a capital gain rather than income.

  3. A stable Improvely

    Both financially and technically.

    Improvely has, for the past few months, plateaued at $500-600K annual revenue. New customers sign up at about the same rate as old customers churn out. I do minimal marketing (a $1000/mo AdWords campaign) and no outbound sales, so that’s a pretty good level to have grown to mostly organically, I think. Most new signups are referrals of existing or past customers that recommended Improvely.

    I think the business could be 10X larger if I had a small sales team doing some outreach. I also still don’t want to hire and manage people. I loathe even getting on the phone. Maybe some day there will be a “salespeople as a service” startup I can subscribe to.

    Feature-wise, Improvely is pretty stable as well. The big new thing in 2016 was funnel reports. There’s a certain type of marketer that really, really loves “funnels”. It’s the main word in their marketing vocabulary. Big overlap with the “affiliate marketing” group. They’re super happy to have funnel reports. The new features since then have been more minor, but important to day-to-day quality of life for lots of users, like leaving notes on customer profiles, manually adjusting historical cost data for their ad campaigns, and more granular notification subscriptions.

    In 2016 I also moved Improvely’s hosting 100% to Amazon Web Services. With reserved instances, it’s no more expensive than Softlayer was. But I no longer have to worry about live-migrating the entire site to a different host in the middle of the night because some new Xen vulnerability was found and Softlayer can’t hot-patch Xen, unlike AWS.

  4. I’m in love with electric cars

    That’s my Nissan Leaf, which I bought in the spring of 2015.

    It launches from a stop like a rocket, then feels like you’re gliding over the road rather than being dragged down it by a roaring engine. It’s totally silent. It uses no gas, emits no exhaust fumes, and you never have to take time out of your day to refuel it. I plug it in when I pull into my garage, and it’s got a full “tank” of power every time I want to leave the house. The electric is 50% cheaper than gas per mile driven.

    It has no belts to wear out, no oil to dirty, and the brake pads will likely last for the life of the car. The service schedule goes up to 120,000 miles with nothing but “rotate tires, check brake fluid” every year. 5-year-old Nissan Leafs start at around $5000. For a “grocery getter”, or a short daily commute, there’s nothing that new with a lower total cost of ownership.

    After driving the Leaf for two years I doubt I’ll ever buy another non-electric car. I would like a car with a sportier look and longer range per charge, which is why I put a reservation deposit on a Tesla Model 3. It’s supposed to go on sale later this year.

Sparklines & Funnels

I’ve been working on some new reports and updated screens for Improvely the past few weeks. I’m not ready to make the changes live just yet, but I’ll post a quick preview here for the handful of people that both use Improvely and follow my personal blog.

The project dashboard (formerly “overview”) is getting some new sparkline graphs in the background of the metric boxes, matching whatever date range is selected for the main graph at the top of the page. They give a quick at-a-glance view of the ups and downs of your marketing spend, traffic levels, conversion rate and such without having to select each metric from a menu.

I’m also finally adding oft-requested “funnel reports” to Improvely, which lets you visualize multi-step conversion funnels like what percentage of people drop off between adding an item to their shopping cart and actually checking out from an online store. It took a lot of work to make fully retroactive, real-time, custom funnel reports workable at scale without blowing up my architecture into something I can’t maintain on my own. I’ve made a few attempts at adding funnel reports to Improvely over the past few years that didn’t work out because they demanded too many resources without computing them offline, and none of Improvely’s other reports are computed offline.

The funnel can be fully segmented based on the source of each person (where they came from, what page they landed on, where they’re located, what device they used, etc). Segmenting or filtering details of the interim conversion steps might be added in the future, but won’t be part of the initial release. I still need to write documentation too, since there are a lot of assumptions in making a funnel report the person interpreting that report should be aware of — how things are attributed, whether people that enter the funnel after the first step are included or not, etc.

Larry Page himself assumed command to right this wrong…

Suddenly, 20% meant half-assed. Google Labs was shut down. App Engine fees were raised. APIs that had been free for years were deprecated or provided for a fee. As the trappings of entrepreneurship were dismantled, derisive talk of the “old Google” and its feeble attempts at competing with Facebook surfaced to justify a “new Google” that promised “more wood behind fewer arrows.”

…The old Google made a fortune on ads because they had good content. It was like TV used to be: make the best show and you get the most ad revenue from commercials. The new Google seems more focused on the commercials themselves.

— James Whittaker, Why I left Google

That was in 2012. I wonder if things feel any different under the new CEO.

Mandrill’s Betrayal

Mandrill, MailChimp’s SMTP-as-a-service offering with 800,000 customers and a $12MM ARR is essentially shutting down. They’re merging it into MailChimp, but updated the TOS and AUP with immediate effect in ways that essentially banned what was the service’s raison d’être: sending bulk mail programmatically.

You can no longer use it to send mail on behalf of your users, as in a contact form processor or white labeled service. You can no longer use it to send the same mail to multiple people, like an alert or notification. So, for many many businesses that relied on it, the rug’s been pulled out from under us with essentially no notice.

Prohibited Actions
Send bulk emails, meaning emails directed to a number of individuals with the same content, through Mandrill.
Acceptable Use Policy

There’s a whole post about the philosophy behind merging Mandrill and MailChimp on their blog, but no explanation for why there was not even a day of notice regarding the AUP changes. What a way to treat your customers.

Amazon’s new $49 minimum for free shipping

Profit was held back by a big jump in fulfillment costs, which increased 32.8% year-over-year in the fourth quarter and nearly 25% for the full year. Amazon spent $4.55 billion in the fourth quarter to fulfill customers’ orders, up from $3.4 billion in the same quarter a year ago, and the increase cannot be explained away by increases in Amazon sales, as the percentage of revenues spent on shipping also increased, from 11.6% to 12.7%.”

Amazon earnings fail to deliver because of delivery costs

There is more than loyalty at stake for Atlanta-based UPS. This year, its Amazon account exceeds $1 billion. … The average cost to handle a parcel was about $8 last year.

Amazon Seeks to Ease Ties With UPS

Some analysts say the move could help position Amazon to offer shipping services to other companies, eventually competing with the likes of United Parcel Service and DHL Worldwide Express. … Amazon rolled out thousands of its own trailers and launched an Uber-like delivery service last year to handle the so-called last mile of delivery, taking packages from distribution centers to customers’ homes.

Amazon Drops Hints It Could Be Building a Global Shipping Business

E-mail Alerts for Hacker News Comments

I put this together last week using the HN Algolia API. 492 users and 1571 notifications sent so far.

HN Replies.

A New W3Counter, Again

About a week ago, I started working on a rewrite of W3Counter from scratch, with a new data model and a new business model. These are going to be the key changes:

  • Silex instead of Symfony 1.x frontend (it’s that old…)
  • All the data collection’s moved to Node.js, not just the real-time stuff
  • No more requirement of displaying a badge or counter on a site to get free stats
  • No more ads on reports, even for free accounts
  • Rather than a 15,000 pageview log per website, it’s 30 days (free) or 12 months (paid) of data retention
  • Upgrades are available per-website instead of per-account
  • New “business” plan adds campaign and conversion tracking to the reports

I’m enjoying tossing lots of almost 10-year-old code. Coming soon.

The Most Valuable Lifecycle E-mail

At Improvely, there are a variety of e-mails customers receive depending on how far along our relationship is. For example, new users receive a welcome mail outlining how to get started and introducing me, trial accounts that aren’t set up get gentle nudges towards the next step, and users that haven’t logged in recently get occasional educational mails showing them how to get the most value from their accounts.

One thing some companies forget is that the customer lifecycle doesn’t end when a customer cancels their service. Customers that cancel are not lost forever. People cancel subscriptions for all kinds of reasons including not having enough time, temporary financial issues, organizational changes, testing alternatives, to personal issues. Many, if not most cancellations aren’t because the customer didn’t like the product!

The most valuable lifecycle e-mail I send is responsible for over $10,000 in added recurring revenue, and I only started sending it this year. Here it is:

Why does it work? People that have used Improvely in the past are my most valuable leads: they already know what Improvely is, know how to use it, have seen the benefits, and cost nothing to acquire. They’re sitting in the customer database already.

Reaching out occasionally makes sure they don’t forget about Improvely when they’re ready to use the service again. I keep the template updated with the latest and greatest features past customers may not have tried, along with occasional discounts to tempt those users that are price-sensitive or need that discount to nudge them over the edge to activate their subscriptions again.

If you’re not already reaching out to past customers, start doing so and you’re virtually guaranteed a boost to revenue and customer lifetime value.

A New Date Range Picker for Bootstrap

3 years ago, along with Improvely, I released an open source Date Range Picker JavaScript component designed to work with the Bootstrap CSS framework. Tens of thousands of downloads, 4000 stars, 1200 forks, 482 commits, and 288 pull requests later, it became … a mess. With so many overlapping pieces of code shoved in a hundred different places to support this new setting or that, it became impossible to add anything else, or to track down and fix bugs without causing new ones elsewhere.

Today I pushed version 2 to GitHub. This was a near complete rewrite I spent the past few afternoons doing. It’s not perfect, but it’s better. I fixed a lot of bugs, added a bunch of sanity checks to help reduce future ones, and generally built a better base to work from going forward. With a new major version came a few breaking changes for current users: some options were renamed or moved, and methods renamed or removed. The documentation’s all been updated.

I pulled all the easily merged pull requests into v1 and made one last release earlier in the week. All other pull requests and issues, some of them years old, have been closed. A blank slate. If you had an open PR or issue and it’s still an issue in the new code, I’m sorry for the inconvenience, and you’re welcome to try again.

Please go download, test, and tell me how it’s broken.

Thinking About Starting a Tech Business?

A recommended reading list, as someone requested of me today —