Skip to content

Taking a break from KPC

May 4, 2011

Lately, I’ve been feeling a bit unenthused about KitchenPC and overwhelmed by the sheer amount of work left to be done.  Therefore, I’ve decided to take a bit of a break from the business as well as the blog and explore some other things in life.  I find myself now a little confused as to which direction my life is going in, which is probably pretty normal for a one-man startup after the first year or so.  I figured it might be best to write a blog post on what I’ve been doing lately with my time off during this “vacation” from KitchenPC coding.

Launched a “mini-startup” with a friend

One of my main goals after leaving Microsoft and doing a web start-up was to learn new technologies and expand my technical horizons.  For 12 years, I had pretty much been trapped in the Microsoft world; using the latest Microsoft platforms and languages.  This meant dot-net, SQL Server, IIS, Windows, etc.  Launching KitchenPC let me explore various open source technologies, such as PostgreSQL, but I found myself still only comfortable with the .NET world for the middle tier.  It’s more than likely that I’ll find myself involved with other startups in the future, and I wanted to make sure I had at least a little experience working with other platforms.

I figured what better way to do this than to launch a mini-startup, and invited my friend Brooks to help out with the idea.  The one rule was we’d build the product using as many technologies unknown to us as possible.

The idea is one that I’d cooked up while working on yet another KitchenPC user survey.  Previously, I had been using LimeSurvey which I’d setup on a friend’s server.  LimeSurvey is a great open-source PHP-based survey tool, however it’s pretty clunky and cumbersome to use.  It’s also overly complicated and creating each question is a multi-step process.  The online alternatives are also somewhat overkill.  Survey Monkey is the big player in this arena; these guys make somewhere around 30 or 40 million in revenue and have about $100MM in venture funding.  Who knew that online surveys were so profitable!  However, their business model is somewhat insidious.  They offer free surveys, but limit those to 10 questions and 100 respondents.  If you want anything more than that, you have to sign up for a recurring billing plan starting at $16 per month.  This seems non-ideal for the casual survey creator or entrepreneur that just wants to quickly ask a bunch of people some questions.  Thus, was born. (Pronounced “QUICK-ee-oh”) is designed from the ground up to be the world’s simplest survey tool.  There’s no branching logic or paging support or anything.  The user interface is simply one gigantic text box.  You type in your survey in ASCII text and hit “Save”.  You’ll then get two links; one you can give to anyone you want to answer the survey, and another that you keep private which lets you download the results.  I use the term download because we don’t even support a UI for seeing the results!  The results are downloadable in CSV format, which will load quite nicely in Excel.  Why re-invent the wheel when Excel lets you do graphs, pivoting, sorting, and everything else imaginable.

The markup that users can use to describe their survey is also brain-dead simple.  You use square-brackets for a checkbox question, parenthesis for a radio button, and three or more underscores for a textbox.  You also create question headers by numbering each one.  An example of a question could be:

1) Are you reading this blog right now?
( ) Yes
( ) No

2) Tell us what you think about this blog.

Rather than dealing with complicated (and tough to develop) UI for creating surveys, users can just type naturally and “draw” their survey with a mark-up that pretty much visually looks like a survey already.  Obviously, when a user follows the public link to take the survey, the text is parsed and transformed into a nice looking HTML form.

So, what about the technology behind it?  I took charge of the back-end and Brooks took full ownership of the HTML and CSS.  I chose Ruby on Rails to write the code in, since I had read a bit about Ruby on Rails while flying home from Hong Kong in January, and had even re-written one of my KitchenPC internal tools using it.  I was very excited about writing and launching a full web-site using this platform.  Though I was constantly looking up how to do various things, it only took me about two days to write the entire site from top to bottom.  For the database, I explored various options; I wanted to stay away from Postgres because the point of the project was to learn new things.  mySQL also seemed silly because our data needs were so simple.  I decided to check out MongoDB, which I had heard about but never really explored.  I watched a couple videos on it and played around with their “Try it out” online shell.  It was quickly obvious that MongoDB was the perfect choice for a site like this.  MongoDB is very good at dealing with non-relational data that doesn’t really fit any sort of pre-defined schema.  You basically shove JSON formatted data into collections, and then you can retrieve this data through a JSON expression.  It’s very cool!  Why try to normalize a survey with question numbers, question types, what order each thing is in, etc?  MongoDB is also very good at horizontal scaling.  You can set up several MongoDB servers and each one can take a chunk of the data (known as sharding in the DB world.)  No one server needs to grow too giant, and a hash of the ID will dictate which instance the data will be stored in.  Since the data is not relational, replicating data across instances is not really necessary.  Suffice to say, after doing this project I’m a huge fan of MongoDB.  I even went to a MongoDB meet-up group last week.

