FOSS is not a flavor

A long time ago now, I was working on a product which was aggregating data from various APIs, to provide a comprehensive dashboard.

One of the key factor of the potential success of our product was the number of APIs we could integrate.

My CEO gave me a quick call:

  • I have just realized that the company is in "build mode", we have to build as much integrations as possible
  • Sure, I guess you want to know how we can speed them up
  • No, actually, I have a solution for that: we'll go Open-Source, so all geeks will build integrations for free
  • It's not that simple, actually, there are a number of steps before going Open-Source
  • You over-complicate things, let me show you

He turned his screen-sharing on, go on GitHub, on our main repository, switch the visibility to Public, and proudly stated: "you see, done, you just have to post it on Reddit/Discourse/etc.".

I have quickly switched it back to "Private", as many parameters were hard-coded, not our secrets, hopefully.

Contributing to a FOSS project is simple, yet not easy:

  • Find a project you care about
  • Find an issue or a feature to work on (by using it and having an idea, or crawling the bugs tracker)
  • Open the code, and the documentation if any, try to understand how it works
  • Add the code, including tests, and docs

Then the tricky part:

  • Push the pull-request
  • Try to comply with CONTRIBUTING.md
  • Find a maintainer to look at it
  • Start-over because the issue description was out-of-date
  • Harass maintainers to get merged
  • Wait for the release

Easy, right?

On another hand, in order to build a successful FOSS project, it takes:

  • A clean enough code (i.e. it should build, run, and not containing hard-coded information related to the infra)
  • A documentation on the coding (best) practices and conventions
  • A documentation on the build process
  • A documentation on the deployment process (and configuration)
  • A documentation on the architecture (beyond ADR)
  • A CONTRIBUTING.md
  • A documentation on documentations (I'm mostly kidding)
  • A continuous integration
  • A brand
  • A lot of time to:
    • Review PRs
    • Mentor contributors
    • Coordinate discussions (reminder: all decisions are community-led)

They, there is the business "strategy":

  • Open-core: provide a more limited version of a product
  • Consulting based: being paid to set up a local instance or for bug-fixes/features
  • Licensing: being paid to be able to host the product
  • SaaS-based: hosting and being paid

Open-Source is not an option, a flavor, a switch we can flip, it is engineered, it takes effort over a long period, just to hope having some ROI.