Why GPL?

Recently I received an email suggesting that I change the license for RapydScript to something other than GPL. I understand that no matter how powerful, a language is useless if no one wants to use it. That’s why it makes sense not to keep it proprietary, it might have worked for Oracle back in 1977, but it will no longer work today. You might be able to convince corporations to use your platform, but not people working on hobby projects. Likewise, the GPL license might scare those who intend to write commercial software. This is not my intent, I do not wish to hurt either group, which is why the RapydScript libraries are already licensed under Apache license. Part of the fear of the GPL license comes from misunderstanding its terms (especially by those not used to dealing with open-source). The work created using a product under GPL license is not itself subject to GPL license. This is important, GPL is not a cancer that keeps spreading through your tools to your product. Rather, GPL is a way to protect your own work from getting stolen and repackaged as someone else’s for profit (i.e. Cedega building upon Wine). Basically, GPL is a way to protect open-source work from plagiarism.

This protection becomes even more important when the plagiarist has the ability to hurt your project in some way. He could steal your product and then damage your ability to work on your own branch of the it in an attempt to get rid of the competition. For example, imagine that a fictional ACME Corporation writes an operating system. People try it out, they like it, and soon all devices end up running it. Years go by, ACME becomes rich, and many of the devices evolve. Instead of rewriting the OS for new devices, however, ACME decides to keep patching the original OS. They also realize that they could outsource part of the development to further cut costs. Eventually ACME OS code becomes an unmaintanable mess, and the software itself becomes buggy. Then a few guys, frustrated by the bugs in ACME OS, develop an alternative operating system in the basement of their home, call it FREE OS, and release it as open-source. FREE OS immediately becomes popular. ACME, noticing a loss in its profits, decides to repackage FREE OS as a new version of their own. This in itself might hurt FREE OS by stealing its users (and removing the incentive for developers to work on it). But even if FREE OS already got enough traction such that people stick with it, ACME, having much bigger pockets, could go to hardware manufacturers and pay them to add DRM capability using piracy prevention as an excuse (ironically, piracy is exactly what ACME is doing). ACME could then add a proprietary driver to their OS that is able to play files encrypted with this DRM.

Fortunately, RapydScript is not an OS, and as a language it’s not in danger of being affected by a DRM. That doesn’t mean it can’t be ruined by a corporation, however. The compiler aims to generate fast, lightweight code, compatible with various JavaScript obfuscation mechanisms (it should in theory be compatible with advanced mode of Google Closure, although I haven’t tested this). In fact, the new version of Grafpad itself uses an obfuscator based on RapydScript code (which I haven’t released yet) in combination with UglifyJS. The only thing preventing a 3rd party from coming in and selling their own proprietary obfuscator/optimizer based on RapydScript code without contributing anything back is the GPL license of the compiler. This in itself would not actually hurt the language, but if they start breaking backwards compatibility with RapydScript, that could in fact hurt the community. Once the RapydScript community grows and the language gains some initial popularity, this will not be as much of an issue anymore (the obfuscator will be unlikely to gain traction without full support for RapydScript). At that time I won’t mind changing the license to Apache for the entire project.

I’m not strongly attached to the GPL license, and the libraries are already licensed under Apache, allowing companies to build their own private implementations on top of them. Only the compiler itself is licensed under GPL, and I want to encourage that code to stay open to benefit everyone. GPL seemed like the right license for the job. So far the arguments I hear against GPL from other developers are either due to it being used in the wrong places (the APIs/libraries) or unfounded paranoia due to misunderstanding how the license works (people assuming that work created via GPLed product is subject to GPL as well).

Eventually, I do plan to release both, RapydML and RapydScript under Apache license. If you believe I should do so now, I would love to hear your argument. As of yet, I do not see a legitimate case of how the GPL license could hurt a company deciding to use RapydScript (aside from their legal department getting paranoid about the ‘GPL’ acronym). If they wish to use RapydScript as a compiler to create proprietary work, the GPL license does not affect their own code. If they wish to reuse RapydScript libraries in their proprietary code, the Apache license of the libraries will allow them to do that. If they wish to make changes to the compiler that will only be used internally by the company, the GPL license will not affect them. If they wish to release a stand-alone tool to be used with RapydScript, RapydScript’s license does not apply. If they wish to make changes to the compiler that would affect the rest of the community, then they have to release the source code for these changes.

Lean Startup Challenge: Weekly Reflection 4

