Open Source Canvas: You Have a Product in Your GitHub Repository

Written by Paweł Jędrzejewski, 08.11.2017

I am working with Open Source software for more than 6 years and since 2014 I am building my business based entirely on Sylius. I have always loved programming but very early in my career, I realized that what keeps me going is building new things in general, not only through coding. I like coming up with new crazy ideas and with the help of others - making them a reality. But even with that entrepreneurial spirit, it took me some time to abandon the typical programmer mindset - being too focused on the code alone, forgetting that there is a product in my GitHub repository.

Yes, the fact that you give away software for free & develop it with a community does not change the fact that the end result is supposed to target a specific audience, which has a specific problem. There are some channels, through which people can learn about it and also there is competition. While Open Source is all about collaboration, you still have competitors.

I have been using Lean Canvas for iterating on the business model of the Sylius company for a while. All services & products have dedicated Lean Canvas documents, which identify the fundamental aspects of our operations. That being said, our main product - Sylius eCommerce Framework is completely free and does not generate revenue directly. I am definitely a planner-type of a person, which means I like to have everything well-defined, like areas of focus, mind-maps, my GTD, etc. At the same time, I hate long, boring documents, which are never read nor updated. So I adapted the Lean Canvas template to reflect the reality of an Open Source project. This way, Open Source Canvas was born.

I got this idea at SymfonyCon 2016 in Berlin and added it as an extra slide at the end of my presentation. It got some interest from the audience and since then I showed it at a couple other conferences. I constantly use it to iterate on what Sylius should be and today I’d like to share this concept with the Open Source community, which hopefully will help fellow maintainers to make better Open Source products.

Example

Obviously, Sylius being a full-featured eCommerce Framework is a bit complicated example of an Open Source project. So for the purpose of this blog post, I decided to use another interesting project - Imagine, a PHP library for manipulating images. It was created by Bulat Shakirzyanov @avalanche123 and has been widely used (8.5M+ installs) by developers to resize, crop and optimize images. Keep in mind that I did not consult the author - these are my post-factum assumptions and observations just to help you understand concepts behind the Open Source Canvas.

Problems

The first step is to define the problem you are about to solve with the potential new library. Most of the time, developers create new Open Source packages to solve a problem they encountered in their current project. Very often the solution is implemented in a specific application and then extracted to a standalone Git repository. Open Source Canvas can help to make a decision whether to release it publicly or not. Also, it serves as a framework for defining the vision for the library.

In this step, you should pin down the top 1-3 problems that your concept is solving. This will also let you focus on the most important features and avoid being distracted by all the “cool functionality that only 3% of users will benefit from”. In the case of Imagine, I defined these as general “manipulating images” and more specific problems like “generating thumbnails” and “watermarking images”. You should really focus on understanding and clarifying the problem you encountered so that further evaluations make sense. Then you can also have a look at the alternative solutions and define the differences between them and your approach. Step two will help you with that.

Alternatives

Do not reinvent the wheel. Really, you have just one life on this amazing planet so use your time wisely. You can’t be the only person who had this problem and there are perhaps hundreds or thousands of people working on the solution already. I know, you probably like to have the things your way and you noticed plenty of improvements to the libraries in your research. Implementing these would be easy but making it a complete, well-organized and popular solution is far more difficult than just programming. Focus only on the things you can do better and reuse what others provide, that’s the spirit of Open Source. I hope this Canvas will help you define the unique value that your product can provide or make you comfortable with the decision to contribute instead of reinventing.

Research online for the existing solutions. Of course, you just Google it, then check package repositories (like Packagist for PHP or NPM for JS) and maybe tweet to get some recommendations from your network. You should not limit your search to libraries written in the programming language of your choice - please consider API-based solutions as well, which can be integrated into any app. What is more, PHP for example is well known for porting libraries from other communities and very often these ports are as good or even better than originals.

Best case scenario is that you find a suitable solution, use it, save time & maybe contribute back. In case you do not find a project that solves the problems, you can get a lot of inspiration from others and make a better solution. In case of Imagine, I found various solutions and outlined the reasons why I think Imagine is different:

Paweł Jędrzejewski

About the author: Paweł Jędrzejewski

Hi! My name is Paweł and I do Open Source. My project Sylius evolved into a vibrant community and an exciting business, which creates next-generation eCommerce technology. I speak at conferences and co-organize PHPers meetups.