February 2011 Archives

DuckDuckGo FOSS Donations 2010

A few months ago DuckDuckGo pledged to give 10% of gross revenues in 2010 and 2011 to free and open source software (FOSS). I made the 2010 donations today.

We had a discussion on duck.co about where the donations should go. For the 50% company portion, we donated to $482 to nginx and $475 to FreeBSD. These are both projects that are an integral part of our architecture.

For the 50% community-driven portion, we decided it would be a good idea to pick a theme based on all the various suggested projects. That theme for 2010 was security and privacy. To that end, we donated $238 to Tor, $238 to Clamwin, $238 to Taho-LAFS and $238 to OpenSSH (via OpenBSD).

Unfortunately, I haven't gotten many takers to turn this FOSS donation pledge idea into more of a movement. Actually just one :), @boyter at search[co.de]. But that's OK -- perhaps more will be inspired to do something similar in due time.

Working smarter

Usually I go to sleep not knowing what feature or bug I'm going to work on the next day. I have a huge list of major and minor projects all vying for attention. 

So how do I decide what do work on? I agree that a startup should focus on working smarter (as opposed to just harder). I'm the first to admit though that I don't have a particularly scientific or even spelled out process on how to do so, but the following are the principles I generally try to apply.

  1. First, I like to tie everything back to distribution, i.e. people using your product. You should be tracking quantifiable long-term metrics, e.g. number of signups, uploads, shares, whatever. For my search engine startup, my main metric is number of direct searches/time.

    I believe tying back to distribution entails rephrasing the question what feature or bug should I work on next to if I work on X, will it result in significantly greater distribution, and if so, how much? Note that greater distribution can come from either existing users using the product more or new product use from new users.

    Once answered, you can then roughly focus on areas you think will have the highest marginal benefit with regards to distribution. For example, something directly related to distribution, e.g. a marketing effort or social/sharing feature, probably has a high marginal benefit.

    You can't forget word of mouth distribution though. Most of my distribution to date has been via word of mouth, and I believe that is due to product. It is a great place to be for a product-oriented person like myself when you can work on product and it also helps distribution. But you still can't get sucked into the false belief that product features trump direct distribution features all the time, because they don't.

    Similarly, how many of your users (including potential users) will the feature effect? Something that appears on a site all the time generally should take precedence over something that only occurs in a small corner of it. Of course that is mitigated by severity and impact, but you get the idea.

  2. After distribution, the second principle I apply is using real feedback to substantiate my decisions. Such feedback could be actual data, or, more often in my case, user interaction. Using these data sources you can really get more of a sense about the marginal benefit beyond your initial guessing positions. 

    You usually do need some kind of user base to get these kind of signals, but often not as big as you might think. I've tested various feedback button sizes, shapes and positions and found that moving them around has a dramatic effect on the amount of feedback received. Same goes to links to forums, chat rooms, etc. 

    I encourage all startups to essentially maximize these input streams since the data is so valuable. Using feedback appropriately greatly improves the chances you are actually working smarter (as opposed to just thinking you are working smarter).

  3. Third, I like to put a lot of minimum viable products (MVPs) out there. MVPs are not just for the initial version of your product. Maybe they should be call minimum viable features (MVFs).

    In other words, I like to ship code. It's not always the prettiest code, but it allows me to move on to another feature/bug and let the first one simmer.

    By letting it simmer you allow yourself and your users to experience it in some form, and suggest incremental improvements that you often didn't think of at design time. I absolutely love this aspect of shipping code. Again, the bigger the user base, the bigger the effect.

    The other, perhaps bigger reason, to do a lot of MVFs is it isn't readily apparent a priori what is going to work and not work with regards to distribution. It's sort of like A/B testing in that it can be non-intuitive. By planting a lot of different seeds, you are spreading your risk a bit hoping that some of them will blossom, or more often than not, prompt you to think of new related or combined efforts that eventually turn into something meaningful.

  4. Fourth, I batch things. There are so many silos of code and each takes some time to really get into and be effective. So I try to wait until there is a decent amount of stuff to do in that area before jumping in, which maintains efficiency. 

  5. Fifth, I inject randomness or happiness or whatever you want to call it. Since none of this is an exact science, I generally work on things that strike me in the moment as interesting, given the above constraints. That's not always possible but it contributes to my not getting burnt out.

Despite the above, my process breaks down from time to time around the edges. For example, I like to be as open and responsive as possible. That means though that I'm often engaging in twitter/email/forum/etc. conversations about minute aspects of my startup. Is that working smarter? Probably not, but it feels right.