AdWords
Last week, some members of the Lean Startup Challenge (including me) attended an AdWords workshop by Google. We were told some basics about how to use the ads, that it helps to group the keywords into categories with other similar words, and that a good click-through-rate to aim for is 1%. This week I started using Google AdWords. I’ve also managed to learn a few important lessons about the AdWords system that weren’t covered during the workshop.

For example, the ad “quality” for a given keyword (which is actually more like a keyphrase) seems to depend on how many words from the keyword appear in the ad itself. At first I didn’t realize that, thinking I’d bundle all diagram-related keywords under my diagram add, figuring that the people seeing the ad would understand that UML is a type of diagram. Unfortunately, Google penalized my quality score heavily for not having “UML” in the ad. I now have 3 different ads with 51 enabled keywords (a good rule of thumb is to have about 15 keywords per group and a unique ad for each group) and seem to be doing better in terms of my quality score. For those unfamiliar with Google Ads, quality score factors into the ads position on the page. Bid amount is the other component that factors into the ad position. So if you want your ad to appear at the top (where it’s much more likely to get noticed), you can either improve the ad quality or throw a lot of money at it. However, if the quality is too low for a given keyword, no amount of money will force the ad to show up (McDonald’s for example, will never show up when you’re looking for a new laptop).

While the quality score depends on your ad alone, the position of the ad also depends on quality of the competition (as well as the size of their pockets). As a result, I started sometimes ignoring the quality score if my rank is in the top 3 and I am getting clicks from the keyword. Other times my quality score is high (7/10) but I get no clicks and Google throws me in position 11. In those cases it’s time to disable the keyword before the quality score drops. Playing with AdWords is a lot like tweaking the skill points of a character in RPG, you don’t control the damage output directly but it’s a combination of dexterity, strength and a number of other factors that you might not be able to control. The trick is to test out your build in a real environment and analyze when you’re seeing diminishing returns.

There are also some important gotchas I stumbled into that hurt my click-through-rate quite a bit. First of all, don’t use generic single-word keywords, no matter how high your rank/quality is for them (there are probably exceptions, just that this didn’t work for me). For example, somehow I got a quality score of 6/10 for the term “graphics” and I also had position 3 for it (despite it seemingly being such a popular search term). I was very happy about this and let that keyword run for the first day. When I checked my campaign the next day, this keyword got over 8,500 impressions, but only 20 clicks (about a 5th of the 1% Google recommends). My other keywords were barely shown at all since this one was so much more popular in search terms. Out of those 20 visits, I’ve received no sign ups. Needless to say, that was the first keyword to get disabled.

The second gotcha I ran into is display network. These are the ads that appear on other people’s blogs, websites, and news stories. Google recommends leaving them on for inexperienced AdWords users (so that your ad can appear in those places as well), and I did just that in the beginning. I was told at the AdWords workshop that the click-through rate for display network is lower, somewhere around 0.3%, so I was expecting less clicks there. I figured that whatever clicks I get there would just be a bonus. So the next day (after disabling “graphics” and other generic terms) I noticed that the number of impressions for my other terms on Google has not increased too much, but I managed to get about 9000 impressions on display network, with only 1 click-through. That’s when I decided that display network needs to go before it hurts my quality score on Google as well. My guess is that the click-through rate is this low because people are actively engaged in the website, whereas with Google they’re still searching for something to engage in. It’s a lot easier for the ad to be more interesting than other searches than the article that the person already clicked on.

After addressing those issues, my campaign started doing a lot better. I get less impressions now, but my click-through rate is way higher, not to mention that visitors actually sign up to use Grafpad. I still check my AdWords account every day, disabling words for which my position is low and tweaking my ad wording if I see a trend of all keywords getting a low quality vallue compared to my other ads.

App and Website
There haven’t been major changes to Grafpad this week, I have been slowly fixing bugs and other annoyances however. I also observed several first-time users play with Grafpad, which was even more revealing than reading the feedback. I noticed, for example, that several users got confused with how right-click works. They expected that right-clicking outside of right-click menu while it’s active would close the menu instead of opening it in a new place. Perhaps I need to replace the right-click menu with “figure” menu that becomes active when a figure is selected (the menu can either appear inside the selection box or above the two other menus).


Metrics
Acquisition: 0.17%
There were 34 visitors to my website this week out of 19,878 who saw the ad impression. As I mentioned earlier, it was the use of generic terms and display network that hurt me the most (costing me about 17,000 impressions with virtually no clicks). I believe next week I will be getting much closer to the 1% click-through Google recommends. Already I’m seeing 2-3% click-through for some search terms I’m using.

