Updated: 1/21/2011 – latest data used in marketing/financials section.

Note: Since I’m still developing the idea I’m writing about, I don’t specifically mention the project I’m working on. My goal is to share insights and the process I went through with this project in an agnostic way, so you can understand some of the things you need to think through if you want to go from a small amount of traction to a revenue machine.

I’m extremely passionate about creating and building new things, so I started a few side projects in early December. A side project, to me, is something that requires less than full time effort on my part but serves a purpose and has high impact in some way. It is an exercise to hone my skills, learn new things, and possibly create a new stream of revenue. I’ve done many side projects before, and it’s great to keep myself sharp. It usually leads to new ideas, crystallizes new theories, and creates new serendipitous connections.

Today, I wanted to share with you one of my side projects. I’ll systematically review key parts of the business and the logic and reason behind prioritizing upgrades to both save time and money. I’ll most likely write about the other projects as they mature, but I’m excited about the performance of this one. This particular side project generates about $500.00-$1,200.00+ per day in revenue now, and I expect that to triple within the next 2 weeks. Extrapolating this out, it means the system generates between $182,500.00 to $438,000.00 per year, with expectations of that tripling — $547,500.00 to $1,314,000.00 per year. This was achieved through a combination of automation, marketing, and financials.

A rough draft launch

Screenshot: PayPal notice

I’m a believer in market-driven startups rather than idea-driven startups — that is, find the demand first, then build a product to meet it. For this project, I felt I had potentially identified one related to ecommerce, and then I spent 3 hours building it before opening it up for business. Nothing was automated. Before launching, I asked myself what the project goals were. The two that percolated to the top were: 1)  create very happy customers and 2) generate large revenue and profit margin. To do this, I thought out quick-and-dirty processes for marketing, ordering process, fulfillment, customer service, etc. I then built the system that connected all the requirements.

The “system” that was created was very hacky, almost duct-taped. It was simply a series of business processes that linked together from end-to-end. I knew starting out this way, I would be paying a premium on data. My customer acquisition costs would be very high. This is OK, and normal. As time goes on, the waste will be cut and reinvested into the areas that do produce results.

How do I track progress and metrics quickly and easily, without incurring heavy costs in resources? I built a relational Google spreadsheet.  When data was inputted on the Transactions sheet (pictured below), the fields in Summary and Daily Summary sheets would automatically update themselves. Rules were set on key cells such as whether an order was over $150, or if it was from an existing customer. Great for a first iteration of a database-dashboard-customer service-financial-tracker. When the first order came in, I copied down all the information from the PayPal notification into the Transactions sheet, wrote a reply to the buyer thanking him for the order, and noted that I had sent him the email and filled the order.

Screenshot: Running on Google Spreadsheets. Some columns hidden for privacy reasons.

Very quickly, more orders started coming in. I continued to use the Google spreadsheet since it was serving its purpose; my time was best spent on other areas of the project that had higher impact.

I had launched this project right before my week-long trip to Hawaii. Due to jet lag,  I would wake up at 3am Hawaiian time to a slew of orders and emails. It was fun to see people finding value and to fill their orders. But, tracking everything through Google spreadsheets was taking 1.5 hours daily — and I was on my vacation! With my other projects, I wasn’t able to keep up with new orders in a timely manner, and this violated the #1 rule — create very happy customers. I was quickly becoming the bottleneck in the system.

Automation

Screenshot: From my Twitter @Wayne

When I got back to Boston, I knew that I had to solve this manual tracking issue, so I decided to invest a night to automate as much as I could. There’s nothing like the satisfaction and concentration you get from coding. I spun up a new Rackspace cloud server, installed everything necessary for the LAMP stack (Linux, Apache, MySQL, PHP), and began. At this time, I really just wanted to solve as many problems as I could with the least amount of effort. I first modeled out a relational database schematic, and then created a simple 16-line logic spec on what the software will need to do to address 80% of my pain. I read up PayPal’s developer documentation. I then implemented the database and created the first version of the script. It essentially grabbed the PayPal IPN information (Instant Payment Notification), stored it in the database, filled the order, and shot out an email confirmation to the buyer. The script ended up to be about 400 lines.

Here is the actual note I wrote before a single line of code was written:

On IPN:
- verify paypal order is valid
- grab buyer and order data
- check to see if the buyer is already in the database (query customers table)
-- if no:
--- add buyer data to customers table
-- then:
--- query customers table and store id into $customerid
--- add username with $customerid to user table to quickly look up
--- query user table on customerid and user name pair for userpairid
--- add order info with $customerid to orders table
--- parse and add paypal fee info to costs table
--- query orders for orderid
- place order with supplier
-- add supplier costs to costs table, include orderid, userid
- send confirmation email to user

Once I built this, within minutes an order came in. I manually checked the database and confirmed everything was working. It was — great!  Shortly after, orders kept coming in and my system continued to do the work that I used to spend 1.5 hours a day managing. This was great! I also noticed an immediate up tick in orders (and revenue) – I had successfully removed myself as the bottleneck.

Marketing and Financials

Both marketing and financials are in the same section because they are so closely tied together. I’ve seen many businesses/projects fail because they look at both separately, or worst, looks at only one. This results in unfocused initiatives. Either 1) you are not spending enough on marketing because you are just looking at the financials and see it as a cost that needs to be trimmed, or 2) you are spending on marketing but not in the right places at the right prices. If you fall in either category, you will enter a death spiral since each is not sustainable. Looking at both is essential — it influences from how you price your product to deciding what to focus on next to increase profitability.

Initially, in the Google spreadsheets, one of the sheets tracked the expenses on a daily basis with the revenue – this showed me whether the project made or lost money that day. I also tracked the number of orders, quantity ordered, and how many new users I got.

Screenshot: Daily Summary

After I started building and automating as much as I could, I wanted better financial reporting. It was important to me to separate new users and their orders from existing users and their orders, but doing it manually in Google spreadsheets was taking way too much time. I had to build it into the system to do it automatically.

This was done with a simple query that matched the user’s creation date with the order date. If it matched, that was a new user – the user was created the same date as the order.

Using PHP, looping through each day and storing the data in arrays for later usage did the trick. For the curious, here’s the simple snippet:

                /******************************/
                /********* NEW USERS **********/
                /******************************/

                // tally orders from new users
                $startdate = '2010-12-24';
                while (strtotime($startdate) <= strtotime("today")) {
                    $query = sprintf("
                        SELECT
                            count(*) AS 'newusers',
                            SUM(paid) AS 'paid',
                            SUM(fee) AS 'fee',
                            SUM(net) AS 'net'
                        FROM
                            orders, users
                        WHERE
                            DATE(orders.date) = DATE(users.created)
                        AND
                            orders.userid=users.id
                        AND
                            DATE(orders.date)='%s'
                        ",
                            mysql_real_escape_string($startdate));
                    $result = mysql_query($query);
                    while ($row = mysql_fetch_assoc($result)) {
                        $daily_newrevenue[$startdate] = $row['paid']; // revenue from new users
                        $daily_newfee[$startdate] = $row['fee']; // new user paypal fees
                        // overall total
                        $total['newfee'] = $total['newfee'] + $row['fee'];
                        $total['newrevenue'] = $total['newrevenue'] + $row['paid'];
                    }
                    $startdate = date("Y-m-d", strtotime("+1 day", strtotime($startdate)));
                    mysql_free_result($result);
                }

Then I took the costs for each day and deducted it. This left me with the information I was looking for:

  • Marketing spend
  • New users
  • Revenue produced immediately

Let’s take a look at just two days from the new automated non-Google spreadsheets system:

Screenshot: Revenue from just new users

Screenshot: Return Users

Screenshot: Total

  • With about $250 in marketing, the system generated 8-13 users on each day, ranging from $403 to $909 in revenue.
  • Combined with the revenue from orders from existing users, the range increases from $738.00 to $1,211.00 in revenue.

Now, the system breaks it down on a per-user basis using simple math:

Screenshot: Customer Acquisition Data

Screenshot: Return User Value

Screenshot: Average User Value

  • Customer acquisition: $36 to get each new user. Expensive, but within sustainable expectations.
  • Each user creates a loss of $3 dollars initially. Again, this is expected and is OK.
  • Profit for each return user is $40.18. So, we take a loss on each new user initially but make up for it on return orders.
  • The ARPU (Average Revenue Per User) is about $61, with $14 in profit, at 23% profit margin. This gives me a good starting point to work from as now the goal is to decrease customer acquisition costs from $36 per new user downwards while also increasing the profit margin.

So, what’s next?