A mobile first strategy still needs distribution

The mobile first strategy is where the mobile version of your product takes precedence over all other platforms, e.g. Web, desktop, etc. You code for it first and it takes your primary focus and design efforts. It's like when people used to code to Windows before porting to Mac or for IE before porting to Firefox. 

I see a lot of angel pitches from companies pursuing this mobile first strategy. Leaving aside the bigger question of whether the future of software will be dominated by mobile applications, I have a particular problem with most of these pitches: distribution. Namely, coherent distribution strategies are often missing.

Without distribution, how is anyone going to find your app? You're going to take off virally or not. And if not, what then? Not all apps can be featured on Apple TV commercials.

Of course there are plenty of possible mobile distribution strategies:
  • Build something parallel on the Web and leverage that user base, which can be grown through SEO/SEM/Social media and other Web distribution channels.
  • Make an API that can be embedded in apps and leads to downloads.
  • Partner with large Web properties and get them to push your app.
  • Tie your app to off-line interactions.
  • Build inherent mobile virality into the app, i.e. mobile to mobile invites/shares.
  • Buy downloads in the app store as well as in-app ads and monetize enough where this is worthwhile.
There are probably more clever ones too that I just haven't thought of. Feel free to enlighten me in the comments.

Snag great angel investors at OAF Philly - deadline next Friday (2/18)

Open Angel Forum (OAF) is designed to be a powder-keg of sorts for funding startups. The idea is to get the best angel investors in a given metro area all in one room on one night and hook them up with 5-7 awesome startups.

If you are looking for angel funding, please apply to OAF Philly, the next OAF event. Please note that you do not need to be in or near Philly to apply (just in the US). In fact, I'm specifically hoping we attract startups from unrepresented places like Pittsburgh, Baltimore, DC, Raleigh and Atlanta.
  • Application deadline: next Friday, February 18 (at 11:59PM EST).
  • Event date: March 16 (evening).
  • Startup area: software, e.g. Internet/mobile/gaming/etc.
  • Needed: at least a working demo.
  • Application link: http://ye.gg/oaf.
  • Cost to apply: $0!

The format for presentations is a five min demo followed by a five min Q/A session. Afterwards there will be plenty of time for talking with these angel investors (besides me):

Jim Young
Founder, i/o Ventures & Hot or Not

Jason Calacanis.png
Jason Calacanis
Founder, Mahalo & Weblogs (sold to AOL)

Josh Kopelman.jpg
Josh Kopelman
Founder, First Round Capital & half.com

Stephen Gill.jpg
Stephen Gill
Founder, leadnomics

Antonio Tedesco.jpg
Antonio Tedesco

Scott Becker.jpg
Scott Becker
Founder, Invite Media (sold to Google)

Steven Welch.jpg
Steve Welch
Partner, Dreamit Ventures & Founder, Mitos (sold to Parker)

mike levinson.png
Mike Levinson
Partner, Dreamit Ventures & Founder, Wizehive

Alexis Ohanian.png
Alexis Ohanian
Founder, reddit & breadpig

Justin Turner, CFA.jpg
Justin Turner
Member, MAG & real estate guru (former quant)

Todd Vollmer
Startup veteran & sales guru

Fred Kielhorn.jpg
Fred Kielhorn
Founder, Kielvest & Nanodrop (sold to ThermoFisher)

jim boyle.jpg
Jim Boyle

Kathleen Utecht
Former President, Green Rock Entertainment (maker of Cahootie)

Kal Vepuri.jpg
Kal Vapuri

Paul Martino

Ron Schmelzer.jpg
Ron Schmelzer
Founder, ZapThink

Rick Bullotta.jpg
Rick Bulotta
Founder, ThingWorx