Activation: 14.71%
Since I haven’t done anything this week to improve activation, I would say that last week’s experiment is confirmed. Giving people free storage and comparing free account to paid one on main page does improve activation rate.


Retention: 40%
Out of 5 people that signed up this week, 2 used their account more than once within the same week. I still don’t want to draw any conclusions since the percentages are marginally different between the weeks and the number of people is in the single digits.

Referral: 0%
No referrals again, although I do seem to be getting more and more people following me on twitter. I’m not sure whether it’s my blog, Grafpad, or simply common interests.

Revenue: 0%

Plans for Next Week
I started trying to add touch-gesture support to Grafpad last week, to make Grafpad usable with iPad and Android devices. So far I’ve been unsuccessful (I tried to add it cleanly via Pyjamas, the same way mouse and keyboard handlers work). Next week I might try adding it via a hack, a Javascript hook that triggers Pyjamas mouse handlers. I’ve been getting a lot of feedback about making my app iPad-compliant. If I can at least add partial support for that, I can gauge the popularity of that idea. I do believe iPad market could be its own niche, and I want to try concentrating on it since many people don’t seem to like drawing with a mouse.

Lean Startup Challenge: Weekly Reflection 3

At the end of last week, Lean Startup Challenge started eliminating teams. Luckily, Grafpad is still in the challenge, but things are getting harder. I’m excited to see that there is a group of users that keeps coming back to use Grafpad repeatedly, but this group is currently pretty small (less than 20 people). There has also been a number of suggestions for Grafpad improvements. Two of the most popular ones are ability to collaborate on the same file online and being able to use Grafpad on a tablet PC. I want to assure the readers that there are definitely plans for collaboration system and touch screen functionality is already being worked on, but both will take some time to implement.


Second, I wanted to talk about the changes made to Grafpad during the current week. The biggest change some of you might have noticed is the new interface, or rather new icon theme.

I have been getting some complaints that the old icons were tiny and hard to see. I think the new ones should be a lot more descriptive. I am, however, considering adding ability in the settings to switch the icons to smaller size for those with less real estate on the screen (netbooks, for example). The second change is the color scheme, it seems like orange and black works a lot better than pink and purple. Now that the main page has already been changed to the new color scheme, modifying the app itself to be consistent was a no-brainer.

The second change many of you might be aware of is that I decided to let free users store one SVG file per account on our server. I’m still trying to decide whether this will be a temporary, promotional service during the alpha or if I will allow those who sign up later to use it as well.

I want free users to enjoy the app, but this is a business I’m trying to run after-all, and it doesn’t look like ads alone can pay the bills yet. Speaking of which, as part of this week’s changes, ads now do appear in the app as well.

Another change, that many users will probably appreciate, is that I finally managed to fix zoom on Safari. While at it, I added some other minor enhancements to zoom as well, one of them being a text box that allows the user to zoom in/out by typing in zoom percentage.

Metrics
This week’s metrics were trickier to gather, there were a lot of inconsistencies and I had to rely on internal web2py hooks to obtain accurate data rather than KISSmetrics or Performable. Maybe the guys running those services didn’t like what I said about them last week and decided to take revenge (I’m joking). Most-likely, it’s actually flaws in the way I’ve been measuring the data that are now getting exposed as I get more return visitors.

Acquisition: 0.58%
There were 111 new visitors to the site this week. However, this week the main source of visitors was from an announcement on Linked In Python Community group. The group has 19,121 members, but the chances of a member seeing the announcement are pretty slim (they don’t get shown to the members unless they happen to be visiting the group during the 2-day period that it stays on the main page). Many people are members of 30+ groups and visit Linked In less than once a week, let alone one of the groups there. So I definitely would not trust that all 20k members saw the announcement (probably less than a quarter of them actually saw it), but this is the only data I have, so I will have to go with it.

Activation: 9.91%
There were 11 new registrations this week. In a proper statistical experiment, I wouldn’t trust a data set this small. Unfortunately, it’s the only data I have to go on now, and it’s double the percentage from last week. I will leave this experiment running for another week before making a final decision, but it does look like changing the look and giving users free storage increased the rate of new sign ups.

Retention: 36.36%
Out of 11 people who signed up, 4 of them logged in more than once. Last week, 5/14 people signed in more than once. Just as last week, I don’t think this data is statistically significant. I must admit, however, that people who signed in before, seem to be returning more now, there were 38 return logins this week.

Referral: 0%
It still seems like no one is spreading the word about Grafpad yet, it’s possible that some people are, just not through the social media links.

