Marketing Your Open Source Project on a Shoestring Budget
Over the years I've worked on a lot of open source projects. I've also worked on quite a few commercial projects. What a lot of them have in common is the need to market themselves to developers, but without any marketing budget. When I worked on JFXStudio my budget was 20$ a month from my own pocket.
What you are about to read is an essay form of a presentation I gave at OSCON 2010 a few weeks ago in Portland. I considered just publishing the slides, but it's really not as useful without the spoken words that go with them. Since I consider this such an important topic I rewrote it as an essay that I hope will help open source project leaders market their projects successfully. Enjoy! (photo courtesy of Flickr user EraPhernalia Vintage)
Why should you listen to me?
Before I dive into the essay, let me tell you a quick bit about me and try to convince you why anything I have to say is useful. (We'll see how it goes. If I don't see you at the end I'll know I failed. :)
My name is Josh Marinacci, and I've worked at Sun for five years and now work on the Developer Relations team at Palm. Over the past decade I've worked on both commercial and open source projects, often with very little marketing budget because they are developer focused.
On the open source side I've founded or been involved with the Java lib Flying Saucer (xhtmlrenderer), the widget system: AB5k/ Glossitope / WigetFX, JFXtras, the JFXStudio community site, SwingLabs/SwingX, and I've been a community leader for Java.net for years.
Some commercial projects you might have heard of include Swing, NetBeans, JavaFX, the Java Store, and now of course Palm's webOS. While not all of those are still shipping products (I suspect the Java Store was canned), they were all projects that needed to attract developers.
The core of all of this is Marketing. Now, when you saw the word marketing in the title of this essay you probably came expecting me to show you some cheap ways to make users aware of your project. While I am going to teach you about that, I'm going to teach you some marketing first. We often hear the word marketing used when really someone means advertising.(a quick aside: This may or may not be the strict business school definition of marketing, but I've found it to be practical and useful for our purposes).
What are we marketing?
Before I can explain marketing, let’s consider what we are marketing. Throughout this talk I'm going to use the word product over and over. You may say: but we aren't selling anything, we are open source. True, you aren't selling a product for money. But you do have a product. It's the software you've created. And you are selling it. Customers are buying it from you, but they are buying it with their time and their code and their feedback rather than dollars. Even though it's not a monetary transaction all of the principles of marketing apply as if you were a commercial company.
You see marketing really has multiple pieces:
- Marketing research: Who is your market? What do they want?
- Product Design: What does your product need to do to fit the needs of the market
- Advertising: making the world aware of your product
- customer feedback: using feedback from your customers (and potential customers) to improve the first three.
You need to know who your product is intended for: your market. You need to make sure your product fits the needs of this market (no less and no more). Then you need to advertise. Advertising isn't an dirty word. Advertising is simply making your target market aware of your product. There are lots of ways to do this that don't involve buy 30 second spots on TV, which we'll cover later in this talk. And finally you need a way to get feedback from your customers, or potential customers, and pipe this information into improvements of your research, design, and advertising. If you take a discipline approach to marketing then your project will be a success. (note, promise not legally binding. not valid in some states. mind the gap).
Who is your Market?
This is the most important thing you must figure out, possibly before you even start writing code, because it will shape everything you do.
Now, often open source software was created to scratch an itch. So often you are the target market. That's perfectly valid. So the question is whether that market contains more people than just you. Suppose you create an apache plugin to meet your needs as a website administrator, then your market might be other website administrators. With some thinking and searching you can figure out who is your market, and it may lead you to some users who are very different than yourself.
For example, when I created Flying Saucer I originally imagined it would be for people who wanted to put simple HTML content inside of desktop Java applications. However, I lucked into a new market. I added an PDF export option because I found a good PDF library and thought it would be cool. After I blogged about it I discovered that there were a lot of people who wanted to auto-generate PDF forms and reports from HTML because it was far easier than other code based PDF solutions. Once we knew this we started adding features to make better for those kinds of users. Things like the CSS 3 extensions for pagination. This was a case of customer feedback leading into our market research and then back into product design.
Defining your product
What is your project about? You need a brief and concise description of your project. If you can't summarize your project in a paragraph, or better yet a single sentence, then you haven't thought through your project enough and should go back to your market research and product design. Even a huge large mature project like tomcat still has enough focus to describe it briefly.
You should create a description of your project that is one page long, then a shorter one that's one paragraph, then a one sentence version. This will not only help you narrow your focus to the most valuable features, but you'll be reusing these descriptions over and over when you start your advertising.
Here's a simple example:
This screenshot is from the Flying Saucer home page. In a single paragraph it tells the new reader exactly everything they need to know: the library renders XML and XHTML content with CSS, and it's 100% Java. Right away the visitor can determine if they should investigate further or move on to look for a different project. This helps not only keep them from wasting their time, but also from wasting your time.
To effectively market your project you need a coherent message, and that starts with having a single place for people to learn about your project. It's the 21st century, so that means you need a website.
A Google Code site is not a website.
Other than maybe a short text blurb this site contains no information about your project. It's a great collection of tools for existing contributors but it doesn't provide anything that would make someone want to come back to your website again, much less contribute to your project.
This is a website:
The website is visually interesting and it gives users a taste of the application. This particular site is for a project I created called MaiTai. MaiTai a tool for creating audio visual mashups, so I chose a dark color scheme with splashes of intense seductive colors.
This page first draws you in with the design and some pictures on the side. Then it has clearly defined structure of news, about, and a gallery of samples. Most importantly it tells you what the project is about through the tagline at the top and a summary snippet. This is the most important part of your message. This is where you start to reuse the descriptions I had you create above.
Building your site
Keep your site simple. I recommend WordPress or one of the other great blogging / simple CMS platforms out there. As a Java guy I hate the idea of running my site on PHP, but I almost always choose WordPress because it's simple and it has a large rich community of themes, plugins, and support. It gets the job done with as little fuss as possible. Now, I'd like to think I'm a good developer. Could I build my own website by hand? Sure. But you know what, my goal here is to produce an open source project, not a website. My time is better spent working on the marketing and project code, not mucking with a webtools.
Some of you may still think: WordPress? Really? Will your site scale as you add users? Will it have the features you need? Probably not. But that's a problem you want to have. It's not something you need to worry about right now. Worry about it once you have tons of users, and then you'll have some help building the replacement site. Don't shave the yak. Get a site up ASAP and get on with your project.
And this goes double for the visual design of your site. If you are a programmer like me then you aren't a great designer, or at least it will take you a long time to design something good. Instead, choose from one of the hundreds of great themes already created for Wordpress and customize it. That's what I did with ProjectMaitai.org. I spent a half hour looking through themes, picked one, then added the splash image at the top. Done. Get back to coding.
Okay, so now you've got your target market, a first version of your code, and a website. Now you need some real users.
Step zero: be polite.
The next few weeks will be equal parts exciting and frustrating. Always be polite and considerate. Choose your words carefully and gently. Actually, pretty much throughout life I recommend this. If you are always nice to people and smile then wonderful things will happen. I promise.
Step one, don't get outside users yet.
There's probably still major bugs in your code or website that you've overlooked because you are too close. Get some other developer friends (yes, developers have friends) to look over the site and try the software. Go back and fix what they find. Now go get some users.
Step two: draft a press release.
Remember that one paragraph description I had you create? That goes here, followed by the longer version. That's all a press release is. Yes, I know. Press releases are the bane of modern news, but they exist for a reason. They are a concise description of what you've created, spelled out so clearly that even the dumbest chimp with a newsblog can't get it wrong. Your goal is to get your message out.
Step three: submit your press release to the right people
And by right people I mean website and news blogs who are likely to be interested in your project. Is this a game library? There's 8 dozen sites for game programmers. Is this a Java project? Then the first person you should email is the editor of Java.net. Editors are always looking for new content on a tight deadline, and your well written press release makes their job that much easier. When you email these people you don't want to come across as spam. Write a personal email to the editor politely explaining that you've been working on a cool new open source project and you'd really appreciate it if they'd mention it and link to your site. Then paste the press release after saying thank you. That's it. That's 90% of launching a project.
Step four: fire up the links.
After getting a little press coverage start submitting links to the press articles to the various aggregators like Digg and Reddit. You could submit your own press release, but I've found that the press coverage of your project is considered more authentic than a link to your own blog, and so it will probably get rated up higher. You should also link to your project from Twitter and Facebook. Your friends are your friends, so they will likely spread the word just because they like you. (Which is why you should always be polite, to get more great friends with other friends).
Step five: rinse and repeat
Now that you have some word out there and a connection with a few interested people, you need to do it again. That means you need something new to talk about. That's why I like using blogging platforms for the website. They are built with the idea of continuous new content in mind. Every time you work on a new release, blog about it with a list of what's new and cool. Having trouble building a new feature? Blog about it. Did you get mentioned in the news? Blog about it? Did another project pop up that competes with you? Yes, blog about it. Anything to create new content of interest. Then take a subset of this news and tweet about it. When you have a big new release, send it to the news editors. Keep the cycle going.
Every now and then you want to do something special to build interest, usually around the a new release of your project. This is called a promotion. There's a bunch of fun things you can do that are simple and cheap.
Have a contest.
Create a contest that is relevant to your project. For JavaFX we did a contest where you had to code up something cool that fit a theme, and you could only use 30 lines of code, and you had only one month. Keeping the contest constrained prevents them from becoming unwieldy, and if it's short then it gives you an opportunity to have another contest again soon.
The contest should have a prize, but a cheap one. You should have a prize because you want the contest to feel real. There should be a sense of accomplishment for the winners. But you should keep it cheap so that everyone understands this is really just for fun (plus you have a shoestring budget, remember!) A tshirt or mug is good, but I'm a big fan of amazon gift certificates because they can be used anywhere in the world and don't require expensive postage.
Remember that open source is often a status economy. When announcing the winners recognition is the most important thing. Plus announcing the winners gives you one more thing to blog about. :)
Write some articles.
As your project matures there will be need for longer form documentation and use cases. Lots of news sites want longer form articles for their sites, and some will even pay for them! Kill two birds with one stone by writing an technical article on your project. It can be an intro article or cover how to do something specific and useful with your project, perhaps by combining it with another project. My article on using Flying Saucer with [itext? the pdf article] was one of my most heavily read Java.net articles, and it has continued to serve as great documentation to new project visitors.
Better integrate social networking tools.
When you post to your blog you can cross post using social networking aggregators (links to some). Even better, you can let your users spread the word for you. Install a 'tweet this post' plugin to your blog. And create a facebook fan page. Fan pages were design exactly for this case letting people follow the news of a non-person like a software project. it also means your mom doesn't have to be spammed with updates on your open source code (unless she wants to). Creating a fan page takes just a few seconds and can provide a lot of valuable exposure.
Eventually you will want to talk about your project at a conference, perhaps a Open Source Convention of some sort. :) This means you must get comfortable with talking to a large audience. Don't worry, by this point you'll be so comfortable talking about your project that you'll be overjoyed to have more people listen to you.
When you write a session proposal don't make it sound like a vendor pitch. People come to a conference to learn how to do something or how to solve a problem. If your project helps with them with, then great, but your project shouldn't be the focus. Much like with the articles, pitch a session that uses your project to help solve real world problems. Make sure to spell out what the attendees will learn from your session.
Even if you aren't talking about your project, attending a conference gives you an opportunity to talk about your project to new people. And if you give a talk on another topic you can always mention the project in the 'about me' section and give people an opportunity to come up afterwards and ask questions.
Quick & Easy
Get some cheap & fun business cards. Biz cards are insanely cheap to get these days. Make them something fun, remember you aren't a for profit business so you can afford to be a bit silly if you want. The key is having a card that someone can use to get more information, so it *must* have your website and preferably direct contact to the person who gave them the card (probably you).
Use your email signature. This is a small bit of advertising space. Put a link and one sentence description of your project in your email sig. (check with your boss before using it on professional communication).
Self printed tshirts. You probably don't have the budget to print up a bunch of tshirts. But you can use a site like Printfection to create tshirts that others can pay to have printed for themselves.
Throw a party: yes, a party. If you've got a big release coming up then having a party is a great way to celebrate it. It doesn't have to be big, it can just be you and some friends getting together at a bar. All that takes is a tweet with the time ad place. Be sure to announce it beforehand, encourage locals to attend, and take pictures to post on the blog afterwards. Always be looking for new blog content. Oh, and have some way for people to recognize you at the bar, like a silly hat or project tshirt.
If you already have an existing project here's a checklist of things to make sure you've got covered
- description: one sentence, one paragraph, and one page description of your project.
- Web site & code site: blog, mailing list / forum, vcs, issue tracker,
- Social networking: Twitter, Facebook fan page, Linked-In group
- A product roadmap and a marketing roadmap listing the promotions you are planning.
Marketing your open source project doesn't have to be hard, or expensive. It just takes a bit of resourcefulness and passion. Most importantly, be patient. It will take time to build up your developer audience. Keep at it and they will come. Good luck with all of your projects!