Also, Ed Harvey, Anis Harb, Michael Glozman (couldn't find pictures) and some others I'm waiting on for final schedule confirmations.

I would gladly co-invest with any of these folks because they're smart, fast-moving, hard-working and add value. I've actually already co-invested with Steve, Alexis, Todd, Fred & Ed. 

If you have any questions, please ask in the comments. Apply already!

Usability issues with adding search engines to Web browsers


I get a lot of feedback around adding DuckDuckGo (a search engine) to users' Web browsers. I thought I would synthesize that feedback in hope that these usability issues might be addressed.

ieaddons.pngIf you have a search engine for your site (and most big sites do), you want people to be able to easily use it in their Web browsers. In Internet Explorer (IE) 7, Microsoft introduced a native JavaScript function called AddSearchProvider that lets users add a search engine to their search bar, and optionally set it as their default engine. The dialog box looks like this.


That means that you can put a link on your site that users can click on, which will pop the above dialog. And the dialog itself is pretty simple and straightforward. If I were to really nitpick, I'd say just delete the search suggestions line if not available (instead of graying it out). I also like how Firefox's equivalent says "Start using it right away" instead of "Make this my default search provider" because it is more inline with what the user is thinking.

Microsoft also created and still provides another function called IsSearchProviderInstalled that allows you to dynamically check whether your search engine was already added. You can then use this knowledge to hide the add link on your site (if the user already added it).

In conjunction, these two functions produce pretty great usability when adding a search engine to IE. Really my only complaint is that IE doesn't let you edit the search URL string after the fact, which is something more advanced users want so they can do things like force language preferences. To be perfect, I'd add that functionality along with the ability to submit POST requests.

Nevertheless, IE has by far the least usability issues with this process. Unfortunately, the functions Microsoft created don't work that great outside of IE. 

On the other extreme is Safari, which is the absolute worst. Not only do they not implement the mentioned functions or equivalents, but you can't even add a search provider at all in the browser preferences! 

There is only one relevant dialog box, which currently gives you only three choices: Google, Yahoo! and Bing. Apparently these search engine choices are hard-wired into the browser itself, and the only way to change them without installing additional software is to hack the binary.


Additional software solutions aren't that great either. I was looking forward to the recent inclusions of extensions in Safari 5, but they didn't open up the search bar in the extensions API! Victor Quinn made a DuckDuckGo extension (it's open source btw), but it has to add a toolbar to provide search functionality.


Many people understandably hate the bar taking up all this extra space. The other current alternative is to install Glims, which is a plugin that does a lot of things including tweaking the search box. It is a bit of overkill though if you just want to make that one change. Perhaps the best solution right now is to make one plugin dedicated to this purpose like Inquisitor, but that is a lot of custom work to solve this one issue for Safari users.

Chrome causes me the second most complaints by far. It's also the most frustrating to me because it is so close to being good, but yet still so far. You'll see what I mean.

There is a specification called OpenSearch that allows you to add some meta tags to your site that describe the search engine associated with it. For DuckDuckGo, those meta tags like this:

<link title="DuckDuckGo" type="application/opensearchdescription+xml" rel="search" href="/opensearch.xml">link title="DuckDuckGo (SSL)" type="application/opensearchdescription+xml" rel="search" href="/opensearch_ssl.xml">

These have the effect on IE and Firefox of letting the user know via the search box that they have options to potentially add. Here's what that looks like:


On Chrome, however, there is no equivalent drop down because the address bar and the search bar are one and the same--a really cool feature that I truly like btw. What they've chosen to do with opensearch is add any search engine that comes up in meta tags automatically to a list of possible providers you could use as the default. The first issue with this process (easily fixable) is that they add new engines to the bottom of the list.


The problem is that when people go looking to add a search engine they immediately have trouble finding the one they're trying to add. In particular, they generally expect the one they're looking for to be at the top, especially since it usually corresponds with being on that site at that moment. Trouble is that the location of the engine is in the exact opposite place you'd expect, i.e. at the bottom. 

And since Chrome adds every site that has an opensearch plugin, and lots of sites have them, it can be a very long list. Furthermore, if you decide to change providers but originally visited the site you want a while ago (often the case), it's probably somewhere in the middle of the list. I've gotten many reports that people just couldn't find it when it turned out to be "hidden" in the middle.

Second, Chrome provides a dialog box (see below) to add a new search engine from a link via the AddSearchProvider function, like I described for IE above. Trouble is, if it is already in that mega-list AddSearchProvider silently fails and refuses to pop the dialog. Given that you usually use opensearch meta tags to surface the above pictured functionality for IE & Firefox, this dialog box basically never can show up, rendering it completely useless.


Nevertheless, it suffers from another problem, namely that there is no option (unlike IE/Firefox/Opera) to also make it the default search engine. So if you somehow manage to get the dialog, you're left wondering what happened and why isn't it working in the search bar? What happened is that it got added to the bottom of that long list, and to make it the default you'll have to open that list in your preferences, scroll to the bottom, and click 'Make Default'. 

As if that wasn't enough annoyance, IsSearchProviderInstalled is also essentially rendered useless. Since again everyone generally uses opensearch, and Chrome uses it to add providers automatically, search providers are always "installed" and so this function pretty much always returns true. This behavior means that you can't easily tell if a user added your engine or not and thus you are forced to keep showing 'Add to Chrome' links everywhere, even if the user already made it their default engine in Chrome. (Note sites often use cookies to save this info, which will work at least until the cookies are cleared.)

Opera causes problems too. My main issue with Opera is that they don't implement AddSearchProvider or IsSearchProviderInstalled or use opensearch at all, which means the user is forced to do everything manually.

They do have a path to do it, both in the preferences and via a right-click shortcut, but both cause a lot of confusion. The easiest way to find the preferences is by clicking the down arrow in the search bar and then 'Mange search engines...'. Simple enough, though annoying they don't just populate choices automatically from the meta tags, like IE and Firefox (pictured above).


There is then an 'Add...' button that gives you this dialog box.


The trouble with this dialog is all the empty boxes. An average user has no idea what to type in any of these boxes, and no example text is given whatsoever! So instead, the path that I now sent people is on is to right click the search box and select 'Create Search...' like this:


This has the effect of at least partially populating the dialog box like this:


This still has a bunch of problems. First of all, you just can't click OK -- it is literally grayed out. At least let the user click OK and then tell them what they're doing wrong! It turns out you have to fill in a 'Keyword' to proceed, e.g. 'd'. I do give them extra points for adding a POST option though, which no one else does.

Which brings me to Firefox...  They're second behind IE in doing it right, but they still have two issues that cause significant complaints. They do get the basic process right though, which is great.

You can use AddSearchProvider to pop this dialog box and easily set an engine as the current search provider.


This is arguably the best dialog box in the whole lot. It's simple, straightforward, and it works!

The issues in Firefox are more around the edges. First, the IsSearchProviderInstalled function is not implemented, which means you cannot easily tell if you've already installed an engine or not, which means you can't stop showing the 'Add to Firefox' links. Sound familiar?

The second issue annoys advanced users. Just like in IE, you cannot actually edit the search string for the search engine once added (or while being added). But what if you want to use URL params to customize the engine? Sorry, the only way to do it is to create a new opensearch plugin, which is why you start getting all of these.


In short, no one does this process perfectly. I compiled feedback on these issue in hope that this part of the browser user experience gets fixed in all these great pieces of software. The ideal process is pretty simple actually:

  • Make AddSearchProvider and IsSearchProviderInstalled functions work as one expects them to, i.e. not to fail silently, always return false/true etc. If you do have a concept of a default engine, let IsSearchProviderInstalled see that too, or add another function to query that boolean value.

  • Make the dialog box that results from AddSearchProvider allow you to a) make it the default/current search engine; and b) change the url string via an advanced section (that offers useful help text).

  • Use the well-established opensearch meta tags appropriately, i.e. to suggest engines to add (as opposed to ignoring them or adding them automatically).

  • Make it obvious how to change providers and edit them after they have already been added. Executing AddSearchProvider could pop an edit dialog, for example.