Revenue: 0%
Looks like Ramen noodles for me this week again.

Plans for Next Week
Next week I plan to try using Google AdWords for acquisition instead. It’s becoming clear that my current methods alone don’t seem to be working anymore. I’m also thinking of removing the extra steps from sign up process to encourage better retention rate. For example, instead of showing users the EULA and asking them to finalize the registration through their email, it might make sense to just give them a link to the EULA and allow them the first login without having to do email confirmation. I’m also not getting as much new feedback about the app anymore, so I might need to start actively asking other engineers, students, and designers (the target audience) about the kind of functionality they’re looking for (either through forums or meetup groups).

Lean Startup Challenge: Weekly Reflection 2

For redundancy, I’ve been running Google Analytics and KISSmetrics along-side Performable the entire time. One thing I noticed is that all 3 seem to be tracking visitors a bit differently, so I wouldn’t rely on just one of them alone. Performable, for example, has been over-reporting new visitors and under-reporting returning ones (there have also been blatant inconsistencies in the numbers it’s been reporting the last 2-3 days, although it’s been accurate before -it’s possible that it’s getting confused by my new website). KISSmetrics has been hiding the visitors who navigate the funnel in a different order than it expects. Google Analytics is delayed by 1 day and doesn’t seem to have the idea of funnels. For a more detailed comparison, check out my blog after the competition is over, I will be comparing all 3 in much greater detail.

But before I jump into the metrics I wanted to go over the changes/experiments from this week. Last week I realized that people were getting confused by Grafpad, both the website and the app itself. To remedy that I have made a number of changes to the website, as well as the app.

Website
I’ve gotten some very useful qualitative feedback about the website last week. There were recurring patterns in the feedback, which is what I concentrated on addressing first. The original paragraph on the old website, for example, would tell the user that Grafpad is now live and he/she is free to try it. It doesn’t, however, tell the user what Grafpad is and why the visitor should care about it. In other words, it doesn’t pass the 5-second test (which is about how much time a typical visitor will spend on the site unless there is something to grab the attention).

The visitors also mentioned that the page felt a bit plain, and doesn’t feel like a website. So after browsing around the web for a bit, looking at other websites, such as http://yamlabs.com/http://www.memrise.com/welcome/, or http://www.lucidchart.com/, I started noticing that many websites have 3 main bullets or options to grab the user’s attention on the main page. I decided to rearrange my bullets to do the same. The results of my tweaking can be seen below.

I’ve essentially picked the 3 key features of Grafpad people were getting confused about last week and moved them to the very top. The other features I’ve put in a slideshow container right below the main menu, figuring those features are secondary and many first time visitors might not even pay attention to them. I’ve also added a feedback form at the bottom of the page (not visible on the screenshot above) to let users mention their first impressions. So far, however, only 2 people have used the form, which leads me to wonder if I should move it closer to the top of the page.

As I mentioned earlier, I’ve been running Google Analytics on my site during the entire duration of the competition. It has a very nice feature, tracking the most popular search results that lead visitors to your site from Google. One thing I noticed last week is that the number one keyword was the IP address of my website. And some of you might remember that the domain name would change to the IP as the page would load (the issue occurred because we were using port 8000 instead of the regular port 80). My theory is that people were searching for the IP because they were assuming it’s a phishing site, and wanted to confirm that it’s not the case using Google.

Since then, I have moved my hosting to Amazon, and as you can see from the screenshot on the left, the IP address is no longer the most popular term. In fact, the number of searches for it has not increased at all since URL issue has been fixed.

Application

The application also got a few minor enhancements based on user Feedback from last week. One of the first changes you’ll notice are the help bubbles that now pop up whenever you try to do some action for the first time that has confusing features.

I’ve gotten a lot of positive feedback about them, and I’m thinking of expanding them to cover help in more detail soon. At the same time I don’t want to swamp the user with help messages, because then he/she is not likely to read them either. Perhaps I should delay some help messages until the second time user plays with the application? I’m open to suggestions.

In addition to the help bubbles, I’ve modified success/fail messages to appear in similar bubbles for the sake of consistency. I’ve also done a bunch of minor bug fixes and interface changes since I got feedback that the login/sign-up prompts looked a bit plain. I definitely did not have as much time as I’d like to work on the app this week. Between addressing various usability issues that the users brought up and meeting with other entrepreneurs/groups this week to get a better understanding of what people actually expect/want from an application like Grafpad, I barely even had time to sleep this week.

This week we also setup a Facebook page for Pyjeon (the name of the company, since Grafpad is just a product name) to further help improve the awareness about Grafpad.