For the HTML front-end, we used an open-source project called LESS.  LESS allows you to use macros and constants within your CSS files, and “compile” them into real CSS files.  Rather than using the same brown color 50 times in your CSS file, you can define a constant for that color code and use it elsewhere in your file.  You can also do things like express color codes based on other codes, such as “brown, but make it 20% lighter”.  This allows you to very quickly change the entire look of your site by just changing a few root constants.  The code is a simple JS file which can be easily run on any platform.  You can even run it on the webpage itself!  I had heard about LESS from a friend, but never really checked into it until now.  Brooks became an instant fan of the product as well, and I’m pretty tempted to re-factor all the KitchenPC CSS files into LESS files as well.

One fact I’m quite proud of is is the first real programming project I’ve done completely on my Mac.  No Windows VMs were used at all, no Visual Studio, nothing.  100% Mac created.

To host, we went with Heroku.  Heroku is the big rage in the Ruby on Rails world at the moment, and they were just bought out by Salesforce for like a trillion dollars.  It’s an absolutely amazing product, and makes deploying Rails applications crazy simple.  You can deploy your app by typing a single command line and it only takes a few seconds.  You don’t need to deal with machines or server instances, you just slide a scale up and down to tell it how many listeners you want handling HTTP requests.  It really couldn’t get any easier than that!  For the database, we went with MongoHQ which, like Heroku, is also built on the Amazon cloud.  MongoHQ can provision MongoDB instances for you on the fly and makes it really easy to manage the data online.  Heroku even has a add-on for MongoHQ which lets you very easily connect a Heroku app to a MongoHQ instance.  We’re using the free-tier of both Heroku and MongoHQ for now, so running is free.  If we ever get more traffic than the free instances can handle, it’s a simple matter of changing one setting to scale up instantly.

Our plan is to try to re-segment the Survey Monkey dominated market.  If the site gets any traction, we’ll start charging a dollar per survey.  You won’t pay anything until you actually want to see the results, so users won’t be worried about messing up or having to start over, or if no one answers their survey.  There’s also plenty of up-sell opportunities to make more than a buck off a survey, such as custom URLs, custom CSS, custom logos, or emailing services.  However, the point being we would charge per survey rather than a monthly fee like Survey Monkey.  Hmm, isn’t it strange that all my start-ups seem to compete with monkeys?

The thing I really like about this mini-startup (besides the fact we built the whole thing and launched it in a couple weeks) is it’s a great solution to a very well-known problem.  The customer base is well defined and it also markets itself.  For every survey created, probably 50 or so people will then come to the site to act on that survey.  Ideally, at least one of them will someday come back to create their own survey.  It’s quite possible we can gain some momentum while doing very little advertising.  Already, a couple hundred surveys have been created and we’ve only told a few people.  We’re planning on doing a press-release next week, which will hopefully attract some press and a good spike in traffic.

Did some pro-bono consulting work for other startups

I’ve also been spending some time with other entrepreneur friends of mine listening to their ideas and trying to help out where I can.  One thing I’ve learned in the process of building a company is I’m really not too into the “business” aspect of things (marketing, customer research, pitching, going to start-up events, etc) but I absolutely love building the architecture of a start-up from a technical point of view from top to bottom.  The more challenging the problem is, the better.  I guess this is why startups with a “techie guy” and a “business guy” seem to work so much better.  It’s incredibly difficult to wear both hats, and it’s even more difficult to shift between those roles.

One company I’ve been doing some work for is in the business of local shopping.  Like Google, they have the need to index product catalogs from various retailers across the web.  One of the things I’ve been helping out with is building these sorts of data aggregators while the founder is knee-deep in pitching, networking and raising money for her company.  I’ve been very interested in the concept of “web-crawling”, since I’d like to eventually use this sort of technology to steal import recipes from other sites, so doing this work benefits her immediately while it allows me to gain experience that may one day help me out directly.