If I were starting out, I would clone threewords.me


Threewords.me is a site that helps "get three words about yourself" from your friends. It was made by Mark Bao and instantly went viral (exponentially grew). It was then quickly sold at private auction.

It is a super simple site that is inherently viral. People spread it themselves by sharing their unique links. You can see this process happening in real time by searching twitter and waiting to see new tweets load. 

My advice to any new Internet entrepreneur is to clone this site immediately. Why? Because touching something truly viral is awesome.

First off, it's fun. Because the process is 24/7 there is always something going on to motivate you.

Second, you'll learn a ton in an accelerated fashion. Dealing with millions of users isn't easy, and you'll have to do it overnight. You'll get invaluable experience in scaling all aspects of a Web site.

Third, despite what people said about Mark's site, I think it will pay off quite well monetarily in the long run. If you can stick with it to ~10M users, I'm sure a lot of acquirers would be interested in you. Also, I think you'd be able to straight up monetize via virtual gifts, e.g. charge some facebook credits to send (virtual) thank you flowers/cards/sheep/whatever. 

Fourth, you can use your user base to try to launch other startup ideas. Even if you can convert 1% of 10M users, that's a great initial base to launch with.

You don't have to clone threewords.me exactly, but that would probably work. Some easy tweaks would be rate which picture I look best in or which avatar most closely resembles me. There are many possible variations, some of which may spread even faster than the current implementation.

Even if you did clone it exactly, Facebook alone has 600M users, so you're not likely to overlap with the other clones that much if you start out in different parts of the network. I'm sure you could find interesting ways to seed it in more remote corners of The Social Network.

Describe me in three words: http://threewords.me/yegg