Metrics
Now that we’ve covered the basic changes for the week, let’s talk about the quantitative data. I have to admit that it seems like a week is not long enough of a period for this. The metrics feel like they lag by a week when compared to my actions (the demo, for example, which I put up in the middle of last week, has hurt my sign-up rate for this week).

Acquisition: 7.15%
This week’s acquisition rate was significantly lower than last week’s. Out of 3000 people who could have seen the website on Web2py mailing list, 70 in the Front-End Meetup where I was doing a short talk on Pyjamas framework yesterday, and over 1400 friends on Facebook between me and my sister,  there were only 324 visitors to the site. I should also mention that Facebook seemed the least effective, with Web2py being the most, judging by daily numbers (I staggered the announcements to be able to measure their effectiveness). I suspect part of last week’s acquisition rate might have been the hype I built up about Grafpad during the months when the landing page was active but the web app was not yet available. I also think the number from last week might have been inflated since I was not able to get the member count for Pyjamas mailing list, but instead had to base my counts on the members who post on the list (as I mentioned last week, people who just read it and don’t actually post didn’t get counted).

Activation: 4.32%
As I mentioned earlier, after putting up the demo, the number of sign-ups dropped significantly. This week the demo has been up for the entire week, and I believe that’s one of the main reasons why the sign-up rate is lower. Nonetheless, it’s better to show the user right away what the app is about rather than forcing them to sign up. Even though only 14 people signed up this week, the number of people who tried the demo is an astonishing 140. I believe this could also be due to our audience. Many people coming from Pyjamas and Web2py mailing lists are curious to see how the technology they use is  used at another project, but that doesn’t mean that they want to use the product (this could also explain why the mailing lists are a lot more effective at getting people to come to the site than something like Facebook). It’s also possible that people don’t see a the advantage of having an account over the demo. I’m considering allowing free accounts online storage, but I feel that it would discourage people form getting a paid account (although it’s not like anyone has gotten a paid account anyway).

Retention: 35.71%
Five people who signed up this week have come back to use Grafpad more than once during the same week. I believe there are too few users to be trying to analyze this metric. Last week there was only 1 more person coming back than this week, so the fact that this number dropped does not necessarily mean that Grafpad is doing worse on retention.

Referral: 0%
It’s pretty disappointing that people are not mentioning Grafpad to their friends. It could imply that the app isn’t as great as I originally thought. It’s also possible that the sharing last week was actually a result of the landing page building up the hype for several months (similar to the acquisition metric). At this time I’m not sure what I can do to improve this metric, and I believe it’s more important to concentrate on the other metrics first, since they’re not doing too well either.

Revenue: 0%
Just as last week, no one has signed up for a paid account yet. As I mentioned before, I think I need to improve other areas of the funnel before concentrating on this one.

Plans for Next Week
Next week I will be trying other acquisition channels to test their effectiveness as well. I’m thinking of using Google AdWords, for example, or mentioning Grafpad in other forums/mailing lists (perhaps non-technical ones to test my hypothesis that people are visiting the site only because they want to see how we’re using Web2py/Pyjamas/Python).

I also want to improve activation. Perhaps I should give users more benefits for having a free account, or maybe I should set up a temporary promotion for users who sign up now. Maybe I should lay out the benefits of having an account on the front page (this might also help with getting users to sign up for a paid account).

I must admit that I’m a bit worried that my metrics actually got worse this week. But I’m not discouraged by this. This is an experiment after all, and not everything I do is guaranteed to improve my conversion funnel. The point is not to be right, but to realize when I’m not, and adjust accordingly the week after.

Lean Startup Challenge: Weekly Reflection 1

Now that the first week of the challenge is coming to an end, it’s time to look at the results and analyze what they mean (I’ll be doing this every week). Whereas my earlier post concentrated on the qualitative feedback, this one will concentrate on my observations of the quantitative data and define goals for next week.

Acquisition: 40.86%
This is the most bizarre metric. In this week I’ve received a total of 190 visitors to the website out of 465 that could have actually heard about it (by my calculations), since I only mentioned Grafpad so far through word of mouth (and as I found out, my sister helped too), twitter, blog, and Pyjamas mailing list. According to Google Analytics, there were 57 visitors to my blog during the same period, about double the average. Which leads me to believe that the 465 is also a bit inflated since I can’t tell if those  people came to my blog from the website or the other way around.

