How I made a simple Business Model Canvas for geekar

The power of simple python scripting is one of the themes of this blog, and now I can show a great practical example.

I needed to create something that looks like this:

geekar Business Model Canvas
geekar Business Model Canvas (click for webpage)

This is a simple HTML table with some CSS. But trying to write it in HTML would result in a lot of copy-pasting of stuff that looks like this:

<td colspan="2" rowspan="2">
<h3>Value Propositions</h3>
<div class="postit "><i>Awesome</i> AR Geek Shop</div>
<div class="postit ">Infinite shelf space for long-tail products</div>
<div class="postit cl ">Products connected to info online</div>
<div class="postit ">Products connected to geeks in other stores</div>
<div class="postit cl ">Sense of community</div>
<div class="postit ">Pleasure of random surprises</div>
<div class="postit cl ">Easily to setup mobile shop</div>
<div class="postit ">Platform for interesting promotions</div>

That’s a lot of boring and error prone copy-pasting. And I’ll need to create lots of these in the coming months.

OK, so I need to write a script that will turn this:

"customers": [x + " Fans" for x in ["Comics", "RPG", " MTG", "Anime"]] + [" Gamers"],
"values": [
"<i>Awesome</i> AR Geek Shop",
"Infinite shelf space for long-tail products",
" Products connected to info online",
"Products connected to geeks in other stores",
" Sense of community",
"Pleasure of random surprises",
" Easily to setup mobile shop",
"Platform for interesting promotions",
"channels": ["Conventions as marketing", "Retail (our shops)", " Online", "Geek events we host"],
"relationships": ["Physical", "Online Community", " Promotions", "Geek Events"],
"revenues": ["Asset sales"],
"resources": ["Shops", "Registered users", " Merchandise", "Promotions"],
"activities": ["Sales", "Marketing", " Hosting events"],
"partners": [
" Marvel?",
" DC?",
"costs": ["One time: Development", "Constant: Rent", "Initial Merchandise", "Employee salary"],

Into the correct HTML.

It’s actually really easy:

import sys
HTML = """<?doctype html>
body {
background-color: gray;
// …
.cl {
clear: left;
<h1>The Business Model Canvas</h1>
<h2>Designed for: %%s</h2>
<h2>Designed by: Aur Saraf</h2>
<td rowspan="2">
<h3>Key Partners</h3>
<h3>Key Activities</h3>
<td colspan="2" rowspan="2">
<h3>Value Propositions</h3>
<!– … –!>
<!– … –!>
POSTIT = '<div class="postit %(classes)s">%(content)s</div>'
"customers": [],
"values": [],
"channels": [],
"relationships": [],
"revenues": [],
"resources": [],
"activities": [],
"partners": [],
"costs": [],
def to_postit(caption):
classes = ""
if caption.startswith(" "):
classes = "cl "
caption = caption[1:]
return POSTIT % {"classes": classes, "content": caption}
def write(name, canvas, f):
canvas = dict((k, "\n".join(map(to_postit, v))) for k, v in canvas.iteritems())
html = HTML % canvas % name
def main():
if len(sys.argv) == 3 and sys.argv[1] == "-new":
with file(sys.argv[2] + ".py", "wb") as f:
return 0
elif len(sys.argv) != 2:
print "usage: name"
return 1
name = sys.argv[1]
module = __import__(name)
with file(name + ".html", "wb") as f:
write(name, module.CANVAS, f)
return 0
if __name__ == '__main__':

view raw
hosted with ❤ by GitHub

$ python -new geekar
$ emacs
$ python geekar

view raw
usage example
hosted with ❤ by GitHub

It’s a small command-line tool that knows how to create an empty .py file for a canvas with the correct template, and knows how to read a .py file as a python file (since this is for self-use only I’m fine with no security at all, otherwise reading it as a python file would be very unwise) and do some preprocessing and some search-and-replacin’ to get the right thing into an HTML template.

I needed to be able to control how many notes to have in a row, so I added parsing of a space at the beginning of a note caption to mean “newline before this”. I needed to write many similar notes for “customer segments” – so I used the fact that the canvas definition file is in python to just write some python that generates it:

“customers”: [x + ” Fans” for x in [“Comics”, “RPG”, ” MTG”, “Anime”]] + [” Gamers”],

And that’s all there is to it. One of my students could write this in ten minutes. From now on, something that I will be doing every day will take a few minutes less.

Is It Worth the Time?

The whole code can be found here: and the complete result here:

Lecture 1.5B: Business Models and Customer Development

Despite sharing a name, 1.5B is a very different lecture from 1.5A. I’d say it talks mostly about how we think we know things but we don’t and how we can improve our guesses.

There are many subjects covered quickly, so I’ll dive right in…

Continue reading

Lecture 1.5A: Business Models and Customer Development

In this lecture we learn about business models and about the Business Model Canvas as a tool for mapping business models.

We learn that a company is for executing a business model whereas a startup is for finding one and then becoming a company.

I fully agree with the view of a startup as a different kind of entity than a company, it is a very fresh and important realisation. However, I have a problem with companies that view the search as completely over. That’s how record companies find themselves replaced with this new kid called the Internet. If I ever find myself as Chief Executive Officer of a company, I’ll make sure to Search and not only Execute, no matter what profits that the current business model yields.

Then we get introduced to…

The Business Model Canvas

The BMC is a technique for describing a business model, a division into the most important blocks. A map of sorts. When searching for a business model, one is supposed to make an empty canvas, hang it on the wall and tape post-it notes filling the different blocks, which will then be modified many times while iterating on improving the model.

I don’t know whether the BMC is a good map – whether it captures all essential details and no inconsequential details. I’ve never formed a company and I can’t say which are the essential details. I’m taking it as sage advice – Steve has more experience than me and he’s telling me “here are the important things to notice when making a business plan”, so I’m taking his word until I know better. I guess in practice it varies a little depending on the kind of business you’re planning, but it makes sense that it doesn’t vary too much and one canvas design can fit most uses.

To make sure I don’t miss anything important, once in a while I will try to draw different projections of my business plan – perhaps as a story or a roleplaying game – as different projections tend to focus on different details.

The rest of the lecture describes the different blocks in the BMC – The all-important Value Proposition, Customer Segments, Channels and Customer Relationships leading to Revenue Streams and Key Partners, Key Resources and Key Activities leading to the Cost Structure.

I found Steve’s descriptions good but not always sufficient. I found lots of assistance from the grey text on the “Business Model Generation” Business Model Canvas PDF. Where I still didn’t know exactly what to write, the excellent descriptions and two examples (spot ’em) in the free preview of the Business Model Generation book clarified it for me.

To get a good feel of a new idea, it is always a good idea to practice a bit:

Franchisee for Coca Cola

This is my guess of a business model for a Coca Cola franchisee. It was evident while working on this that when dealing with products that have complex distribution chains, there is need to flush distribution channels better than the canvas allows. To partially solve this, I treated distributors also as clients and partners where it was relevant.

Waze Mobile

For those who have never heard of Waze, they make crowdsourced GPS navigation software for smartphones, which is one of the products with most value I’ve ever seen. Once again, I needed a bit more separation between two kinds of clients – users and advertisers, which are treated very differently. Also, I had to guess more because the internet can tell me less about their business practices (and it’s getting late).

Finally, my own toy business idea, Python For Everyone:

Python For Everyone

I highly recommend reading the links introducing the plan. Readers who don’t usually ask questions that are answered in there.

As you can see, I have lots of different entities gaining value, and needed a way to encode what relates to which of them in the right side of the canvas. I chose color coding, and I think it works pretty well. I’m not sure I decided correctly to include the possible future venture of training technology companies.

All in all, I think I like the Business Model Canvas as a map of my business. It made me think about many aspects of my business and feels like a good map. Time will tell, when I try to update it, how well it works for iterating on a changing business model idea.

Python For Everyone: Business Model Canvas – Iteration 1

The first iteration of my Business Model Canvas is done:

There is so much information contained within the form and content of this canvas that I think analysing it would only lead to information overload. Read it slowly, as if trying to find flaws in my plan, carefully noticing all the color coding and how blocks relate to each other. Start at the value proposition, through the customers and partners, towards the customer relations and channels, then the key resources and activities, and sum it up with the costs and revenue streams.

I will greatly appreciate feedback and discussion.

Python For Everyone: Business Model Canvas

I’m working on my Business Model Canvas.

I’ll have to continue working on it later, so here’s a job half-done:

I will upload a higher quality version of the final version, when it’s ready. This is just to whet you guys’ appetites (and introduce some alien thoughts into the thinking stage).

Note: I highly recommend working with paper, working in Inkscape has been quite a horrible experience and I do it only because my printer isn’t functioning.

Edit: I got some thought provoking comments on the boards, which made me find some errors and places where I don’t convey information well, so I uploaded a fixed version. Nothing major. Also, I am considering using mind mapping software for this.

Already Made It

Do not miss this series of posts by Kahlil Korazo, in which he tells his experiences teaching the Lean Launchpad based only on public resources.

Kahlil decided to teach the Lean Launchpad because he wanted to study it and there wasn’t a course avaliable nearby. Teaching is indeed the best way to learn. It is, however, very demanding. Most people wouldn’t have followed through with such a plan, and I applaud Kahlil for it.

He had to set things up with a local university, find people who want to learn and have the skills needed to apply the material, build a course schedule based on reverse engineering presentations that Steve published, recruit the best entrepreneurs and VCs in his area to mentor, all while following the class curriculum himself.

And we get, for free, to hear a teacher’s insights to the material, which tend to be and in this case indeed are much more advanced than what you get as a student.

Worth a read.


I personally also got from it an interesting discussion of The Flipped Classroom and methods of teaching in an internet age, which will be very useful to my project.

Lecture 1: What We Now Know

“The only fallacy in that is that you assume your first customers will be in the mainstream. It turns for most startups your first customers are going to be crazy people like you.”

I would summarize lecture 1 as stating, “This is how a big company does things, it is irrelevant to startups because it rests on the assumption that you know what your customers want”.

Continue reading

Python for Everyone

As I explained before, the ability to write code is a superpower only recently discovered by humanity, and as far as I know there is not one state in the world yet where every child learns how to code – as opposed to other more established superpowers like math, writing and cooking.

It will happen soon. Perhaps sooner than it would have.

Every Child a Jewel (or: Give a Child a Snake)

For the Lean Launchpad class I will be searching for a successful business plan for teaching all our children to code in a simple language like Python or Ruby.

This is a philantropic project – I could make more money elsewhere, but I care deeply about kids learning how to think – but is nonetheless planned as a for-profit, as I believe those are much more sustainable. It might or might not get executed, depending both on the results of this research and on personal reasons that will only clear up when I finish the project I was talking about in the last post. For now I’ll treat it as a serious exercise.

Is the Product Feasible?

I’ve had experience lately teaching very advanced programming material to many different crowds, including secondary school children. I took two hours of material, spent weeks distilling the perfect way to teach it – fun and engaging, requiring no previous knowledge – and then practiced in front of many groups.

That last step turned out to be the critical one. The first time, I taught a crowd of experienced programmers and had about 50% participating while the other 50% couldn’t follow. The second time, I taught a less experienced crowd and had 95% engaged, following and actively participating. When I first reached a completely non-technical crowd, I had it down so well that I had 100% engagement and active participation.

I believe if found a way to teach children advanced topics in assembly language programming in one two-hour workshop, I can definitely find a way to teach them Ruby or Python and make it just as engaging and fun.

Is the Business Feasible?

There are many factions that would profit tremendously from this offering. Some of them have very deep pockets.

Can they be reached? That’s what the class is for. I guess we’ll find out together.

Why Am I Here?

I’m taking this class to get ideas about starting up bouncing in my head.

I have a project to finish that is very similar to starting up except in a very unusual market, and when I finish it I’ll try my hands at the big ol’ free market. Since at work I only think of my own strange market, I don’t want to get too used to its peculiarities.

Thus, I took this class as a place where I’ll hang out every evening after work and hear lots of stimulating inputs, from Steve and from fellow students, which will get me to think about the problems I’ll be facing next year.

The good part won’t be watching videos and getting a certificate. It will be spending a while thinking through every interesting idea I hear in lectures or on the forums and developing my opinions on the blog. (As an unexpected bonus I also get much-awaited writing practice).

I’ll look forward to develop interesting conversations that touch (sometimes very lightly) upon the subjects studied in class, probably in the comments on this blog.

Get a feel for the course strategy

I recommend reading stories from Steve’s past rather than posts about Lean Launchpad on his blog. Don’t worry, he mentions course material and structure enough in those that you’ll get a good feel of that too.

The best advice I can give about going to university is to pick a university textbook on your major and read it before committing to that major. Usually subjects studied seriously turn out to be very different from what we imagine them to be (especially from what they were in high school).

So by now I’ve already read a few pages from Steve’s blog, even before seeing it recommended in the lecture (So far I’m really liking how his didactic approach is so similar to mine).

In this case, I feel that getting a feel for the course is synonymous with getting a feel for the instructor. And from what I’ve read, I recommend reading stories from Steve’s past rather posts about Lean Launchpad. Don’t worry, he mentions course material and structure enough in those that you’ll get a good feel of that too.