The system has since evolved to be completely automated (and the code base has expanded by thousands of lines). I don’t need to spend time manually to update a Google spreadsheet anymore. I gained the 1.5 hours per day back, and can use that towards making customers happy. And customers are happy. I can also use the time to look more deeply into the reports. In the next week or so, I expect the costs to be driven way down as they get further optimized. This should increase the profit margins to 50-60%. I’ve already seen improvements on the efforts I’ve made.

Why is knowing all this data helpful? I could write a whole separate blog post on that. To give one example: If a customer makes an unreasonable complaint, I become stuck between violating objective #1 (creating happy customers) and objective #2 (generating revenue and profit). I have a heavy bias towards #1, but with the data, it becomes clearer.  It will be easier to give him another free product at a cost to me of $15, than it is to lose him, since new users cost $36. Without this data, and objectivity, it would be difficult to make these types of decisions.

Since the system has been decently optimized to produce positive results financially, I’ve increased the marketing budget from $250/day to $1,000/day. The system is still running off the interface that I created initially in 3 hours. Even with that rough draft launch, the revenue remains steady and solid. I’ve since worked with a designer to give it a professional look and better user experience. Based on initial testing, it has a significant improvement on the conversion rate. This redesign, combined with the increase in marketing, should result in a significant increase in users, orders, and profits. Along with the effort to reduce marketing waste, dramatic results are expected in the next few weeks.

At the point in which marketing is sufficiently optimized, it’s then time to look at vendor costs. There are many options there, including switching vendors, or actually replicating the vendor’s systems and recouping the 35% they gobble up of every dollar. This is a daunting task, but logically comes down to this: if the cost of replicating (and therefore replacing) the vendor is significantly lower than what this project is paying out to the vendor, then it makes sense to pursue it. At the current, unoptimized, state, this project pays out roughly $400 daily to the vendor. On a yearly basis, that comes out to $146,000. Assuming that I am right and revenue will triple in the next couple weeks, that’s $1,200 per day or $438,000 per year.

While these numbers pale in comparison to my last full-blown startup, I’m very happy with the results when looking at it from the lens of a side project.

Thanks to Roy Rodenstein (Going.com/AOL), Jason Baptiste (OnSwipe), Scott Kirsner (Boston Globe), Mark Bao (Threewords.me), Xi Chen (Dana Farber), and Jason Evanish (Greenhorn Connect) for reviewing drafts and giving feedback.

Enjoyed this post? Leave a comment below and Follow me on Twitter
  • Rabie Youssef

    Thumbs Up man and all respect

  • emovon kennedy

    great wayne,well is just that i dont have a project yet.
    e-mail  emovoninc@gmail:disqus .com

  • EW

    Wow, this reminds me of the article of the mom who made 5k a day on Google as a part time job. Great article.

  • Pingback: Knowing When Your Baby is Ugly | WayneChang.com

  • Pingback: Jeff Barr’s Blog » Links for Thursday, January 27, 2011

  • http://twitter.com/tydanco Ty Danco

    If this was a picture on threewords.me, .I’d say simple, efficient, awesome

  • JC

    Hey Wayne, I sent you a contact message through you website. Did you get it?

  • Jordan

    Wayne,

    Do you have any recommendations for good books to help a new PHP developer? After learning basic HTML and CSS at a local community college, I downloaded WAMP and have been building small web apps in PHP ever since. Any advice for furthering my PHP base?

    • http://www.facebook.com/profile.php?id=503942608 Daniel Yen-Chung Chen

      lynda.com has some good PHP video tutorials.

  • http://twitter.com/soheil33 Soheil

    well done. i’m just curious how you managed to get so much traffic to your website so quickly?

  • http://staffpoll.com StaffPoll

    Wayne, what project you told exactly?

  • http://twitter.com/adam_conrad Adam Conrad

    Wow Wayne, way to represent Boston! I’m going to have to hold onto this post…it’s a lot to digest in one sitting.

  • Jesse White

    Good post Wayne. I found it both informative and motivating. I understand why you would not want to talk about the product in this context. But would it really matter? Maybe, maybe not. But keep up the good work. I look forward to reading more from you.

    oh, and haters rev up your engines.

    jessewhite.net

    • http://www.waynechang.com Wayne Chang

      Thanks Jesse!

  • Pingback: Tweets that mention Building a Sustaintable Side Project | WayneChang.com -- Topsy.com

  • Rudiger

    What is the product/service that you’re selling?