I will admit, however, that there are some inaccuracies in these numbers. For example, since Pyjamas mailing list does not reveal the member names in one nice list (correct me if this is wrong), I instead took all the emails from the duration I’ve been signed up for the list, downloaded them to my local machine through Thunderbird, and wrote a quick Python script to parse out the name of every person who has sent an email to pyjamasdev. It returned 150 names. Obviously the number is inaccurate, since there could be lurker members who do not send emails, but read other posts. There are also members signed up with multiple email accounts, and there are members who have posted throughout the year but have since left the mailing list.

Overall, 41% is a very high number, and not representative of what I expect to see when advertising through Google AdWords or a similar service. It’s quite possible that the number is only this high because other Pyjamas developers wanted to see what another member of Pyjamas community is up to. The number is probably also inflated because I’m underestimating the number of total people who heard of the website (it’s hard to see the true number of impressions when you’re not dealing with actual ads). I suspect this number will drop dramatically as I start advertising rather than showing it to communities that already know me.

Activation: 7.37%
This is an interesting metric. Two people signed up on day 1 (Tuesday), 8 people on day 2, and 4 people on day 3 (Thursday). Thursday was the first day that the demo was up, and in that one day 14 people tried the demo. I suspect that having the demo actually caused the number of sign ups to go down, since people no longer needed to register to play with Grafpad. On the other hand, the demo is a good indicator that there are a lot more interested people than just those who sign up for an account, most just don’t want to bother with registration.

I’m sure there will always be people who try the demo and leave, but the fact that so few actually register is in my opinion further reinforcement of the feedback I got earlier (that users are getting confused by the interface and leaving without registering). I will need to address this for the upcoming week.


Retention: 42.86%
The number of returning users so far is 6. I believe it’s too small of a sample to make any conclusion about retention rate. I’m not surprised that I got 6 people returning, the same people who went through the pain of registering are likely to come back at least once.

Referral: 1.58%
I was hoping this number would be much higher, if for no other reason than the novelty factor alone. Not every day you see a website intelligent enough to figure out what you’re drawing and help you out with it.  My goal is to get this number a lot higher. I think the same fixes that improve activation will improve referral as well. After all, if a user doesn’t like the product enough to register for it, he’s not likely to send it to friends either.

Revenue: 0%
No surprises here, I need to make the product addictive enough for the free users for anyone to even consider upgrading.

Goals for Next Week
For next week I will need to significantly improve the activation rate. While I do not yet plan to make big changes to the interface, I will need to work on a first-timer help module that will detect certain user actions and give advice regarding the areas of confusion from this week’s feedback. I will also need to add a feedback form to the main page, as well as clean up the front page so it looks more like a website and less like a landing page. I believe those two items will imrove both the activation, and the referral rate.

Reflecting on User Feedback (Lean Startup Challenge)

While Grafpad has been slow in terms of getting visitors (as most sites initially are), those visitors have been really great about feedback and even finding creative ways to give it to me (Twitter, Linked In, forums, Email). This made me realize that I’ve made it very hard for the users to provide feedback. It would probably make sense to add a feedback box directly to the main page.

Additionally, based on feedback itself it seems like the main page needs an overhaul. From the feedback I’ve gathered, it needs to be cleaner, more sexy, and less confusing. It also needs a “Try Now” button (and I knew I’d need to add one from the start, there is no excuse why it’s not there yet).

As far as the web app itself, I’ve gotten feedback that some of the things are not as intuitive as I thought. The menus, for example, will eventually need a complete overhaul. Due to their proximity, a couple people have mentioned that they don’t associate local bar with global bar. Since local bar is directly related to the currently selected option in global bar, that can be pretty annoying to the user. It probably makes sense to combine local and global bars into one.

Another area for improvement is right clicks. Currently Grafpad relies on right-clicks to rotate figures, modify figure and page properties, as well as perform undo/redo actions (it also supports keyboard shortcuts but from what I’m seeing not as many people use them as I thought). This seemed like a non-issue before a Mac user tried Grafpad (obviously, no right-click). To remedy that, the version I will be deploying in a bit allows Ctrl+click as well for all right-click operations.

Also, some of the keyboard shortcuts I implemented don’t even map to the same keys on a Mac. Delete key for example, is replaced with Backspace (they’re the same key on a Mac). One of the users also expected the color menu to apply to the figure when a figure is selected. That’s actually a pretty intuitive feature and I’m surprised it hasn’t occurred to me.

The good news is that some of these changes are minor tweaks that I was able to implement last night. For example, I moved undo/redo options to the global bar. Color menu now applies to selected figure (or document itself when no figure is selected in selection mode). While local bar and global bar are still two separate bars, I have stacked local bar on top of global bar to let the user know right away that they’re related. I must admit, it does seem to make a lot more sense now, the users were right. I also fixed several minor bugs I never caught myself but the new users were able to find within minutes of using the app. I will be deploying a new version of Grafpad with these changes shortly. If you haven’t yet, please give Grafpad a try and if you have, please keep playing with it as I improve the interface.

Also, I wanted to thank @leonartdesign and @lucchase for helping us spread the word about Grafpad by twitting about it.


Grafpad is now live! (Lean Startup Challenge Update)

Grafpad is now officially live. The .com address is still linking to the old landing page because I’m having some problems with NameCheap’s DNS servers (they’re saying it takes their server up to 72 hours to change to a different DNS), so as a temporary hack I’ve modified my Unbounce page to link to the main Grafpad page. Grafpad.net works correctly, if you want to use that link instead. You can sign up for a free account, and start using it now.

As part of the Lean Startup Challenge, I have setup various metrics using KISSmetrics to track the 5 Pirate Metrics I mentioned in my last post. For the most part it was pretty easy. The only part I struggled with was tracking YouTube views, so I will write another blog post about how I set that up later. For this week the goal is to start getting visitors to the site, so I’d appreciate it if you guys helped me spread the word.

To get a better understanding of what users want from Grafpad, I’ve also asked current alpha testers for their opinion on it. Only a couple have replied so far, so I’m not seeing a trend yet. I don’t really have much of a budget for ads, so I plan to work on my “acquisition” through the word of mouth.

As I mentioned earlier, I plan to primarily concentrate on activation and retention throughout the challenge. I’m treating this week as a control group for the experiment. The goal for this week is to get people to the site and see what my current conversation rates are, so that I have something to compare to in the upcoming weeks.

As I mentioned, the point of this week is to set up the conversion funnel correctly and get meaningful information. For that I’ve tied each Pirate Metric to a specific event at my website. Here is how I’m tracking each of the 5 metrics right now:

Acqusition: A visit to the main page

Activation: Sign up for a free account

Retention: Repeated login into the account

Referral: Sharing the website URL via the social buttons on the page (Twitter, Facebook, etc.)

Revenue: Upgrade to a paid account after playing with the free one

There are also some other metrics I use to judge user interest, such as users watching the YouTube video (as I mentioned earlier in the post). As I go through the competition, I might tweak the way I’m measuring these metrics as I make updates to the website.

Lean Startup Challenge Kickoff: Introducing Grafpad

For the last year or so I’ve been working on a hobby project of mine called Grafpad. Grafpad is a web app that runs completely in a browser and lets the user draw legible diagrams, wireframes, logos, and other vector graphics by hand. The app is essentially a piece of paper with brains, it uses image recognition to beautify the sketch as you’re drawing it. You can draw your concept as easily as you would on a white board, with the added benefit of not having to recreate your image in PowerPoint, InkScape or Visio when adding it into a presentation or a document.

Until recently, I tried to work on Grafpad and my startup called Pyjeon in stealth mode but learned that it’s one of the easiest ways for a startup to fail. Most startups today don’t fail because of technology limitations, but rather from lack of customers (or more specifically customer fit). Having learned about the Lean Startup Competition, I decided to use this 6-week challenge as an opportunity to turn Grafpad development on its head to see how my product can benefit from this.

For those unfamiliar with Lean Startup concept, it’s based on the observation that most learning about customer needs happens after the product is released. So if you shorten your release cycle, you can adjust your product much better to your target customers. Running a startup is essentially a race, where you try to achieve the right customer fit before running out of money and/or time.

The problem with typical projects is that it takes months (or years) to release the product. As a result, very little learning about the customer needs happens until the product becomes hard to modify. You can keep rolling out new versions or service packs, but if there is a fundamental problem with the idea itself, you’ll have to abandon ship eventually and pivot to a different concept. This can be a disaster for someone who spent years working on a concept that has no need

That’s where Lean Startup process comes in. The idea is to shrink down the amount of time needed for each cycle and allow you to iterate through your versions faster. As an added bonus, you can test how much the customers like each feature/tweak individually by comparing the product adoption rate between weeks when those features were added.


To measure that adoption rate, I will be using Dave McClure’s Pirate Metrics (they’re called so because they abbreviate to “AARRR”). Each week I will be running an experiment by tweaking Grafpad product itself or the website to see if it improves either of the 5 metrics. I will be updating my blog every Sunday with a summary of results from the previous week and talk about experiment I plan to run during the upcoming week.

