As I’ve mentioned in my last posting (which was so long, you’re probably still reading it,) a key to both SEO and keeping users coming back for more is having lots of content that people are interested in. After talking one on one with some friends who were excited about the concept of the site, yet didn’t actually use the site, this priority was validated as the single item which needed the most immediate attention.
KitchenPC will most likely iterate and become one of many things depending on the protracted and painful process of market validation, but of all things what is certain is that as long as the mission of KitchenPC is to be a recipe website, having lots of recipes is kinda important. I’m also placing a huge bet that a fully normalized and relational representation of recipes is not only something that hasn’t been successfully done before, but is something that if done correctly, can unlock both features and revenue models that are not possible with traditional recipe websites.
I’ve determined three possible ways to get content on one’s site. I’ll discuss the pros and cons of each way, and what I’ve learned from trying.
Crowd Sourcing – Users will just enter content, right?
Yea, right. Crowd Sourcing is the technique that led to the success of Internet megaliths such as IMDB and Wikipedia, however this is a strategy that is, in my opinion, only applicable to maintaining momentum once you have it. In other words, once (and only once) you have a massive amount of content that could draw a multi-million eyeball user base, could crowd sourcing be used to achieve consistant, reliable and up to date data. There have been many studies on the “Wiki” phenomenon, which hypothesizes that when you allow a crowd to maintain a large set of data which can be modified by anyone, the “good” data will win out against the “bad” data. I’m applying this strategy to my own website, allowing anyone to edit any recipe. However, with that said, when a website is in its infancy, crowd sourcing is most likely not a viable approach for generating initial user content. People don’t just magically appear to go do work for you, however they love to be part of a larger cause where their work will be seen by millions. If KitchenPC takes off, I think the “quality” of my recipes will improve due to crowd sourced efforts, however from what I’ve seen so far, almost no one has decided to enter a recipe voluntarily on the website. It could be that they don’t do this because it’s a complete pain in the ass right now, but that’s a subject for another post.
Just pay people!
This is a great approach if you have deep pockets or have significant funding. I’m sure if I had a $50,000 angel investment, I could hire a team of skilled workers to transcribe recipes by the thousands, maintain the ingredient database, and manufacture a large database of awesome recipes. However, I have a pretty limited budget as I’m boot strapping this company from my savings account.
My initial approach to doing this was a very naive one. I used the website getacoder.com to post a contract for a single data entry person to type in 10,000 recipes. For those familiar with the site, the majority of bidders are from developing countries and will work for extremely cheap (by U.S. standards.) However, on this particular site I’ve found most bidders just copy and paste the same canned responses into bids, don’t really investigate the project in detail, and underbid just to get their foot in the door. You’re lucky to get someone to even start on the project, let alone finish. I learned pretty quickly I had to break up the project into smaller amounts of work; such as 1,000 recipes. Unfortunately, the bids for 1,000 recipes are not 1/10th of the price of 10,000 recipes. They’re actually about the same. I hired about five people to enter 1,000 recipes each, and three of them never started or responded to any emails once I approved their bids. One of them entered around 290 and then quit. The other one was up to around 480 after three months of working. She would disappear for days at a time and then get back to work. Right now, I haven’t heard from her in weeks after sending several emails.
Another frustrating thing about getacoder.com is you have to put the money into an escrow account immediately, and when the coder fails to deliver, getting your money back can take weeks or months. I’ve found this company to be somewhat shady and unpleasant to deal with, and several people consider the company a giant fraud.
Recently, I’ve moved my outsourcing efforts to vWorker.com which is so far proving to be much better. Their site is faster and more responsive with a nicer UI and better tools. The feature that really sold me is the ability to accept multiple bidders on a single project. I posted a project to enter 1,000 recipes, and accepted my favorite 20 bidders, which “spawned” 20 new projects automatically that I can manage and escrow separately. Since my goal is to get 10,000 recipes on the site within the near future, I decided hiring 20 workers would be a good initial number to try. This requires thousands of dollars in escrowed cash, but I fully expect to get most of that money back as most workers will not finish this task.
Out of the 20 workers, five quit within the first few days. vWorker allows workers to quit within 24 hours and not suffer a bad review or have to go through mediation. Four workers I’ve escrowed money for, but after over a week have not responded, done any work, or even created accounts on KitchenPC. Two workers have created an account, but have entered zero recipes. I believe one of those two has been trying to enter recipes, but insists on pasting in ingredients thus all his recipes end up in the “manual approval” queue and not published on the site. Nine of the twenty are indeed entering recipes, which is far better than I had predicted. The top worker has already entered 203, which is fantastic! The other workers have entered 88, 69, 40, 37, 21, 17, 7 and 7. Luckily, there’s about five of these workers who I think are doing great work, enter accurate recipes, and are even submitting pictures for their recipes. I’m fairly confident that at least five of these workers will finish their 1,000 recipe requirement, and hopefully some will agree to enter an additional 1,000. I’ve found most of these people really want to do good work, and will learn if you spend the time to correct their mistakes and coach them. However, doing this has been my full time job for the last several days!
I’ve been trying a few motivational techniques as well to inspire these workers to do great work. First, I email the entire group daily and post the current scores. This allows people to see where they place in the group, and they get excited if they’re near the top. If one worker has only posted a couple recipes and someone else has posted dozens, they feel embarrassed and will work extra hard that night.
vWorker also allows me to offer “instant bonuses”, which is an amount of cash that is immediately placed in the worker’s account. During the first few days, I selected one worker who was doing a particularly amazing job and gave him an extra $50 bucks as a bonus, and congratulated him in the daily score email so that others would learn of his accomplishment and the reward.
A couple days ago, I decided to hold a contest to see who could enter the best “paella” recipe (to appease my friend who complained about the lack of this Spanish dish on my site) offering the winner a $10 bonus. Over 20 paella recipes have already been submitted, most with pictures and very carefully entered methods. I plan to hold a few more of these “contests” so that I can fill in recipes for missing tags and try to round out the database where I see various cuisines under represented.
Automated Data Entry
The third and final approach for content generation is to automatically import it from another source, or become a portal to existing content on the Internet while adding value through aggregation. There’s a ton of recipe sites that already do this, and simple consolidate recipes from other sources on the Internet.
I’ve worked thus far under the opinion that automated data entry is impossible. Importing recipes that simply have to be human readable would be incredibly easy, but KitchenPC has to index raw metadata allowing it to understand the inner workings of the recipe and how it relates to ingredients the user has to shop for, various pantry amounts, and other recipes that use similar ingredients. I believe fully automated parsing of recipes is technically possible, but doing this accurately is not something I’ve been able to accomplish yet or probably will be able to for years.
For these reasons, I’ve previously dismissed this idea as a viable approach to initial content generation. However, after months of frustration getting recipes manually entered and still only having barely over a thousand recipes, I’ve decided that data entry automation is worth checking into more. I’ve decided a compromise could be made, and maybe I can partially automate the importing of recipes while isolating out just the part that computers can’t do.
The first thing I did was obtain a collection of about 8,000 recipes in XML format. I chose this set of recipes since it was already partially normalized. The amounts and units were in different XML tags and could be extracted easily. However, the ingredient name and form are still highly variable, such as “packed brown sugar” or “fillet of salmon” or “your favorite fruit”. The core of the problem would be mapping the ingredient descriptions to valid KitchenPC ingredient entities.
I created a list of the distinct ingredients across the 8,000 recipes, ignoring things like spacing and case, which resulted in about 12,000 unique ingredients across the database. I uploaded this data to Amazon Mechanical Turk, which is a website that allows you to create small jobs for humans to do repetitively. This allowed me to get thousands of humans to map these ingredients to a list of “known KitchenPC ingredients” and get somewhat accurate results.
I decided to pay 3 cents per match, which the average human would take about 40 seconds to do each. Hundreds of people worked on this problem overnight, and the set was fully matched in around 15 hours. The results, however, were incredibly disappointing.
The root of the problem is people do not have the interest of data quality in mind when the more matches they do, the more money they get. While there were thousands of perfect matches, the dataset was literred with randomized answers. For example, “chicken breasts” would get matched to “Baby Ruth Candy Bar”. Several hundred ingredients got matched to Cinnamon Toast Crunch cereal. We found two workers who matched over 1,000 items each to the first item on the list, which leads me to believe that people have written automated scripts that accept this jobs and submit random answers. Even those who tried would often be lazy, matching things like “white rice” to “rice vinegar” as they’d just search for the first match with the main word.
I cringed at the thought of weeding through 12,000 results by hand to remove the bogus entries, and was about to chalk it up to experience and just pay everyone anyway ($400 out the window!) The thought of paying all these idiots that just wanted to game the system for a quick buck really made me ill, but the idea of bulk rejecting every answer would be unfair to the majority of workers, who did put in valid answers. There had to be a way to somehow clean up this data set using statistics and assumptions about human behavior; I really wish I had Steven Levitt on speed-dial, he’d have loved this type of problem!
Luckily, a friend of mine offered to lend her Excel experience to try to devise a way to sniff out the bad answers using some creative data pivoting and grouping. Mainly, she looked for ingredients that got “picked” more times than usual, and also for users who submitted the most amount of work. Going through about 600 users was considerably easier than going through 12,000 matches. We could look at a single worker, one at a time, and quickly see all their answers and could make a decision within seconds if they were mostly bogus, or that user was actually trying. With each user, we would either bulk reject or bulk approve all their answers at once. My friend spent probably around 4 or 5 hours working on this spreadsheet and emailed the results back to me with the bad answers rejected. I definitely owe her dinner for this one!
I also have to hand it to Mechanical Turk for a pretty awesome user interface. I could download the results as a CSV file, open it with Excel and put x’s in the approve or reject column, and upload the file back to Amazon to process.
The problem with this approach is it’s unfair to workers who did a bad job at matching, but did manage to get a few right answers. Since we paid for all or paid for nothing, this was the compromise we had to make. This did result in me getting several nasty emails from these workers wondering why their results were all rejected.
I’ve learned some valuable lessons experimenting with Mechanical Turk. First, while it’s a good tool, assume around 25% of the results you get from it are going to be completely bogus. One way to work around this is to assign each HIT to two workers, and only accept the HIT if the answer is agreed on by both random parties. This, of course, means you’ll pay twice as much money for the results. Also, since KitchenPC matching is somewhat open to personal opinion (if a recipe called for Apples, I have about five different varieties so I instructed workers to just pick their favorite or most common) so this could severely limit the chances of consensus. Another approach is to “pre-screen” workers by only letting approved workers work on your HITs. One way to pre-screen workers is to issue a test which they must complete successfully before they could work. The test might contain a few “tough” matches, or simply test their culinary knowledge in general. However, this would limit the scope of workers who could work on each batch, thus slowing down the delivery of the results. I had about 600 people work on this set at once and it still took 15 hours. Plus, scammers could still game the system by answering your test and then still bulk submitting bogus answers.
Any way you look at it, the results generated by Mechanical Turk cannot be trusted as an accurate mapping to bulk import thousands of recipes.
However, I believe the results I got from Mechanical Turk (around 9,000 approved mappings) will still be good for building a solution to import recipes easier. My idea is to import each recipe one at a time, however the Turk data will be used to select a “default mapping” for each ingredient. This would save me the time from having to map ingredients for each recipe and search for it in a list, as I would only have to quickly glance at the default choice and make sure it’s right. If it was not right, I would change it and that choice would become the new default mapping. Another approach would be to go through the top 1,000 or so most common ingredients in the set and map them by hand, and then I could bulk import any recipe that used only these “blessed” ingredients. Using this technique, I believe I could import a few hundred recipes per day which is better than nothing.
In Closing…
I’ve learned that no one solution can be applied to these sorts of problems. I think my quest to pull content into the website will be accomplished by a combination of many techniques in parallel, each with its own strengths and weaknesses. I’m also not hugely worried about data quality, as I’m taking the approach that quantity is actually better than quality in this particular case. Quality can be improved over time through editing of each recipe, and the recipes that are the most accurate and complete will “bubble” to the top of search results with higher ratings.
AllRecipes has several hundred thousand recipes, and most likely they have their fair share of total crap recipes too. However, you never see them because they’re buried down on page 47 of your search results.
Hopefully, my experiences will help someone who’s also looking to generate initial content on their site. Cheers!
A couple weeks ago, I blogged about my commitments and envisioned next steps for KitchenPC. I thought I’d write up a short progress report and detail the road traveled so far, and shed some light on the insights I’ve developed along the way. I’m hoping to share my experiences not only to update my own followers, but also provide a realistic baseline of expectations in a world where the media distorts realism and manufactures this false notion that every startup we’ve ever heard of has been an overnight success. This simply doesn’t happen; more often than not, launching a consumer product is more analogous to lining up two turtles on a line, firing off a starter gun and shouting “GO!”
Which leads me to my first point.
Getting 1,000 Users Is Tough!
With the six-billion+ people that use the Internet, and even the tens of millions of people who frequent cooking sites, it seems like it should be pretty easy to wrangle 1,000 users into at least signing up for a new website. I tried, on purpose, not to overdo it (as I explained my reasoning before,) not wanting to blow my marketing budget and having floods of users sign up, find out the product is a total miss, and never coming back again. Yet, still getting that initial set of a thousand early adopters to model feedback off of is proving rather challenging. I’m trying my very hardest to remain optimistic and capitalizing on every chance I get to gain insight and experience.
First, the initial word got out about KitchenPC through my own Facebook page. This meant the first few signups were friends of mine, or those following KitchenPC through my own Facebook profile (for example, ex-coworkers.) This happened the evening of Wednesday, October 6th and resulted in 9 signups on Wednesday and 14 signups the next day. That Saturday is when I sent out email to the 290 or so people who took the survey, yet Saturday only peaked at an additional 14 signups. Monday was a big day, as the press release was made public. This generated quite a bit of blog and Twitter buzz, however no real media attention. All of the media mentions about KitchenPC were simply a copy of the press release that I wrote myself, no original content was created and I’ve still yet to be contacted by any media outlet that wants to write an article about the site. However, links to the press release were mentioned in dozens of Twitter feeds, some of them with well over 5,000 followers. Though there were several hits on the site, Monday only resulted in 32 new user signups. Since the press release cost $500, that’s over $15 bucks per user! Now I don’t feel quite so bad about spending a dollar per click-through to advertise the survey on Facebook.
Since then, I’ve done no “real” advertising, but a slow trickle of new users has been constant since. There’s been a few spikes here and there, but I’ve been averaging about 5 new users per day. Since I haven’t really been active about promoting the site, I will assume these users find out about the site through word of mouth or running across a random mention of the site online. According to Google Analytics, 63% of users logon to my site by directly typing in the URL. Another 32% reach the site through a referring site. Who are the big referrers? Seattle20.com is at the top, with 50 referrals. One can argue these users probably are interested in checking out the site from an entrepreneur point of view, not to become regular users. Facebook.com is responsible for 18. Third place (at 13), surprisingly enough, is some site called gourmetretailer.com. What’s fascinating about this site is the average user referred by this site will spend 6 minutes and 41 seconds on my site. The average direct user spends only 4 minutes, average seattle20.com user spends 2:41 and the average Facebook user spends barely over a minute. So, apparently users on The Gourmet Retailer (who simply republished my press release and nothing else) really dig my site. This seems like a prime spot to advertise on, however I’ve already checked in to their banner ad prices and they’re several thousand dollars. Not quite ready for that yet. Though I will admit that’s a much better deal than a full page ad in a popular cooking magazine, which go for well over $100,000 for a single issue!
Ok, so as it stands today as I write this blog, I’ve collected 177 user signups (which includes the early alpha users, which I believe were about 20 or so.) Probably not too shabby, though it’s still a long ways off from my desired 1,000. So how do these people behave? Only 51 of these users have ever come back after the initial logon. Thus, the majority of the users check out the site, feign minimal interest, and then don’t come back. There’s only been 10 users (not including myself) who have signed up and logged back on at least 4 times. However, those 4 times seem to have been over the first few days of creating an account, as none of these “active users” have logged on recently.
Over the past 10 days, I have recorded an average of 12.2 logons per day.
Let’s take a look at how people are actually using the site. This is a bit more interesting, as it can provide evidence supporting whether or not I’ve built any sort of useful product, even if it’s not yet well known.
First, the shopping list seems very popular. 29 users currently have an active shopping list on the site. To me this shows people are indeed interested in finding a couple recipes and generating a shopping list based on what they need to buy. At the very least, the feature is easy to use and discoverable.
How many people use the calendar? This is key, as the entire success of the site hinges on the desire for people to plan meals using a calendar. Right now, 22 users have at least one recipe scheduled on their calendar. Out of the 51 users who have ever come back post signup, I don’t think this is too shabby. The site is indeed being used for meal planning!
The Pantry feature is a surprising one. Unlike the shopping list and calendar which provide easy and immediate access from most any page, the pantry is a feature you have to actually go navigate to a separate page to find, and then manually enter ingredients and amounts. However, 20 people have gone through this effort and are using the site to store, on average, 4.3 items in their pantry. I’m pleased by this stat, as a big part of me thought the pantry would be completely useless. I guess there’s a few people who don’t mind managing their inventory on a website. However, we’ll see if this trend starts to “scale.”
The cookbook is another popular feature. 29 users on the site have at least one item added to their cookbook, and 9 users have more than one. This not only indicates a desire to manage personal collections of recipes, it means these users have the intention of returning to the site to access these recipes.
How about my clever little ingredient blacklist feature? Well, it’s a good thing I didn’t spend too much time on this feature as only one user currently has anything added to their blacklist, and that’s a friend of mine who I had talked about the feature with. Absolutely no one has discovered this feature on their own and decided to use it. This might mean the feature is completely useless, or it could also mean that the feature is too buried to be discoverable. Once I have my first thousand users, it would be interested to survey them asking questions like “Do you know about the blacklist feature and how it works” and “Is this a feature you would find useful?”
I also have 9 users who have commented on at least one recipe, which isn’t too bad. It means they’ve either tried out the recipe and decided to share their feedback, or they at least find the recipe interesting enough to warrant the time to commentate on.
Only 16 people have rated recipes, which I find somewhat depressing. Not only is rating recipes made super easy by the recipe viewer, but this means every other user hasn’t received the benefits of a single recipe rating, which enable features like automatic recipe suggestions on the home page and more accurate meal planner results. I think recipe ratings will tend to come over time, as more users use the site to find recipes, cook those recipes, and come back to add comments and rate them.
While these numbers are interesting, I just don’t feel with the number of users I’ve collected so far, that they can really be used to prove or disprove any trend in user behavior, or validate development efforts that will shape the future of KitchenPC.
Ok, so how do I get 1,000 users really?
It’s been nearly 3 weeks and I’m not even close to my goal of 1,000 initial users, which I feel is a required number of early adopters to justify any decisions regarding the next steps of KitchenPC. Development and further coding on the site is literally on hold until this happens. The press release had almost zero effect, emailing everyone I knew didn’t help much, so seriously, what does it take to get 1,000 strangers to use your site? (The was not a rhetorical question, if you know the answer please let me know!)
I’ve employed three strategies, that I’m hoping when combined will help me achieve this goal.
First, I hired a marketing company. Last week, I signed a deal with Jumpstart Marketing to generate some initial publicity for the site. Under this contract, they’ll create a video demonstrating the site features and enticing users to sign up. The video will be published on a newly created KitchenPC YouTube channel, and they’ve guaranteed a minmum of 3,500 YouTube channel subscribers. With any luck, a good chunk of this YouTube traffic will mosey on over to KitchenPC.com to check out the actual product.
Since these guys have a strong background in advertising and customer demographics, hopefully they’ll be able to cater to the types of users I want on my site. Worst case, I’ll at least have a demo video I can put up on the landing page.
Second, I spent last weekend working heavily on SEO. For those non-technical readers, SEO stands for “Search Engine Optimization” and is webmaster vernacular for “getting your site to show up in search results.” With only around 5% of users coming into my site through a search engine, this is definitely an area marked for immediate improvement.
My initial thoughts on KitchenPC was that since I was a private site that required a user account context to really be useful, SEO was not much of a priority. In other words, I did not envision KitchenPC simply being “a huge recipe database” like Epicurious or AllRecipes, so I didn’t really want to show up when people Google for “chocolate cake.” However, seeing how difficult it is to generate initial traction in a consumer market, I’m revisiting that assumption and have come to a different conclusion (a bunch of my friends reading this are now saying, “See? I told you so.” – I am the first to admit when I am wrong.
I did several things to greatly improve SEO. First, I created “permalinks” to all the recipes on the site. The URL for any recipe in particular will be a more human readable description, such as /Recipes/Chocolate_Cake.html or some such. Google will assume a search result is more relevant if the URL contains words the user searched for. In other words, searching for “chocolate cake” will more likely turn up Chocoalte_Cake.html than Recipe.html?id=123.
Next, I added <meta> tags in the recipe peramlink pages for keywords and descriptions. The description (which is basically the recipe description) will be directly displayed on the search results page rather than some auto-generated description based on relevant text parsed from the page content. Users will see the recipe title and description right on Google without having to click the link. The keywords are somewhat dynamic as well. Every recipe will have a fixed set of keywords, such as kitchenpc, cooking, recipes, etc. I also add a keyword for each “tag” on the recipe, such as “bread” or “breakfast”. This should make my site come up much more often when users search for things such as “dessert recipes.” Next, I created a robots.txt and siteindex.xml file. The site index file will allow search engines to crawl much more deeply into my site, and index all 1,000+ recipes without needing to logon to the site or find these recipes by manually crawling (which would be impossible.) This means a user who searches for “chocolate cake” might get a result pointing to a chocolate cake recipe on my site, even if they don’t search for KitchenPC. This alone should drive up that 5% considerably, and hopefully some of this new traffic will translate to new user signups, especially if I rework the recipe viewer page to entice users to signup (great opportunity for some A/B testing!)
The third thing I’ve done to generate new traffic is employ some basic Facebook viral advertising. I was scared of doing this while the product was in such early stages, but I decided spending some minimal investment in this area can pay off now. The main feature is it’s now possible to “Like” a recipe. Both the non-logged-in permalink version of the recipe viewer as well as the logged in recipe viewer popup panel will now contain a standard Facebook “Like” button. This allows users to post a link to the recipe on their own Facebook page, which promotes a recipe as well as drives new traffic into the site. Facebook posts are viral in nature, as a friend might check out the recipe and decide they “Like” it as well, spreading the message another level deep on the Facebook social graph (6 likes, and it could be seen by Kevin Bacon!)
Why don’t users come back?
I’ll be the first to admit that my bounce rate (the percentage of users who go to kitchenpc.com, but then leave without signing up) is way too high, and the user attrition rate is also way too high. Even at this early stage, it’s pretty obvious that KitchenPC is not really providing any value to the average consumer. Even as a free site, a very small percentage of users come back and I’ve yet to see anyone turn into what I would call a regular user. I don’t believe it’s too soon to start looking into what I’m doing wrong.
The first step I took was to integrate into the site a fantastic product called Uservoice. Uservoice allows people to suggest ideas for features or provide feedback, and then other users can “vote up” those ideas, so the most popular ideas show up at the top of the list. The interface is well done, and it’s easy for users to find the mechanism, logon, and vote. They’re a “freemium” service which means they offer a free basic plan and offer paid plans with more features. For now, I’m just using the free version until I get more users. I entered 10 ideas myself, and I’ve had 2 other ideas posted by other users so far. Though I haven’t seen too many people use this tool, I suspect it will grow in popularity as my user base increases. The problem with that, though, is I won’t be able to use this tool as a vehicle to attracting an initial user base. This means, for now, I have to use other techniques to ascertain why the site isn’t very useful.
The best idea I’ve had so far is to just do individual case studies. My friends like me, they want to see me succeed, and they love the idea of KitchenPC. Most people I’ve pitched the idea to say “That’s awesome! I would totally use that!” – the only problem is… they don’t use it. None of my friends are active users, and most have only logged on once. Insulting? Not really. I simply haven’t built a product that they want to use.
So, I’ve posed the question (more politely, but I’ll be blunt for the sake of blogging) – “Hey <insert friend’s name> – You seem excited about KitchenPC and you were receptive to the idea, however you don’t use it. I’ve checked and you’ve only logged in once. What can I do to make you use the site?”
The response is incontrovertibly unanimous. People actually don’t give a rat’s ass about features, the meal planner I spent so many long nights working on, the pantry feature, super accurate shopping lists, etc. While they have a few little ideas here and there on that stuff, it comes down to one plain and simple fact. They’re looking for a recipe, my site doesn’t have it, they leave. With only around 1,000 recipes on the site, it’s simply not useful as a place to go to for recipes, which is the primary thing people want out of the site. One of my friends IM’ed me the other day and said, “I was looking for a paella recipe and your site has none! How do you expect me to use your site when you don’t even have a single paella recipe, I won’t even bother telling my other friends about your site yet.” The Uservoice data also supports the conclusion: I need to add way more recipes, or I’m dead.
There’s a small problem with this. Everything I’ve tried to get more recipes onto the site has failed! Every other website has the advantage of having a very non-normalized way of storing recipes, allowing them to use technologies like bulk-importing massive databases or screen scrapping other recipe websites, or just turning into massive portals of recipe websites, acting like recipe search engines. However, since I went the route of flawless data integrity (a route I’m not yet willing to admit was the wrong decision), I need to know the exact ingredient (and match it to an entry in my ingredient database) as well as the form the ingredient is used in. This makes bulk-import all but impossible.
I’ve tried hiring people to enter recipes. Out of the 10 or so people I’ve hired, 8 of them just never started, 1 of them entered around 280 and quit, and the other shows up less and less by the day. She’s entered a total of 481 so far, however she’s been at it for almost 3 months and her estimate was 10 days to enter 1,000 recipes. Suffice to say, she isn’t meeting expectations. I could hire 50 of her and perhaps eventually get somewhere, but I’d have to hire 500 people to maybe have a chance of 50 actually doing any work, and plus managing 50 data enterers would be a full time job in itself.
Crowd sourcing the effort might someday be an option, but for now there’s no chicken to lay that egg. Users won’t go to the site because there’s no recipes, thus there’s no users to enter recipes. Plus, so far I’ve yet to see a single person (except for my previous alpha testers) enter a single recipe during beta. I’d need 100,000 users to have 1,000 users entering any recipes. So no, that’s no good. People want recipes but they won’t enter them and you can’t pay them to be entered. That leaves one option – find a way to bulk import recipes even though it’s impossible. At Microsoft, I was often asked to do impossible things. It’s kinda fun.
Turns out finding the raw recipe data is pretty easy. I recently came across this site which sells a database of over 41,000 recipes in SQL or Excel format for cheap, with publishing rights assuring I can stay out of any legal issues. The problem is their schema is the exact antithesis of all that is great about KitchenPC. They have a single table (one row per recipe), and all the ingredients for the recipe are literally stored in a single text field, with each usage delimited by a carriage return. Talk about a parsing nightmare! I’d not only have to parse out the amounts and units, I’d have to figure out the ingredient as well as the form it’s used in. There must literally be hundreds of thousands of distinct ingredient references to accurately parse, with minimal room for error. On a side note, I emailed the company asking if they could provide data conversion into my schema. They replied back saying they could accomodate this, but it would be a manual data entry job which they bill out at $24 USD per hour. For kicks, I asked them for an estimated number of hours, to which they never replied. I think it would take months, and they’d probably contract out the work to workers in foreign countries making $4-$6/hr.
A better idea I’ve come across is a file format used by MasterCook. MasterCook is a fairly popular brand of recipe software, and they have an XML based format for storing recipes. It’s fairly easy to understand and parse, and ingredient names, amounts, units, etc are stored separately making parsing much easier. I would still have to figure out which ingredients are used in which forms, but I think this sort of natural language processing is at least in the realm of realistic. It also just happens that I have a CD with around 8,000 recipes in this format. This seems like a great place to start.
I don’t believe I’ll be able to import all 8,000 recipes, as many contain schema features that I just don’t yet support. In the MasterCook format, recipes can be “recursive”, for example an ingredient in a recipe can be a reference to the implementation of another recipe. This is a concept I’d love to have in KitchenPC, but it’s a ways off as it leads to issues like circular references and generating massive shopping lists for a single recipe. Luckily, the 8,000 recipes don’t contain too many recursive recipe references, and a fair amount of the ones that do, I can substitute known KitchenPC ingredients for this recipes.
I think the best I’ll be able to hope for is to partially automate this task, but what I’m hoping is to design some software that can “learn” as I manually process these recipes and start to catch on and match ingredients and forms on its own. I’ve been working the past few days on a prototype for what this software would be like, but haven’t made a huge amount of progress yet. Besides ingredient parsing, there’s some other problems such as figuring out the “tags” for a given recipe. I’m curious if one could implement a machine learning algorithm that can accurately “guess” what tags a recipe will have based on what ingredients are in that recipe, words used in the title, description, and method, and other various attributes of the recipe. Such an algorithm could be “taught” by looking at the current set of the ~1,000 recipes I have. Definitely an interesting computer science problem, it’s this sort of thing I love about KitchenPC as I was never able to work on these sorts of challenges while at Microsoft.
If this seems like a lot of work to go through to get 8,000 recipes, it probably is. However, there’s an additional benefit for being able to parse recipes using intelligent metaheuristics. This technology could eventually lead to my dream of allowing users to directly paste in entire recipes, upload Word documents, or import a recipe from a URL. KitchenPC will truly take over the Internet, probably gaining sentience and enslaving mankind, if it gets to the point where it can truly read and understand a recipe all by itself. There’s a whole list of companies who would make multi-million dollar offers for a KitchenPC buy-out for that sort of technology alone.
While a lack of recipes, in my opinion, is the primary factor stopping people from visiting the site, looking at the feature design is also important. Even if I had 100,000 recipes, I still don’t compete with AllRecipes and Epicurious (they have way more) unless I nail feature scenarios and get users to “come for the recipes, stay for the meal planning.”
Talking with my friend Steve yesterday morning validated a notion that’s been brewing in my subconscious for a while now. Though I hate to admit it, no one really cares about the meal planner; or even understands what it does. The BuildPlan.html page doesn’t even appear on Google Analytics (though this might be some bug, since MealPlan.html appears quite a bit) and the people I’ve interviewed about the meal planner, Steve included, just don’t really find it useful in the least. The root of the problem is people have this notion that I expect an up to the minute, complete and accurate count of their entire inventory. While people love the idea of the meal planner, and it’s always a hit when I tell a group of people about what it can do at a party, people don’t really think about the front loaded costs associated with its use. I’ve come up with 3 things I can do in the immediate future to make the meal planner less scary.
First, the name “meal planner” confuses every single person I’ve talked to. Some disagree it’s even a planner, as it’s technically more of a “finder.” The first step will be to rename the meal planner to something else. My idea at the moment is call the option “What Can I Make?” This text would appear on the top menu and on the home page, as it instantly convenes exactly what the feature does and why you would want to use it. Meal planner is a bad name because the entire site is a meal planner, this is just a modeling algorithm that figures out “what you can make” based on the criteria you give it.
Second, there’s a lot of friction to even use the thing. When you go into the page, you have to either have a pantry (a concept that scares everyone, as they assume “Well shoot now I have to manage my inventory online?”) or they have to type in ingredients and amounts. If you’re lazy, you just hit the “Go” button and it errors out saying you must enter at least one ingredient. I’m forcing you to do something you don’t want to do, just to use a feature you don’t yet understand the benefits of. The user thinks, “Screw that, I’m not that interested in this anymore.”
I’d like the meal planner tool to be useful, albeit not as useful, to this customer demographic as well. It should do something, anything, without giving it a single piece of data. In other words, the meal planner needs to just “do things” when you click Go. The solution I’m considering is to create a “virtual pantry” for these users. If you go to the meal planner and don’t type in any ingredients at all, it will run the meal planner with the top 10 most commonly used ingredients with average household amounts. This virtual pantry could be dynamically calculated based on database statistics, or more likely for the initial manifestation, hard coded with “common crap everyone has.” What this would give you is an efficient meal plan that uses common ingredients and strives for ingredient overlap without users having to enter a single thing at all. Users would experience a basic meal plan, and hopefully begin to experiment more with the feature, perhaps typing in some of their own items this time.
As for people being scared away by the pantry, I believe there’s a few simple things I can do to make it more clear I seriously don’t expect anyone to use KitchenPC as an inventory manager. On the meal planner, the radio button that says “I have the following ingredients available” should be renamed to something like “Try to use the following ingredients:” The former verbiage conotes a desire for completeness, asking the user “what they have” is interpreted as a complete tally for your inventory. The latter appears more optional and laid back, and the meaning even works with no ingredients at all. Users are more likely to just enter one or two things they have in their fridge, and not feel pressured into typing anything at all so they can see a meal plan in action and see how the feature works first. Another pantry change, an idea proposed by a friend of mine, is to set up each new user with a default pantry. This pantry would contain household staples such as flour, sugar, milk and eggs with common amounts. It would almost be like a default account template, showing the usefulness of the feature. It would also challenge users to go to their pantry when they say, “Hey I don’t have that – how do I change that?” leading them to enter what they actually do have.
Though these things can be done very easily, a bigger change I have planned down the road is to make ingredient amounts (in both the meal planner and the pantry) completely optional. I would like users to be able to enter ingredients for the meal planner, but omit some or all of the amounts if it’s unknown or they simply don’t care. The meal planner would run more like Supercook.com, and simply generate a set that uses as many of these ingredients in any amount as possible. Running the planner is this mode would probably require a slightly modified UI, as the “Selection totals” on the left side would be more of a tally of which of their desired ingredients are in fact being used, and the total required usage. The scoring algorithm for the planner would also have to take this “fuzziness” into account. Either way, this would cater more towards users who are scared off by entering too many numbers and just want to use the feature as quickly as possible. I’m kicking myself for not designing the feature in this way to begin with, as this sort of thing is the same exact mistake we made in Project! I even wrote a whole bloody blog article about how I would learn from Project’s mistakes. Mike, you should know better!
Between getting 1,000 users, finding a way to bulk import recipes, and making minor usability tweaks in the product, my life is pretty swamped at the moment. I also only covered about half the things I wanted to discuss in this post, which is already starting to look like a novel. If you’ve read the whole thing, you must either be a true fan or very bored at work. Thus, I’ll save the other news items (mainly about my search for a business partner) for the next post. See-ya then!
I just got back from CrowdPitch, Funding Universe’s event to allow startups to pitch in front of a live audience and receive feedback from both audience members and a panel of judges. Overall, I had a great time but did not get to stay as long as I wanted. Parking was an issue so I could only find a two-hour spot. I did get to see all the presentations and was able to talk to a couple of the founders and give some in-person feedback. I also got to chat a little bit with Alex Lawrence, one of the founders of Funding Universe, who I hope to be able to keep in touch with. I just sent him a long email about getting traction for KitchenPC, I hope I’ll get back some optimistic feedback from him!
Like the last time I blogged about CrowdPitch, I’ll go over the presenters and share my thoughts on them.
Bada8.com
Bada8 is a company specializing in travel between the United States and China, and also within China. From what I understood, they do everything from arrange tours within the country, setup business travel, arrange for hotels, and basically do anything you’d need if you needed to travel there for any reason, business or pleasure. Apparently, their advantage over other travel agencies is they do more for you, know the locale a lot better, and have business partnerships with various important people.
I think, overall, their company is going somewhere. It’s a huge market and they already have revenue, and I think they’ll end up doing well.
Honestly, I did not like their pitch in the least. The pitch started out very nervous sounding, with pauses for perhaps over five seconds while the presenter looked up at his slide deck. For a company that has been around for almost 3 years, I think they should have their pitch nailed forward and backward by now. The presenter did NOT state the problem up front, which should be within the first 10 seconds of any pitch. He spent probably half the pitch on random facts and numbers that I don’t care about, and were too fast for me to really grok. I was not clear in the least on their business plan, and think they have a long way to go before they’ll convince any VC firm to cough up money for them. They need some serious coaching to organize a slide deck, and to practice their pitch in front of a mirror about 100 times to get it smooth and seamless.
My Score: 2/5
Green Planet Ziplines
Ok so these guys somehow combine zip-line based amusement parks and green environmental stuff. To what extent, I’m not entirely clear. I guess their parks are all carbon neutral and sustainable and stuff. Their idea is to build a zip line park in Port Angeles, which has a cruise ship terminal and is in other ways a great location. The closest zip line park in the area is all the way up in Victoria, BC. They seem to have a great management team with lots of experience in this industry.
To be honest, this pitch didn’t really capture my attention. It’s not a technology company, and thus I would be very surprised if a VC firm would invest in it. It seems like a typical business you’d just go to a bank for. There was some discussion around this in the panel, and the answer seemed to be “We’ve been trying that with no luck, banks have all gone bankrupt or they’re dealing with bad loans.” I got somewhat of a desperate vibe from the pitch, and the whole thing just reminded me of some guy who wants to start an amusement park, has a good plan, but needs money.
I also have to wonder if there’s really any need for franchised zip-line parks. Do people really go out and zipline all the time? Or is it something you do like once or twice in your life while you’re on vacation in some tropical area? I don’t really rate it as an activity you just go out and do, like mini-golf or bowling.
I wish this guy all the luck in the world with his venture, but I’m kinda wondering why CrowdPitch chose him to present to an audience of computer techie people. It sounds a bit mean, and I by no means am saying I don’t like his idea or don’t think his business plan has any merit, I’m just wondering if CrowdPitch is an appropriate platform for him.
My Score: 3/5
Shirts for Greeks
Yes, like many others I thought this said “Shirts for Geeks” as well. I liked these guys quite a bit. Their pitch was excellent, and finally one that started right up front with the problem! They create attire for both fraternities and sororities, such as tshirts, hoodies, jerseys, etc. In order to do that, you have to be licensed to use their trademarks; thus not many companies can do this.
One thing I liked about their pitch was they had some pictures on their slidedeck of some of their items. I think the presenter should have been wearing some, but instead he chose to go the professional route and wear a suit and tie. One thing I liked about their business vision is they hire people to be “in the know” about events and goings-on around campuses. These are their eyes and ears on campus, and gives them a competitive advantage knowing about trends, upcoming events, etc.
They also employ a vertical hierarchy; that is, they design, manufacture, sell and ship everything in house. The other competitors out-source all that stuff. This gives them the ability to handle custom changes or orders for cheaper and deliver a better product. There was some discussion in the panel about whether this is or is not a real advantage, but if it drives down their cost, and they have the numbers to back that, then I like it.
Their business does seem to be getting some traction. They did about $300k in sales the first year, and only sell at University of Washington, and dominate about 20% of that market. They’re looking for $150k in investing to continue to expand.
My Score: 4/5
Viafo
The one sentence pitch for Viafo is, “We make building mobile solutions easy.” This mobile platform company is definitely in a hot market, and will have a lot of competition. From what I got from the presentation, they want to make integration of various mobile services a lot easier by being the “proxy” to broker communications. For example, if I wrote a KitchenPC Mobile App (there’s one in the works of course) and I wanted to allow users to post recipes they plan to make on their Facebook page or Twitter feed, I could tie into the OpenGraph and OAuth APIs and have at it. However, when those APIs change, or something goes wrong, stuff can start to get messy. The idea seems to be that I can instead integrate with their API and just “click” which services I want to post content to. Ideally, they would make this experience work better than integrating directly in with a bunch of different frameworks.
The pitch was very well organized, and the presenter had the unfair advantage of having a British accent (Note to self: Hire a British co-founder.) I understood the problem right away, but he totally lost me on his exact solution. I got to talk with the presenter a bit after and gave him one idea. I think he should make up a fictional app to use as an example, and go over how the architecture would work. What features could this app now have thanks to his solution? My brain, I think, would connect with those sorts of examples a lot better than a bunch of PowerPoint bullet points. He mentioned that he could actually use real-world examples as soon as his current customers launch their products.
His business plan seems to also target enterprise level customers. However, I think he’ll run into some friction getting those customers unless he has some mad sales skills. It seems to me that building on this platform now makes his online services a point of failure for a ton of mobile apps. If his site ever goes down, ever loses data, ever introduces any bug that causes apps to stop working; he’s lost a ton of credibility. He needs to be able to convince his customers that they can “trust” his company to build a scalable solution (handling any amount of trafic they throw his way) and it will be fault tolerant and highly reliable. Luckily, he had a huge list of founders and advisors who have the experience in this industry to perhaps provide this level of credibility. Even with this, I think it’s a hard sell and he might want to go after smaller customers as well.
My Score: 4/5
Wisemuv
Wisemuv, pronounced “Wise Move” is a startup that will help you make decisions fast. I thought this pitch was the best out of the group. He immediately identified the problem, and started to lay out a solution. However, the idea is one I’m unsure of. The deal is, people make all sorts of important decisions all the time. Should I take job offer A or job offer B? Should I move to New York? Whatever the decision is, Wisemov helps you compile various data points to help you make a decision. Interestingly enough, some of those data points can be from within your social network (Like “Phone a Friend” on “Who Wants to be a Millionaire”) You can pull certain contacts to provide personal feedback, or even pull complete strangers for advice as well.
This is definitely an interesting idea, and I plan on checking out the site to see what it’s like. I’m trying to imagine if this sort of thing can really replace “gut instinct” as a decision making tool. Some people make decisions more emotionally, while others (myself included) more logically.
One thing that would have really helped him (which was brought up wisely by the panel) would be a live demonstration. Even if he just had some screen shots of his site demonstrating a typical question, it would go a long way to allow the audience to conceptualize this idea. My brain had a hard time imagining what this site would be like. Until I use it, I have no idea if it would be useful to me at all.
I’m also curious if he has statistics on how many people end up going with the decision route proposed by the site, or if people have already made up their mind and just want some data to confirm their gut feeling. Either way, I think I’ll check out the site and see what the deal is. I think if the implementation is well done, it could be something people use.
His revenue model seemed to be based around the collection of trends and statistics to sell to other companies. I had a similar idea for that sort of revenue model when I thought KitchenPC would make money by tying into online grocers.
My Score: 5/5
My vote?
I gave my money to Wisemuv, mostly because I thought the pitch was the best and I liked the originality of the idea. I don’t necessarily think that this idea is the most likely to succeed, but I decided to make my decision based on the quality of the pitch, which was fantastic.
The winner ended up being Viafo, which was my second choice. I almost split my money between the two, but figured I’d just go with a single choice this time.
Afterwards, I didn’t stick around too long. I was hoping to get a chance to chat with Andy Sack a bit, but he took off immediately (He’s probably busy with that whole TechStars thing) and my parking was about to expire. Overall, this was another fun one and I’m looking forward to the next one. It also gave me an idea of how far I still need to go with KitchenPC. I really have no numbers, no revenue projections, no profit model or anything. I’d love to present, but I think I’d get my butt kicked without these things, so I’ll have to work on getting a bit more traction and then see where I’m at from there. Also, I need to find that perfect, preferably British business partner to stand much of a chance of getting any funding anyway. I think patience is the key at this stage of the game, and luckily I can survive for a bit longer without any funding.
That’s it for now!
At Microsoft, we had these things called “Commitments” that were tied in as part of our review process. The intent was to establish discipline around focusing ones career objectives around common goals and a well thought-out long term career path. There was a single problem with this; no one cared. No, seriously no one cared. The only time anyone thought about the items on their commitments was for the thirty minutes they spent writing them. A year later, you’d look at your commitments (not remembering what you wrote) and laughing about how outdated they were, and how they were aligned to a universe that had almost entirely no likeness with the current reality. There was initially supposed to be a element of transparency between management tiers, allowing those in the lower ranks to get a glimpse of insight into the commitments of their leads and upper managers. However, each time I tried clicking on a manager in the ranks above me, I got an error saying they had no published commitments at this time.
So, with that said, I plan to blog about my commitments.
The difference is these commitments will be actionable and will be the subject of many future blog posts, as they will be revisited and revised over the coming months. Hopefully, these will serve as a roadmap for the success of KitchenPC.
Get 1,000 Beta Users
There are two reasons for not making this “get as many users as I can.” First, that goal wouldn’t be something I could be accountable for and measure success or failure against. True, I don’t have a boss to “judge” my successes or failures, but I think a commitment has to be something you can deliver on and measure real-time progress against. That way, one could see if they need to shift focus away from other things. The other reason is that I actually like the number, and purposely don’t feel the need to go over this for the time being. In other words, effort should be spent getting to this number but no further efforts need be spent going beyond this number.
The reason for this is having a small trial group of users is easy to work with and model statistics around. These will be my original “early adopters” and be sufficient enough to collect meaningful data. What features are popular? Any big bugs that people just gripe non-stop about ? Did I totally screw up on the pantry idea? How many people sign up and never come back? How many recipes does the average user enter? Blah blah blah.
I think attempting to “go viral” right after launch can lead to a colossal failure. The number one rule of viral marketing is don’t do it unless you’re sure your product doesn’t suck! If you’re wrong, then your product sucking will thus be the message transmitted virally.
Collect meaningful data on initial user behaviors
There’s a great video called Startup Metrics for Pirates that I encourage everyone to watch (it’s pretty short.) It really does a good job focusing on what types of data you need to be able to extract from user behaviors to help define the success of your current strategy. I plan on adopting some (if not all) of these strategies to help determine what I’m doing right and where I’m screwing up. I’ve already started collecting some basic statistics on the site, but there’s a whole lot more that needs to be done.
I think the most important piece of data to collect will be what features are people using. For example, from what I can tell so far the calendar feature is quite popular with my regular users. This is awesome news because it means people actually want to meal plan! In fact, this seems to be more popular than any other feature on the site. The common use case, from what I can tell from my statistically insignificant set of users, is to dig up recipes and add them to your calendar. The shopping list also seems to be quite popular. On the other hand, people don’t seem to be using the pantry too much and I’ve still yet to see a single person add anything to their ingredient blacklist. It’s these sorts of trends that allow me to know where to spend effort on, how to priority bugs, etc.
As originally predicted, pretty much no one is adding new recipes. I’m sure this is the case with most every recipe site on the Internet, but I need to know if this is because people just don’t care or if people try to add recipes but the experience is so awful, they leave before they save anything. This leads me to my next career objective.
Ask my top users what they think
I do have a mechanism in place to see who my regular users are, the ones that come back a few times a week at least. What I’d love to do is simply send out an email to all of them asking them for feedback as my early adopters. Maybe I can throw out some incentives as well to anyone who answers. The first manifestation of this commitment (action item if you will, but I rarely pass up the opportunity to use the word “manifestation”) will probably come in the form of a survey. It’ll probably be fairly well designed and targeted towards people I already know like the site and are regular users. It will be geared around trying to figure out what I need to improve and let them voice their ideas.
I also am considering the idea of doing a more “pessimistic” survey that would be sent out to people who signed up and never came back, or logged in a few times and then left for good. This survey would basically say, “Hey we noticed you created an account and checked out the site, but then never came back. This means you had an initial expectation of what KitchenPC should be, however we did not meet that expectation. We want to know why.” In other words, if people found out about KitchenPC and said, “Hey this sounds worth checking out,” then it means I had the chance, at that time, to deliver a product they wanted and would use. Or, in their mind existed a product they thought they used and KitchenPC was not that product. Either way, they ended up deciding what I delivered was not valuable to them. It’s also possible they just like checking out new sites regardless of what they are, but still the element of a lost opportunity still exists at whatever level.
The second mani – err… “action item” will be in the form of a collaborative effort that users can actively participate in. This idea was one that I’ve had for a while, but was more solidified as a “Yes, I must do this” type of item after watching this video of one of the Dropbox founders outlining their path to success. Dropbox implemented this idea in the form of a feature called “Votebox.” The idea is that each user gets ten credits to “spend” on various feature ideas. This allows them to vote on where they think my priorities should be aligned. I want to go one step further and implement a system that allows people to come up with features and add as much detail as they wish, and allow other users to add ideas and “thumbs up” or “thumbs down” various aspects of the design. I’m hoping some sort of platform already exists out there to build on, and I don’t have to implement such a thing completely from scratch.
I have tons of ideas already for the site, however trying to do everything would be impossible. Plus, I might spend weeks on a feature and have it end up like the ingredient blacklist support which has thus far gone either undiscovered or just unused. Suffice to say, I want customers to feel like they’re actively engaged in the future development of KitchenPC, and the product is designed around them. This is another reason to keep my user base small for now, as *snicker* you don’t want too many cooks in the Kitchen[PC].
Iterate based on initial feedback, and then expand the user base
The thing that’s so tempting to do right now is open up Visual Studio, stay up late eating ice cream, and hack out completely badass new features. I already have a bunch of these features already done, they’re just turned off for the beta because I don’t feel they’re ready. However, until I really have a good grasp of the minimal viable product, I have to focus on really delivering a core set of super useful features that people will use on a daily or weekly basis. I think right now, about 90% of my dev efforts need to be spent on solidifying existing features, fixing high priority bugs, and making modifications to how a feature works based on customer feedback and observations.
With that said, after I have 1,000 users and have “gotten to know them,” I think it will be time to iterate and launch the “next attempt” of KitchenPC. This re-launch will be 100% aligned with what I’ve learned about my early adopters and really try to nail exactly what they’ve asked for. At this point, I’m hoping these users will start telling their friends about the site and user growth may start to expand more exponentially. At least that’s what I hope. If that doesn’t happen, it’s basically more iterations until they does happen. Or I die trying.
Find a business partner!
Though I haven’t really gone into great detail about the “team” behind KitchenPC, I think it’s been implied so far that I’m going at this alone. The fact is, I actually did have a business partner at one point who was planning on taking over the business side of things while I worked on getting the initial prototype out the door. It was having this partner that gave me the confidence to quit Microsoft and work on KitchenPC full time living off savings. However, this partnership didn’t end up working out. I won’t go into details about why, as I’m sure he has his side of the story and I have mine, however needless to say the compatibility didn’t exist between us and we realized we had to go our separate ways.
I think having a business partner or co-founder is pretty much a requirement these days. You definitely need one if you want to get into any of those startup boot camps such as Y-Combinator or TechStars. However, the fact is doing a startup is just too much work for one person. I sort of buried this realization in the back of my mind as not to depress me while I was hard at work on the initial launch, looking at where I am today and how long the road will be ahead leads me to the realization that this is a journey I can’t make alone. At least not for very much longer.
Now, where does one find a business partner? I haven’t a clue! I already checked eBay! However, I think my top business priority on this very day is to find one, and find one that works with me. I’ve been thinking a lot about what a good business partner would be. Do I need to know him or her already, or is a stranger just as good? Do they need to live here in Seattle? Do they need to be able to work full time? Will they work for equity alone? Should they be a techie like me, or should I look for an experienced business person?
I think the best idea at this point is just to get out there and network. Start going to events, talk to people, post ads on job boards, etc. I’m also curious if the fact that I already have a product out on the market will be a good thing or bad thing. It’s definitely a double-edged sword. On one side, a potential business partner can look at the site. They know what I can deliver on (since I did this whole thing myself) and where my skills are. They know if they like the idea, if they like the site, and can see themselves becoming a part of it. On the other hand, they might feel a partnership is more “fair” if two parties worked on it together from the ground up and had an equal split in the ownership. I will go on the record now and say that demanding a majority share of the company isn’t a requirement for me, because I know that what I have now is just the tip of the ice burg compared to what still needs to happen. However, someone who does want to get on board as an equal partner better be in a position to truly bring it :)
So how will I spend my days?
Well, lately I’ve been spending my days sleeping. Most good coders are creatures of the night, as has become my preference while I’ve been in hard-core “coding mode” the last few months. However, it’s vital I start shifting my sleep schedule back over soon. What I’d like to do from here is spend weekends wearing the coder hat, fixing bugs, making site improvements, etc. Then spend the weekdays prioritizing networking, going to entrepreneur groups, and meeting new people who I might be able to align with. I’ll be making an appearance at CrowdPitch again this Thursday (No, I won’t be presenting – I wish!), so be sure to ping me if you’re interested in meeting up. I’ll be sure to write my official write-up after (especially since the last write-up brought in a ton of new blog readers!)
Other than that, I encourage everyone to use the site, or at least help spread the word. I think everyone knows at least one person who would use it, let’s get that person to signup and help generate some feedback on where the site should go. That’s it for now!
Well, I thought I’d write a quick post about the first few days of KitchenPC Beta. I’m exhausted, cranky, stressed out, on edge, sleep deprived, craving real food, and “paranoid” (I’ll explain in a bit) all at the same time.
First off, the good news. Everyone who’s used KitchenPC loves it and has had tons of good things to say. Albeit they are mostly my friends and prying “honest” feedback out of a good friend is like getting a straight answer from a politician. With that said, I think the initial impression people have of the site is great. Whether it will start to show signs of any exponential growth has still yet to be seen.
Now a list of all the @!#$ that has gone wrong so far.
Bugs Preventing User Signups
Within a few hours of launching the site, I began to see some errors in the log about crashes in the CreateUser method, which was used to create a new user account based on a Facebook logon. The exception was a simple “Null reference exception”, and of course the .NET stack trace won’t give you anything useful like what object was null.
I started adding more and more logging to track down what the issue was, and making sure I was checking every possible variable for a null value. The most annoying thing was this was working for some people (like me!) and not others. Thus, something about certain Facebook accounts caused the crash. After adding the Facebook email to the trace logs, I noticed a friend of mine was attempting to create an account. Luckily, he was on Facebook at the time so I sent him an instant message and asked if he could be my guinea pig as I tracked down the issue. After a bit more debugging and logging, I noticed the crash was right after it tried to import the account’s “current location” data, which I was using as the default setting for the “Location” profile data on KitchenPC. Turns out, I had missed a single period in code which said “if(user.location.current_city…”, and user.location was of course null. My brain kept seeing “location” and “current_city” as all one property name. Ugh. So checking for that fixed the problem, and I was ready to go. I’m not sure what actually causes this issue, but needless to say on certain Facebook accounts, applications can read this information, and on others it’s blocked. Yay for Facebook’s convoluted security model.
Meal Planner Engine Bugs
This doozy of a bug totally sucked all the life out of my Saturday night, however it was somewhat of a “fun” bug from a hacker perspective. I had a few people complain about the meal planner not working for them. It would either take too long and they’d give up, or the page load would just time out. Either way, it was working fine for me when I tried. I finally found a repro case that would cause the meal planner to lock up every time. All I had to do was demand 7 recipes that will make use of 3 beets.
Now, I use bitmasks to store the allowed tags and the tags a particular ingredient can link to. That way, I can just say (AllowedTags & IngredientYouHave.LinkedTags) and if that’s over zero, at least one recipe has that ingredient in that tag set. This is an incredibly fast way to start narrowing down recipes we can consider, and also detecting if a query is impossible.
At first, I thought my bitmasks were off by one. When the planner begins on a query, it checks these bitmasks and sees if there’s indeed any recipes in the database that meet your criteria, and if not, it throws an ImpossibleQueryException, which translates into a polite “No recipes found” error for the user. I watched under the debugger as it was trying to find a matching recipe but kept failing, and figured the query was impossible and my code wasn’t detecting that up front. Soon, I noticed the query was indeed possible, however there was only 1 matching “beet” recipe in the entire database and it kept on picking that. When trying to find a second beet recipe, it would only come back to the same one again and loop around, since the algorithm will continue and find a new one if the recipe already exists in the set. This caused an infinite loop.
So basically, if there’s zero recipes that match your criteria, I handle this case up front. If there’s 3 recipes and you need 7, crash boom. I was able to come up with a decent mechanism to catch this behavior for now, but I think the ideal solution will be to return the “partial” set to the user and say “Sorry, this was the best I could do.”
Server Problems
The site was down for a couple hours this afternoon due to an Apache issue. I use Ubuntu Server as my front end load balancer using Apache and mod_proxy. I have exceptions for the /scripts and /images directory, so the Apache server hosts all the static files and any dynamic page requests are routed to one of two Windows servers. This is cool because I’m prepared for a big traffic spike, and also I can take down one server by commenting it out of a conf file, and mess with stuff or upgrade it.
For now, I also run PostgreSQL on this Unix server. That won’t work out for the long term, but right now my database is only a couple megs and Postgres requires around 10 megs of RAM to run, it just wasn’t worth paying for another server instance for a tiny little database. When the time comes, provisioning a new database server will be easy; I just setup Postgres, migrate the DB contents over (or use streaming replication, setting up a warm stand-by) and then point the web servers over to the new database box. No DNS changes or anything.
However, due to a bug in Postgres 9.0’s installer (fixed in 9.0.2, thanks guys) there was a dependency on libuuid 1.6 which the installer didn’t install and of course doesn’t ship with Ubuntu 10.04 so I had to built it myself. Somehow during this process, libuuid.so.1 got linked to 1.6, which Postgres was quite happy about. Apache, not so much. However, Apache didn’t show any signs of discontent for two days. At which point it decided to crash and not restart. Even more fun, it would attempt to restart, crash, then leave the process hung in memory. I had like 20 Apache processes going on.
For this issue, I had to go bug my friend Brian (a Unix guru) to ssh in to the box and help figure that one out. I was not in a good mood, as the production server was totally offline the entire time. Ugh! Brian finally worked it out and I totally owe him a beer next time I’m in Vegas.
IIS Being.. well.. IIS.
I’ve also been running into some quite annoying problems with IIS deciding it was bored and no longer answering requests. It’s as if IIS goes “Ooo look at the squirrel” and ignores the socket. When this happens, the site just doesn’t pick up and eventually the browser times out. I was tail’ing the Apache logs to make sure mod_proxy was indeed forwarding the requests to IIS, which it was. However, IIS’s logs said nothing at all about the request; as if they never happened. Apache said the socket was closed unexpectedly or some such thing. This seems to happen after a few hours or maybe a day of uptime, and then I have to reset IIS to get it working again.
The workaround I’ve found for now is to write a jMeter (I love this program) script that loads the Login page every 60 seconds, which seems to keep IIS nice and busy and responding fast. This thing’s been running for days now, and the problem doesn’t occur as long as it’s running. However, I still need to get to the bottom of this nonsense. I do sometimes miss Microsoft, where I could just track down the guy who wrote the thing that doesn’t work and get him to help out.
Advertising
I don’t really know what defines “success” as far as a product launch goes, but I also seem to be off to a bit of a slow start as far as user signups. I’m just now seeing a few signups by people I don’t know, which is great because it means people are telling their friends, or word is getting around on Facebook through “So and so likes KitchenPC (Website)” posts. However, I’m still only around 70 user accounts total, and the number doesn’t really seem to be picking up very quickly.
This morning I emailed around 200 people from the survey, however these efforts might have been thwarted due to both the weekend and the hours of downtime due to libuuid problems.
I plan on putting a lot of focus into getting the word out during this week, hopefully I won’t be slowed down by any more annoying server problems.
There’s this whole other level of stress that accompanies a launch that I never saw coming. I thought that launching was a milestone, a point which represents a finality; where stress was relieved, not accrued. It just seems that everything matters more, there’s this frantic rush to fix serious bugs or get servers back online, since people are now counting on the site being up and people who I don’t know are using it. Every time I click on the link, I get paranoid that I’ll see a server error, or the recipe modeler will get stuck in another infinite loop, or Apache will be dead again or IIS will be looking at more woodland creatures. I guess this is just life, hopefully I can start getting some traction going and start focusing on how to actually improve the product, rather than just treading water to keep the thing online and working.
Next, I’ll be blogging about my next priorities to move the business forward. Stay tuned!
I am thrilled to announce that KitchenPC.com has gone live to the public! It’s been an absolutely exhausting journey, but I’m pleased with the outcome of the Beta version and know that with the support and feedback of its users, the product will only get better from here. KitchenPC has been a dream of mine for many years now, in one form or another, and to finally have a tangible (well, as far as bits can be) incarnation of this dream is something beyond words. Many people helped me out along the way, I’d like to thank a few of them at the risk of turning this blog post into an Academy Awards acceptance speech. They are (in no particular order) Lois C, Josh B, Cherise Z, Brooks T, Dylan A, Joe R, Rohling H, Myrissa Y, Tyson B, Pey-Hua H, Tasnim J, Stephen K, and Piotr K. All of you had some sort of direct impact on the way the vision grew.
The next steps will be to ensure the beta version of the site delivers upon its initial vision and comfortably finds a user base to grow. I’m hoping to get a targeted set of regular users who want to use the site a few times a week and share their experiences and feedback. This means I’ll be spending a good deal of time promoting the site online and to the press, listening to users, and studying trends and behavior in site usage. I also plan to make the shift into a more entrepreneur role; attending groups, going to presentations, and networking with the business community at large. This, of course, will be done alongside maintaining a technical role on the site; fixing bugs, making minor improvements based on feedback and making sure the entire thing doesn’t come crashing down.
Well, I’d like to keep this post short so people will stop reading and go check out the site, but if you’re a fan of the blog (and I hope you are), please help spread the word! Join the “KitchenPC” Facebook group, post a link on your wall, tell your friends, or just use the site and send me your feedback (support@kitchenpc.com). Much more to come!
Mike
A couple nights ago, I did a dry-run of a single server deployment of KitchenPC onto the Rackspace cloud. The main purpose was to figure out what kinds of issues I’d run into during the actual deployment, but I also took this opportunity to test the performance of Rackspace’s “CloudServers” product and see how the site “felt” on this platform.
Getting the site up and running on a Windows 2008 RC2 64-bit instance was pretty easy, although I ran into some hassles with the new version of IIS and trying to figure out where all the settings were. The site felt amazingly fast, any page would just “appear” instantly. The meal planner code was also quite fast, at least the same speed as the Dell PowerEdge server in which KitchenPC called home during the alpha.
I spent a bit of time writing some scripted tests using jMeter. These tests were pretty basic. I ran jMeter on a separate machine on the Rackspace cloud, as not to degrade the web server performance. I decided to run the tests within the cloud (as opposed to a remote location) since the goal is to test the actual server performance, and not Rackspace’s network capabilities (I already assume they have obscene amounts of network bandwidth.)
A single test would perform an HTTP GET and download the Login page, then POST the Login page back creating a new user account with a random email and password. It would then follow the 302 redirect to the homepage, thus creating a user context. At this point, it would issue AJAX calls to do the following:
- Load five random recipes
- Load the first and second pages of the news feed (similar to the Facebook wall)
- Perform a search query with some hard coded parameters
Next, it would issue HTTP GET commands for the following:
- Cookbook.html (A version of the search results page that returns everything in the user’s cookbook)
- MealPlan.html (the page that allows the user to enter meal planner criteria)
- Calendar.html (The user’s calendar)
- Profile.html (The user’s account settings page)
- Home.html (Back home again, figured it’d be nice to load this twice since it will be so common)
- Search.html (Advanced recipe search page)
- Pantry.html (The user’s pantry)
I then add a recipe to the shopping list, add a recipe to the cookbook, and manipulate the calendar a bit. I then create a new recipe with a couple basic ingredients and a random title. Lastly, I update the user’s account by changing a single setting.
I figure this is a decent simulation of a single user messing around with the site for a bit, and at least touches the main features. I decided not to test the meal planner, because I already know that’s not gonna hold up too well under heavy server loads :)
I decided to simulate 100 users simultaneously running the above script, each running said steps 5 times in a row. This would last several minutes, which would allow me to watch the CPU usage for both IIS and Postgres.
Also, while the test was running, I logged on with my own web browser from my own Internet connection to see how the site “felt”.
The results were extremely satisfying. Out of the nearly 14,000 HTTP requests, there were zero errors and the average response time was around 2.3 seconds. The total server CPU usage was pegged at 100% the entire time (which is what you’d want, as every server resource should be used to respond to requests as fast as possible) and IIS took about 60-70% of the CPU while Postgres idled along at around 10-20%. IIS used around 110 megs of RAM, and Postgres never allocated more than 10 megs (I assume it just had my entire DB cached in memory the whole time.)
I poked around the site on my home computer from remote, and the site still felt nice and quick, even with 100 simulated users doing all sorts of stuff. Now, I’m not really sure I could come up with an accurate estimate of how many “user accounts” a single server instance could handle, but if 1 out of 1,000 users were logged in at any one time, then this means a single instance should be able to handle 100,000 user accounts.
Oh, one more thing to point out. I did not test loading static content such as image files as they’ll be loaded from a CDN and also usually cached after the user logs on anyway.
Not counting bandwidth, running a Windows 2008 server instance with a gig of RAM costs about $60/mon from Rackspace.
After all is said, I don’t see any major show stopping issues in terms of performance. Well, unless 100 people want to use the meal planner all at once. I do have some ideas on how to improve that scenario though.
Next, on to release!
Wow, it’s been awhile since I’ve blogged at all. As you can probably imagine, the final KitchenPC UI has arrived and, as tends to usually be the case, integration work took far longer than originally estimated. The good news is that everything came out absolutely gorgeous and the folks at Merix were nothing short of a pleasure to work with. Their code is clean and organized, and very easy to plug data into. The problems I found, which were all fairly minor, were addressed promptly and they always fixed the problem on the first attempt. They also came within the original budget estimate, even though a few design requirements were changed here and there. If KitchenPC takes off, I’ll definitely be going back to them for any new UI designs I need to implement.
The second piece of big news is I finally feel confident announcing an official release date; KitchenPC will go live during the first week of October, 2010. This is actually a conservative estimate, and if everything goes smoothly I should be wrapping stuff up late next week. However, I decided to give myself a bit of wiggle room just in case any issues creep up.
Here’s a brief overview of the remaining work items before release.
Last minute bug fixes and cleanup
During UI integration, a few minor issues were discovered throughout the site. These were issues that were small enough that I could justify putting aside for the sake of getting each page integrated with the new user interface quickly (Since Merix was waiting for their final payment.) However, I’ll be spending Monday, Tuesday and Wednesday going through these items and finding solutions to most of them. I also hope to find the time to integrate my auto-complete wheel with the ingredient picker, however I can’t promise this will make it in for the first release. On Thursday and Friday, I’ll be out of town climbing up Mt St Helens (for the second time), which will be a nice “relaxing” break from KitchenPC (“Relaxing? Climbing an 8,000 foot mountain?”)
Final Testing
When all known bugs are fixed, I’ll be going through each page with a fine tooth comb testing each feature and coming up with as many test cases as I can for each scenario. This includes weird edge cases, looking for bad error handling, and just all around trying to break things. Any bugs I find will be logged and triaged accordingly, and hopefully I can fix any major ones quickly. I’m guessing this work will take up the first half of next week.
Performance Profiling
I hate to use the word “perf testing” here, as I feel performance is something built into the product from the early stages, however I feel it necessary to run some jMeter tests to get a good feeling of the hardware requirements needed to run KitchenPC. I don’t estimate any database level bottlenecks as I’ve already done extensive testing with large amounts of data when designing the original database schema, and I’m pretty sure Postgres will have no problems even under high server load. Hoewver, I do want to see how many users a typical web server can handle at once, and at what point it breaks (or response times get slow enough to annoy people.) I think this will give me a good idea for figuring out what KitchenPC will cost to run depending on user estimates. Apparently, investors like to know these sorts of details. I’ve used jMeter before and simulating realistic user load is pretty easy. There’s also a few websites I’ve run across that will pound your server with as much simulated traffic as you want. Either way, I’ll spend the latter half of next week on this effort.
Server Setup
This work item should only take a day or two, and will include things like DNS configuration, setting up operating system images on the remote servers, and also investigating setting up multiple front end servers if necessary. More on this in a bit.
Change in Plans?
I’ve also been putting in some serious thought into modifying my original beta rollout strategy. My initial plan was to open up the site to 1,000 beta testers using an invite code strategy. In fact, the invite code mechanism is complete and has been successful in the private alpha release. However, my impatient side has waged war on my cautious, logical side (when did this blog turn into a Frosted Mini Wheats commercial?) and has nearly convinced it to drop the whole idea to skip right to a full on public beta release. Here’s a few arguments in favor of such a ballsy decision.
- It gets right to the punch. This is either a product people want, or a product they don’t. Just let people use the thing and see.
- Invite Codes are egotistical. When you’re a company like Google, you can entice people with your shiny new product, because you’re already all the rage anyway. Geez, people eBay Google Voice invites. No one has heard of me, so the sooner I get something real out there, the better.
- The Dot Com world waits for no one. With so many new recipe based websites springing up every month, the sooner you get a product out the better. There might be a product just like mine around the corner, and the longer I wait, the sooner someone could beat me to the punch. Not that first to market always wins, but you also can’t wait around too long.
- Server traffic is not the enemy. The original justification behind an invite code system was to gradually allow people to sign up and allow me to maintain control of server load as my budget and resources allow. I had a fear of winding up at the top of Digg and getting a million hits and everything crashing, thus souring everyone’s initial opinion of KitchenPC. I think this fear is justified but can probably be mitigated with cloud technology and proper planning.
To elaborate more on the last bullet point, I think if my servers did get flooded with a wave of “curious cooks” wanting to check out the next thing, that would be a problem I would want to have. I would be quite the optimist to expect a huge onslaught of users on day one, as my blog has yet to get over 53 views in a single day, but worst case I could setup ten virtual servers and hack together a simple round robin load balancer or even use DNS to point to a random server as a temporary solution for a few days until things calmed down. Ten servers would cost about $800 bucks to run for an entire month, but running them for only a few days then shutting down unneeded resources sounds like a worthwhile expensive to me.
In other words, using an invite code strategy would probably be a good idea for a website running on “real” server hardware, but when you can spin up new instances for 10 cents an hour, you can take a lot more precautions to counter unanticipated server load. It is this reason I mentioned my plans to investigate load balancing technology and running on multiple servers. My website is designed to be totally stateless, so any request can be answered by any server without any need for session state or anything. I’d rather not look into SQL level load balancing, but I’m quite certain Postgres will be yawning quietly even if I get a ton of users. The site simply isn’t database intensive, especially with the current side of the DB (I think it’s like 4 megs right now, yes megabytes.) Fault tolerance is, of course, a whole other animal but during a beta, I don’t consider uptime critical enough to worry about.
With that said, I’ll be happy to get 100 signups on the first day. If all my servers crashed under the massive load of anxious meal planning soccer moms, I’d be jumping for joy and calling all my friends, as I spun up a bunch of new virtual servers to handle the load.
The other big reason is pure media punch. It seems so much more satisfying to announce the launch of a product. “Here’s my product, go to this site, sign up or just logon with your Facebook account, and check it out.” I really want to issue a press release and try to grab some media attention, or at least some mentions from the techie bloggers (who I’m sure I’ll be spamming post-launch as well.) Doing a private beta release and then, a few months later, transitioning that into a public release creates a publicity gap. Finally, having a public beta version out there creates that intangible satisfaction of being a real, legit company owner. No longer is your idea “vaporware” or “I can’t show you yet”, but it’s released for all the world to see and judge and tell their friends about. I can’t wait to switch my employer on Facebook over to “KitchenPC,” even if I’m technically just an LLC registered in Washington, paying myself a salary of one dollar per year.
Barring any huge disappointments during stress testing (such as finding out a server can only handle 10 users at once and there’s no easy fix,) this will probably be the route I go. Anyway, I’m super excited and I think I know how an eight-month-pregnant mother feels. The last few weeks have been crazy stressful and involved little sleep, but I’m proud of what I’ve created and for the first time, look at the site and am convinced that it’s going to be hugely useful to a whole lot of people. From here, it’s just a matter of getting the word out and getting people to check it out, give me some feedback, and then turning this project into a viable, money-making business.
That’s it for now, back to work for me!
As you may know, near the beginning of the KitchenPC design phase, I conducted a survey to try to get a grasp of who my users would be and how they behave. I’ll conclude up front that while I think this attempt was an overall failure, as I don’t believe it really led to smarter development decisions, the data I got out of it are still worth using as kindling for the cognitive fire. To everyone who took the survey, I do greatly appreciate your time and honest feedback.
So, let’s go over the answers, shall we?
In total, I got 276 full responses to the survey, and another 15 partial responses. While this is far from my initial target of 1,000 responses (which apparently requires incentives I just can’t produce at this time,) I think the data show a fair sample of the “techie” family types that are liable to try out a product such as KitchenPC. So, what types of cooks answered the survey? Only 8 would identify themselves as “gourmet” cooks. 57 rate themselves as an accomplished cook, and 154 (a little over half) are comfortable with the “home cook” label. 33 are aspiring, and 31 say they need help. While these are simply labels that one assigns to themselves with no common denotation, the summary I can extract from this question is that I can be fairly comfortable trying to target the average home cook, which is nice because that’s what I consider myself. One can also raise the valid point that the people who took my survey are not necessarily who will end up using the product. Maybe I’ll attract gourmet cooks from all around the world on day one, and end up with full page adverts in “Gourmet Cooks Monthly.” However, the strategies I used for finding survey respondents will be similar to those I employ to find beta users, so I predict a similar demographic for initial users.
Do you cook using recipes? This was a rather important question. I mean, if you don’t use recipes you probably would get almost no use out of KitchenPC. Luckily, I already know there’s about 55 million people in the U.S. that use recipe websites on the Internet, and culinary startups are huge these days. Still, only around 5% admit to always using recipes when cooking, and 25% saying they often do. The majority, with 51% of the responses, say they’ll use a recipe as a starting point but make their own changes. This trend is a bit disappointing to me, as KitchenPC favors the cook who wants to plan out meals and compile a definitive list of what they need at the store. If they’re tossing recipes out the window when culinary inspiration strikes, I might be a bit out of luck. Still, I can hope that such modifications of recipes involve changing amounts, tossing in a few extra spices lying around, or leaving things out that don’t sound good. In geek terms, these changes happen at “run-time” and will be independent of disciplined meal planning. Even if this is making a wrong assumption about this user type, providing a service to the nearly 30% of cooks who usually use recipes is still a viable business.
The next question is a biggy, as it seeks to validate pretty much the entire principal behind why the site was created. Do you usually plan meals in advance? I’m actually somewhat pleased with the results, however I think the question was very poorly designed. 57 people (about 20%) said yes, which is awesome! I would love to graph a correlation here to find out who these people are and how I find them. Do they have families? Are they experienced cooks? These are my peeps! However, 95 people (32%) said no. The majority answer, at 129 people (44%) was “Sometimes”. This is somewhat aggravating as I wish I had broken down this question to get a bit more detail about this. Still, from these results I can ascertain that there’s a good chunk of people out there that would use features like a meal calendar, being able to compile accurate shopping lists from multiple recipes at once, etc. The industry backs this conclusion with the number of online meal planning sites popping up on the Internet like weeds (or in the occasional simian form.) Obviously, entrepreneurs think there’s a market out there for this, and I’m one of them; I just feel no one has really got it right yet. I’m a bit comforted by the fact that KitchenPC will provide features for non-planners that I think would be useful, such as the ability to figure out what to cook based on an available set of ingredients. I think this sort of feature can actually encourage those “sometimes” people to plan in advance a bit more. Since multiple meals can be “modeled” quickly and easily, users can type in the main items in their fridge they’re trying to use up, and KitchenPC can suggest a few meals for the next few days. Someone who answered “No” to this question now all of a sudden finds themselves with a meal plan that saves them money, targets their likes, and encourages them to try something they haven’t cooked before; ha, I’ve made a meal planner out of them!
The next question only popped up for those people who answered “No” to the above question. It simply asks, “What’s preventing you from planning meals in advance?” The obvious trend in the answers (as well as those who typed in their own response) is that people just don’t think about it. After reading these answers, I get the feeling that these people live alone and cook for only themselves. I’ve made this conclusion purely due to the first person singular viewpoint in the responses (“when *I* eat” or “when *I* shop.”) Hopefully I can play around with these data more in Excel and try to confirm this conclusion. Needless to say, people who don’t plan meals in advance simply don’t want to; they figure out what they’re in the mood for right now, or by what looks good at the store, or just blatant procrastination. There was a lot of references to “feel like” and “mood” in the responses. Apparently, people aren’t military generals driven by a strict schedule. “0700 Hours – WAFFLES, PEOPLE!”
It’s obvious KitchenPC needs to provide something for non-meal planners.
So how about the people who do meal plan (at least sometimes)? 38% of them say they do it to save money and optimally use ingredients. Bingo! These people are gonna dig this site. I’m all about saving money and telling you how to use that leftover 13oz of pork you have. 51% say they do it to save time by consolidating their shopping list for the week. Double bingo! I do exactly that, and I do that ridiculously well. 25% say they don’t have time to think up meals on the spot. This contrasts with the non-planners who somehow don’t have a problem with thinking up meals on the spot. Like I said, I think it’s all about finding out what types of people plan meals. The easy conclusion is that if you do plan meals, you’re gonna love KitchenPC. The 20% of people who do plan meals in advance easily provides a large enough demographic to build a profitable business around. Especially since the pool is so large to begin with. 20% could easily be millions of people, if marketed right. I’m excited by this prospect, enough to justify my original business vision of building the best meal planning tool on the web.
The next question is a very simple one; “How do you decide what to cook?” The majority (65%) say they try to use ingredients that they have on hand. This is great news, as most of the innovation around KitchenPC is “reverse meal planning”, i.e. finding meals that will use what you have on hand. Nothing on the web that I’ve seen can do this well, or involving multiple recipes at once. 26% of people say they choose a cuisine first, depending on their mood. I think these users will still get some benefits from KitchenPC, using modeling based around recipe tags, which focus on the major cuisines. 136 people (46%) say they just make whatever sounds good at the time. I believe these people will also like the meal planner as it’s simply just a recipe suggestion engine that works with whatever data you give it.
“Do you bring a list to the grocery store?” If you do, you’re like 54% of my survey respondents. A dismal 6% say no (I found this surprisingly low), and 37% sometimes do. I think these numbers definitely support the need for an intelligent shopping list creation tool, one that’s easy to use, flexible, and integrates with mobile devices. However, how do people create shopping lists? Only 34% say they keep a running list through-out the week, with 42% saying they jot down their list right before going to the store. Now, peoples’ habits are almost impossible to break but I can’t help but think better shopping list tools might tend to entice some people to store their running shopping list online, especially those doing a lot of meal planning. Only 7% fell for my humorous answer, “I wander the aisles aimlessly asking myself what I need.”
The survey also asked users if they eat frozen or pre-packaged meals. The idea behind this was judging the potential for designing some features around this concept. I’m going to go out on a limb here and say that even people who eat pre-packaged meals are not the ones planning up front. “Hmm, yes I shall eat this Red Baron pizza on Wednesday the 17th.” In case you’re curious, only around 3% eat these meals almost every night (probably while watching some sort of reality TV show,) with 22% admitting to this habit a couple times a week, and the majority (30%) once or twice a month. I really don’t see much value from this information.
The next few questions involve online shopping. One of the revenue models being considered post beta is integration with online grocery stores. Shopping list generation is done so accurately, it’s viable to implement a system that can transfer your shopping list to an online grocer such as Safeway.com or Amazon Fresh, similar to purchasing flight tickets through Expedia. Needless to say this will not be a feature offered any time in the near future, however I’m trying to get the data to judge its feasibility (as it would be a massive business venture requiring many inter-company partnerships.) To let you guys in on a little secret, I actually have a working prototype of this feature and a mocked up online grocery site called MikeMart. I’ll blog about it more post-beta.
93% of people have purchased stuff online. This is no surprise. I also asked if people purchase groceries online. Only 33% said yes, with an overwhelming 65% saying never. Out of the people who do purchase groceries online, only 6 (not percent, 6 actual people) do so once a week or more. 11% do so once or twice a month, 42% do this every few months, and 33% have done this once and only once. 40 of these people have used Amazon Fresh, and 33 have used Safeway.
Why don’t people buy groceries online? I think the plethora of dot-bomb ruins over the past decade speak for themselves. This is a near impossible business model, and people are just not going for it. While it is growing slowly, the statistics I dug up showed that only around 1% of Americans purchase groceries online. Still, companies such as Amazon Fresh are doing well, as well as Safeway who is also making a considerable investment into this market. 62 people said they don’t buy groceries online because it’s too expensive (e.g. delivery fees), and 115 said they want to select the items themselves (in other words, they don’t trust what’s gonna show up on the truck.) 37 people chose to write in their own response, and their answers led me to believe these people will not be easily convinced to change their ways.
I think the idea of trying to support KitchenPC from online grocery shopping revenue is far fetched, however it’s still a feature I would love to pursue at some point if I get enough users to convince Safeway or Amazon Fresh to sit down and talk with me.
When asked what factors people consider while grocery shopping, 71% said price, 67% included value, and 79% checked the box for quality. Very few people (18%) cared about brand names. Almost half mentioned they look for organic food, care about farming ethics, etc. I’m actually quite interested in this concept, and plan to write a more protracted summary of these thoughts in a future blog post.
Another revenue model to explore is coupons (hey, it’s a multi-billion dollar business!) Only 4% of people admitted to always using coupons, but there was a very nice bell curve here. 10% said often, 51% said sometimes, 13% said at least once, and only 16% said never. I think very few people are going to turn down a coupon if it just magically appears on their printed shopping list, and it’s as easy as just scanning in at the grocery store. For this reason, I think selling coupons through KitchenPC is a viable option to consider as a revenue model, and probably doable in a way that won’t annoy all my users. The fact that I completely normalize ingredients in my database makes this implementation very straight-forward.
Here’s a question that purely exists to try to correlate results with other answers. On average, how many people do you cook for? I’m very curious if cooking for more people makes you more likely to meal plan, however those are data I’ll try to tease out once I get into the marketing stage. 15% only cook for themselves. 42% cook for themselves and one other person (young, married couples I guess?) and 31% cook for 3 of 4 people. Only 7% cook for over 4 people.
I also asked people if they use club rewards cards. 21% do for a single grocery store, 53% have these cards for multiple stores, and 15% claim they have a rewards card for every possible store in their area. Only 7% don’t use these cards. This question was once again targeted around grocery store integration, determining if it would be necessary to transmit member information along with orders, and displaying member pricing as well. Obviously, this would be a must.
The last question was geared around privacy, as the original prototype had a lot of social networking features that unfortunately will not make it into the public beta. Never-the-less, it’s interesting information. “Would you be willing to share what recipes you cook with others?” This was a rather poorly worded question, but what it means is do you care about people seeing your calendar. 53% say “Yes, with anyone and everyone.” 20% say they’ll share this information with their friends and friends of friends, 9% saying friends only, and only 4% fear big brother watching and wouldn’t be comfortable letting anyone know what goes on in their kitchen. It’s pretty easy to see that privacy won’t really be a huge concern, however the post-beta version of KitchenPC with social features will definitely include some basic privacy controls.
Luckily, 178 people left their email addresses for me, which will be great as I’ll send them invitations to the upcoming private beta.
Overall, I think I got some valuable data from this survey, but it’s a far cry from any real ammunition for basing an entire business plan on. I’ve found my mind is pretty attached to my existing business plan and tends to look for the conclusions I want to see from the numbers. As I’ve said earlier, I think customer driven development is a very valuable tool for certain types of businesses. If you’re spending millions on a prototype, and have a burn rate of $500k a month, you’d better prove beyond a shadow of a doubt that you have a customer base, show a demand for your services up front, and have the raw data to back it up. For a site like mine, I think a more reasonable goal is to just get the damn thing online. It’ll hopefully be useful to a few people, and those people will show their support by coming back. The real question is agility. When you do realize you didn’t understand your customer, how fast can you fix it? Can I figure out what types of people are using my product and devise a marketing strategy to attract more of them? These are things you have to do with a real, live product and not some half-assed survey. At least that’s my theory, and I’m sticking with it.
Again, thanks to all of you who took the survey! It was fun to try out and I’m glad I did it. I think being an entrepreneur is about trying a bunch of stuff and seeing what sticks, but being honest when something doesn’t work out the way you want. Who knows, maybe another reader out there will be able to use my data to influence a business idea of their own.
One of the major UI hurdles I’ve been trying to overcome (and, by far, the number one complaint I’ve received from alpha testers and recipe enterers) has been the inefficiency of entering recipe ingredients. The ability to enter custom ingredients and forms was a major stepping stone to overcoming said hurdle, but the fact remains that the cumbersome UI to select an ingredient, choose a form, type in a number, then select an available unit for that ingredient is just too clunky to deal with. One of my data entry people up and quit the other day because she just wasn’t getting paid enough to deal with this nonsense. I don’t blame her. The fact she did this, in terms of product feedback, was probably more valuable than the recipes she would have entered, as it finally convinced me this was a problem I had to deal with. I took this as a message; “Mike – you can’t even pay people to use your product!”
While talking with a friend of mine over Skype and doing some screen sharing, I took down notes as I watched her struggle with the recipe entering process as a first time user. Though finding an ingredient is super easy (I wrote a very slick auto-complete drop-down for this), the issue became clear that KitchenPC needs an easier way to express ingredient amounts. Dealing with dropdowns, multiple text boxes, etc is just a deal-breaker. After giving it some though, I decided I was dealing with this UI paradigm completely backwards. Once an ingredient is selected, the first step is to choose a form. For example, when working with cheddar cheese, the form dropdown contains “By Weight”, “By Slice”, “shredded” and “diced”. Once the user selects a form, the unit dropdown is populated with units acceptable to that form. If the user chooses “By Weight”, weight units such as ounces and pounds appear. If the user selects a volumetric form such as “shredded” or “diced”, units such as cup and tablespoon appear. Since “Slice” is a unit itself, the user can only enter a numeric value when this form is selected and the unit drop-down is disabled.
The seems reasonable at first, but it has a fundamental flaw; the interface flow is completely contradictory (in fact, entirely inverted) to the standard human thought process. A user will typically think of an ingredient usage using a common mental template, in this case an amount, a unit, and possibly a form that makes sense to that unit. My existing user interface asks them to navigate this thought process backwards, starting at the end. This results in the user wrangling the UI into representing their desired usage. The user knows the amount, however they have to select a form before they are even allowed to enter an amount. They know their desired unit, however now they have to go dig through all the forms to find one that permits that unit type. Since form names can be less than entirely descriptive, in some cases it might not be clear which unit type a certain form might allow. Not to mention, doing all this requires the use of a form dropdown, a numeric input box, and a unit dropdown. Novice users will navigate this UI by using the mouse which means:
- Grab mouse, click the forms dropdown, select a form.
- Click on Amount text box. Move hands back to keyboard.
- Type in an amount.
- Grab mouse, click on the unit dropdown, select a unit.
A more advanced user is aware of the tab button to navigate web pages. However, most are not aware of the keyboard shortcuts when dealing with a dropdown list. Firefox is, of course, superior to IE in this respect as the up and down keys will intuitively open the list. However, most users will still be tabbing, mousing, and typing all over the place.
If the unit type they want is not available for the form they “guessed”, the user gets frustrated and yells at the screen. If they haven’t given up by that point, they might mess around with the forms (a concept that really doesn’t make any sense to the average user in the first place) trying to find one that allows their desired unit.
This is crap.
A user interface that mimics how humans actually think would start with the amount. Regardless of the unit or form, I always need an amount right? So why not start with this. The second thought would be the unit type. Once an amount and unit type have been determined, the user interface should be smart enough to ask for a form if and only if the provided information is ambiguous with multiple form types (rare in most ingredients). For example, “4 slices” and “2 pounds” is a perfectly acceptable usage for cheese. When expressed in this way, the form can be ascertained automatically. If the user says “slices”, they mean the “By Slice” form. If they say “pounds” they mean the “By Weight” form. However, if the user enters “4 cups”, this expression presents ambiguity between the “shredded” and “diced” form types. Only in this case should the user even be bothered to worry about the form of the ingredient, and they should only be bothered with this if and when the information is needed.
The paradigm can be thought of as an inverted tree, slowly narrowing down choices until an acceptable ingredient usage is obtained. The user is only pestered when more information is needed. I developed a set of rules to follow when designing this new UI:
- Don’t bother the user, just let them type. Don’t change anything automatically or confine them to only being able to type certain things.
- It should be possible to enter an ingredient usage in a single textbox. Users should not have to tab around.
- Help should be provided passively, to “steer” the user along as they type.
The third rule is one I really like, especially this concept of steering the user into describing a valid ingredient usage through natural language. I thought of a steering wheel, and decided the UI should have a rounded “spinny” feel, like a wheel. As the user types, a wheel of choices should pop up and rotate as the user nears a valid choice. Unlike a dropdown, the wheel can describe a set of choices for a certain phrase, such as the unit name or form name. Imagine something like this:
- User types in “1 1/2” and presses space to type in a unit.
- A wheel of units available (across all forms) appears.
- When the user types “tabl” the wheel spins around to “tablespoons” but does not auto-complete for them (rule #1)
- The user can optionally press ENTER and the rest of the word is filled out for them.
- At this point, “1 1/2 Tablespoons” is entered, however this measurement is ambiguous. Thus, a new wheel pops up with forms that allow volumetric measurements.
- The user sees the wheel with “diced” and “shredded” and is allowed to type one or select one with the up/down keys.
- When a form is selected, the usage can now be parsed in KitchenPC “meta” language and stored in the database, thus a nice green checkmark is displayed to indicate KitchenPC likes their entry.
I like this UI because it’s a single textbox and allows the user to express any ingredient usage across any form without taking their hands off the keyboard. In fact, many times the amount can just be pasted into the textbox, especially since I can parse aliases of unit types (such as “1 oz”, “2 c”, “3 lbs”, etc) and map them to the correct unit type internally. It also fits in with my existing custom form ability. If what the user types cannot be parsed, the amount will be used as a custom form and be queued for manual processing.
They say a picture is worth 1,000 words, but I’ve decided to go a step further and attach a video of tonight’s prototype. I’m hoping this technology can be integrated into the main KitchenPC UI fairly easily and make it into the initial public beta. I think it’s a huge step forward in usability, and perhaps will lessen the number of my users who yell curse words at the screen. At the very least, it’s a start.