One tool I started using is called Scrapy.  This is a little Python library that makes crawling web-sites and harvesting information incredibly easy.  I was able to get my first script up and running and downloading the inventory of a site within about 20 minutes, and I don’t even know Python!  Basically, you build an ORM to define what data you want off each page, and define rules for which links to follow.  Since your crawler is a Python script, you can use as little or as much as the library as you want.

As I grew more and more comfortable with Python, I was able to build some more elaborate scripts that would read Javascript variables on the page using regular expressions, and process XML data directly from REST methods.  It’s also fun to reverse engineer some of these big sites to figure out how they work.  So just by helping this one company, I not only gained a potential employment opportunity if they get funding, but I learned a new language and gained experience with web crawlers.  Definitely a great deal for me.

I’ve also been meeting up with an old Microsoft friend who left the borg collective along with another drone to do their own web start-up.  They’re building a consumer facing website on the .NET stack and using Azure to host.  I’ve been able to give them some great advice on full-text search, Facebook integration, and help test their private beta.  I’ve also been able to “tag along” during their incorporation process and learned a lot about forming a legal corporate entity, something I’ve had no reason to do yet for KitchenPC.  It’s been a great learning experience and a great way to keep in touch with my old Microsoft buddies.

Talking to people about KitchenPC

While away from code, I’ve had a lot of time to reflect on KitchenPC and really step back a bit so I can plan for the future.  A few weeks ago, the folks at Odd Dog Media invited me to hang out with them after work and have a few drinks and talk about KitchenPC.  These guys are huge fans of the site and are full of ideas for how to really promote my product.  I got to really demo what the site can do, and we talked about SEO and various marketing tactics that could apply to KitchenPC or any other web site for that matter.  It was also fun to see what goes on behind the scenes at these marketing companies, and being around so many creative minds.

I also met up with a lawyer at Ashbaugh Beal to talk about forming a legal corporation.  We talked for over an hour about LLCs, corporations, the difference between C-Corps and S-Corps, the Washington vs Deleware thing, how stock classes work, what it means when shares are diluted, etc.  These are a bunch of terms I’ve heard before, but I now feel I have a much better grasp of how this all works.  I’m not really ready yet to incorporate, but I think I’ll be more prepared when that time comes.  I also feel that if I join another startup, I’m less likely to end up getting screwed from not understanding these terms.

Yesterday, I invited one of my regular customers out for lunch to go over some ideas with her.  She talked about how she thought she would use KitchenPC when she first started, and how she actually ends up using it.  I told her about the reasons for certain design decisions I made, and why they were right or wrong.  I also talked a bit about some big features I’m planning to get her feedback on them.  The good news is she was quite receptive to a lot of the big changes I have planned, so I felt like I really have a good grasp on how people are using the product today.  I think I have a pretty solid direction for the site now, all that’s left is to go implement these changes and see what happens.

What’s next?

Well, I’m hoping to get back into KitchenPC and blogging – however, lately I’ve been poking around with the idea of going back to work for a while.  I budgeted enough money to take a year off, and that year was up on April 15th.  I’m hoping to at least take some part time or contract work, hopefully at a smaller company to rebuild part of my dwindling savings.  What I’d really love is to get involved with a small but funded start-up in the area who can at least pay me enough to cover my mortgage, and provide me with some challenging problems to solve.  Worst case, I’ll take a three-month gig through a contract agency for some fast cash.  I brought my résumé up to date, and posted it on a few job websites and have been getting flooded with all sorts of randomness over the past few days.  Unfortunately, most of these opportunities are back at Microsoft which I’d prefer to stay far, far away from.  However, I don’t really yet have a proven track record with non Microsoft platforms like Ruby and LAMP so I haven’t been able to attract the interest of these sorts of shops.

If I go back to the nine-to-five work life, KitchenPC will most likely turn into more of a weekend project, but I think I have a clear set of goals to work on so hopefully things will continue to get done, albeit slowly.  One of my first goals will be to blog about the major changes I have planned for the site and what I’ve learned so far as an entrepreneur.  Stay tuned!


From → Business, Technical

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: