Thursday, September 22, 2011

Lean Startups and Sproutcore

I'm in the process of reading Running Lean by Ash Maurya. It's an excellent book that I would recommend to any entrepreneur, whether they are working on the web or not.

In a society where 9 out of 10 startups fail, some thinkers such as Steve Blank, Eric Ries, and Ash Maurya have been advocating a new approach to starting companies, based on the scientific method. They've named it Lean Startups.

Most entrepreneurs build startups assuming that their initial plan is flawless. They come up with an idea, develop it in their heads, then get a team together to execute on it. Often, when their product is ready to hit the market, that's when they realize that they've built something that no one wants or needs.

The problem is that an entrepreneur's initial vision is based largely on faith and untested hypotheses. That's why most Plan As do not work.

In his book, Maurya makes the case that "what separates successful startups is not necessarily starting with a better initial plan (Plan A), but finding a plan that works before running out of resources." He lays out a systematic process for building startups that involves iterating from that flawed plan A to a plan that works, by making and testing hypotheses along the way.

He advocates first creating a plan A. No need for a lengthy business plan here. A single page document describing that plan A is enough at this stage. This document lists things such as the customer segments targeted, the top 3 problems the company will be solving, the solution they've imagined, etc... He came up with a format for this document which he calls a Lean Canvas.

With the plan A in hand, the next step is to verify that the problem the company is set to solve is indeed a problem that the customers targeted have experienced. To figure that out, an entrepreneur should conduct interviews with people that belong to his target customer segments until he understands the problem.

Once he understands the problem the next step is to build a Minimum Viable Product (MVP), which solves the problem. This is not a final product, but just a demo that the entrepreneur will use in the subsequent round of interviews. Maurya says: "The main objective is using the demo to illustrate how you intend to solve the problem, convey your unique value proposition, and test pricing." Therefore, the demo needs to be realize-able, needs to look real, needs to allow you to iterate quickly, and needs to minimize waste.

Maurya says that he himself uses Ruby on Rails to build these demos: "For those familiar with the Model-View-Controller pattern, I build my demos by going in the complete reverse order. I’ll first setup some controllers, then sketch the views on paper which I’ll then translate to HTML/CSS. The model is something I tackle only after I’ve qualitatively tested a screen and got a strong signal to implement it."

At Intellum, we've invested time into learning the Sproutcore framework in the last year. We've developed pretty good expertise in building applications quickly using this framework. As I was reading Maurya's requirement for a mockup and the way he uses Ruby on Rails to create his demos, it occurred to me that Sproutcore is a perfect tool for a Lean Startup. Let me explain.

The way we develop Sproutcore applications at Intellum is to start by laying out the User Interface (UI) the way we envision it. We can build a complete UI very quickly without the need for a backend by using data from client-side fixtures. The result is a fully functional application that we can serve from a web-server and have customers test-drive.

This approach meets the four criterias for a good demo listed by Maurya:

Realize-able

What we show a customer during these interviews is exactly what they will see when we are done with the product. There are no un-met expectations, because we are building the demo with the same tool with which we will build the final application.

Looks Real

The demo will not only look real, but the customer will be able to 'drive it' by clicking around and seeing what exactly is happening.  Not only will the UI behave as a customer would expect, but this UI will actually be backed by a data model (Javascript objects) just like the real product will eventually be built.

Quick Iterations

Sproutcore views are very quick to build, and since we do not connect these client applications with the backend (we use client-side fixtures), it's really easy to iterate quickly and change things around in the mockup. Furthermore, we build applications that are backed by statecharts. This approach tends to make it really easy to quickly refactor the code and change things around. If you've never developped an application backed by an in-memory statechart, you should give it a try. It's a really nice and agile way to build applications.

Sproutcore also ships with a good set of UI widgets that we can use to create these demo applications. This means we spend less time designing. We do not need to involve a designer early in the process because these widgets are good enough for a demo.

Minimize Waste

There is literally no waste with this approach. All the code we wrote for the demo will be used for the final product. When we've found a demo that solves the problem at hand, we can quickly go from that demo to the final product. All that's needed is to create a backend for the application, modify the client-side code to use that backend instead of fixtures, and make other appropriate changes.

To make the process of demo to real-app even faster, we've been experimenting with using and syncing changesets between the client-side application and the server. This approach is very portable from application to application as a lot of the code can be reused.

As a matter of fact, whether you are using a lean startup approach or not, this is the best process we've identified to build Sproutcore applications so we do not have to take any detours in building our application. With Sproutcore, the development process closely matches the Lean Startup approach to building startups.

7 comments:

  1. one question.
    For engineering and scientific web applications I'm using Python (scipy) as the computation engine at the backend. Can you interface this with Sproutcore frontend.

    PS couldn't find a javascript equivalent of Scipy

    ReplyDelete
  2. Sproutcore is backend agnostic so you can use any technology you want on the backend.

    ReplyDelete
  3. We are using backbonejs and coffeescript but we've observed the same things you did. Client-side frameworks definitely enable you to prototype (and also iterate on an existing product) much faster than traditional frameworks because the frontend finally is separated much cleaner from the backend.

    Shameless plug: if you are interested in tooling that supports the lean startup philosophy check out http://www.blossom.io a project management tool that we're currently working on :)

    ReplyDelete
  4. Great stuff, Luc, glad to hear it is working out for you. Really tough to get people to give feedback unless you can show them what to expect.

    ReplyDelete
  5. Hi,

    I want to start learning sproutcore to build demo quickly.

    Will you advise me learn Sproutcore 1.6 or 2.0 ?

    A big shift is done between these 2 versions.

    Thanks

    ReplyDelete
  6. Amine,

    Have you seen the Vimeo tutorial we have put out in the past. You can check it out at: http://vimeo.com/album/1459481

    Hope that helps.

    ReplyDelete
  7. This is nice post.All this post is interesting and lovely . I like this all content. Thank,s to the writer for writing this post.
    music

    ReplyDelete