During this competition, I plan to concentrate on activation and retention rate, but will be measuring all 5 of the metrics. As part of the competition, I will be releasing Grafpad app that I’ve been working on to the general public. I will track the metrics as follows:

Acquisition: Unique users visiting the grafpad.com.

Activation: Unique users playing with the Demo and/or registering for a free Grafpad account.

Retention: Users logging into their account more than once and/or creating an image they save using the account.

Referral: Users sharing grafpad.com with their friends using on-page twitter/facebook/etc. buttons or users mentioning another user’s name in the sign up form.

Revenue: Users upgrading their account to a paid version with more features.

I’d appreciate any help from readers, alpha testers, or random visitors during the competition in terms of feedback and/or helping me improve my metrics (although I obviously don’t want people singing up just for the sake of signing up if they don’t like the product). The product can only be as good as the feedback I get, so feel free to challenge my ideas. I’ll be updating you guys with the current status on this blog, as well as my personal twitter account (@ATsepkov) and my startup company’s twitter account (@Pyjeon). I will be tweeting under #LSChallenge and #leanstartup hashtags as part of the contest. The grafpad.com web app will be going live tomorrow, please check it out.

Is Canonical becoming Microsoft-like?


Ubuntu (Canonical’s main product) sports “Linux for human beings” as it’s motto. With its main goal to make Linux easier for everyday use, it’s no surprise it has become the most widely-used distribution. I myself still run it as the main OS on both of my computers. However, next time I’ll need to reinstall or update, chances are that I’ll switch to Debian or Fedora instead.

I’ve been noticing Canonical treating Ubuntu more and more like Microsoft treated Vista or Windows ME. One of my biggest annoyances is the effect of their set-in-stone 6-month release cycle on the quality of included software. I like getting a new shiny OS every 6 months, but I don’t like being stuck with unstable, buggy beta versions of software just because the developers wanted some new flashy feature and couldn’t wait an extra couple weeks for it to be tested properly. Remember Firefox 3 beta becoming the default in Hardy Heron long-term release? Putting a beta browser into a release you plan to support for 3 years doesn’t sound like a good idea to me. I also remember pulseaudio, which replaced alsa in 8.04 before it was thoroughly tested, and caused me grief in both, Flash and Boxee until I decided to remove it and rebuild alsa again until pulse support got better in later versions.

Karmic came with its own can of worms as well. After installing it, I was unable to boot into my Hackintosh anymore. The culprit? Grub 2 beta replaced the original Grub bootloader, and support for OSX loading was not completely there yet. Again, why are you bundling BETA software into your releases, Canonical? I’m starting to feel like I’m using Windows again, except instead of SP1 to save me, Canonical releases a new version of Ubuntu that usually ends up fixing one thing, but breaking another. Fast forward to Lucid Lynx, another long-term release. All of a sudden the Window control get moved to the opposite side. I was able to move them back again after a few minutes of research on Google, but why mess with something that works, Canonical? I doubt you’ll appeal to the Mac users just by moving the buttons to the wrong side.

The second problem with 10.04 is the new XulRunner, which completely removes all hulahop support that several other applications, including Pyjamas-Desktop have depended on in the past. Obviously, Pyjamas-Desktop package, which was added to Ubuntu package manager in 9.10, wouldn’t work anymore. Canonical’s solution? Remove the entire Pyjamas package, as if it was never there. Any bugs opened against this on launchpad automatically get ignored, since the affected package (Pyjamas-Desktop) is no longer in current version of Ubuntu. How convenient? Screwing the little guy to make work easier for themselves has long been Microsoft’s specialty (ignoring web standards, pushing their own propriatary formats while ignoring existing ones, etc.), but it seems Canonical might soon take the cake. After being confronted about this behavior by Pyjamas developers, Canonical added the Pyjamas package back (since it does not depend on hulahop), Pyjamas-Desktop is gone for good, however, unless it gets ported from XulRunner to WebKit.

Another minor annoyance I have with Canonical is their push towards GPL-software and drivers. I have no problem with that, unless (as is often the case with drivers) the proprietary version is free and actually does a better job than the GPL one. A good example is the NVIDIA and ATI drivers, as well as Wifi drivers. Just like Microsoft seems paranoid of all open-source, Canonical seems paranoid of all closed-source.

Since I’ve stayed with 9.10 (Karmic) to use Pyjamas-Desktop, I’m not sure what new surprises Maverick brings, but chances are I won’t have to find out.