By Pola Henderson & Maxime Bouroumeau-Fuseau
Kantree, our product, is a project management software. It’s likely not surprising to other IndieHackers that it’s a very crowded market. Hundreds of companies, constant improvement of products, customers easily jumping from one tool to another; these all add up to a hectic and fast-moving environment. Creating a space for yourself in these conditions is hard. Doing it as a worker cooperative, not raising capital, and keeping 100% ownership makes it even harder.
But… it’s also what makes it possible. Here’s how we navigated this volatile and difficult market, all while staying committed to our values and bootstrapping roots.
Getting everybody involved
We are true believers in the bootstrap spirit, staying independent, and having a long-term vision and plan. We also believe this spirit should be shared by all members of our team. That’s why we decided to structure Digicoop, the company behind Kantree, as a worker cooperative.
In a worker co-op, employees own at least 51% of the shares, each associate gets one (1) vote—no matter the amount of shares—and profits are distributed among employees.
A setup like this means that new employees have the same power as founders. Everybody feels that they can be involved 100% in the company, and that their voice will be heard. It also means we can keep the bootstrapping spirit alive while growing beyond a couple of people.
We’ve seen examples of companies applying some of these principles, while not being a strict cooperative; ConvertKit comes to mind. However, turning these concepts into company bylaws solidifies the notion that we are all entrepreneurs.
Cutting costs by self-hosting services
At the beginning, minimizing costs was imperative to our survival in this turbulent market. Self-hosting a lot of the services we needed helped to keep costs low at this crucial time.
So… about self-hosting. It’s got a negative connotation around it in our startup world. You may think we got a little crazy (or maybe you already thought so, given the previous section). This seems to go against common wisdom, as most startups rely heavily on third-party SaaS. But hear us out…
Two things led to our decision to self-host:
- We had the sysadmin skills and experience to do it. (Arguably, this first point is the most important, but the second one mitigates it a lot.)
- It’s become increasingly easy to run open-source alternatives via docker containers.
So, not only is self-hosting easier than ever before, we also had the cherry-on-top experience and skills to keep it running smoothly without paid help from another company or expensive SaaS.
(Fair warning: we’re about to get gritty-with-it down below.)
Now, most of our projects will provide their official docker image. We run Gitlab (+runner for the CI), Mattermost, Grafana, Metabase, Invoice Ninja, log aggregation, and some other small utilities; all integrated through LDAP.
We host everything on a 16GB, 8-core server at OVH, which costs us 20€/month and provides great performance. Maintenance is quite minimal; at most, one hour per month.
Bottom line: We estimate it would have cost us at least three times more if we were fully SaaS supported, and didn’t self-host.
This is not to say that we only self-host, either. We also rely on some SaaS solutions when self-hosting is too time-consuming, or if the SaaS service has no equivalent, or the alternative isn’t clearly of higher quality.
However, our setup allows much more customization of our processes for more efficiency. For example, we rely heavily on Gitlab CI, doing a lot of things through pipelines that would require our own machine anyway.
Of course, CI/CD pipelines can indeed become very expensive if used extensively. But with Gitlab-integrated open-source CI working with docker containers, it became very easy to self-host. It also becomes more straightforward to deploy testing environments for each new feature you develop. This lets you iterate fast on different features and allow your team/users to quickly try them out, so that you get feedback very early on.
Nowadays, even setting up frontend tests as part of a pipeline is easy, thanks to docker containers provided by Selenium, the ubiquitous frontend testing tool. Typically, we use only the Chrome instance of Selenium in our pipeline for daily tests, but will run tests on multiple browsers using Browserstack (a SaaS service) before merging a feature. This helps us limit our usage of Browserstack—automated testing can become very expensive—while keeping all the advantages of such a pipeline.
Avoiding AWS to host our app
Hosting on AWS (Amazon Web Services, or a close equivalent) and using all the services they offer is almost a given. The problem: it is VERY expensive.
A small instance on EC2 starts at $70/month. In comparison, you can rent a beast of a server—at least four times more performant—at OVH or Hetzner for less than that. The skills required to manage an EC2 instance or a server are the same. You will need to get a little bit more involved to setup associated services, and running your own database can become a bit of a pain when you start to grow. However, cost savings are so huge that it's hard to ignore this solution. On top of that, when designing your infrastructure outside of a cloud, it is much easier to migrate in the future as you are not dependent on vendor-specific services.
This is not to say that you shouldn't use some of the cloud services. For example, we use S3 for all our file hosting. We feel a good mix between different options is the most cost-efficient solution.
Reading this, you might be saying: "But what about scaling fast?" We feel this is a non-issue for most (bootstrap) SaaS business. The growth curve is slow enough to let you add servers as you go (delivery time on OVH is often less than a minute, which is incredible).
Raising money while keeping 100% ownership
To make a dent in terms of marketing and sales, we decided to raise a little bit of funds to help us hire new people (the original founders were all engineers).
As a cooperative, raising capital is possible, but mostly out of the question as employees need to retain at least 51% ownership. On top of that, profit cannot be made on the value of the shares, so all traditional exit strategies don’t apply.
In France, worker co-ops have access to a special investment contract called “Titre Participatif,” allowing to raise funds without giving shares in exchange for interests. In principle, it’s the same as a loan, but doesn’t count as debt. We have managed to raise a few 100k€ this way using a crowdfunding platform.
We think that raising this money doesn’t go against our bootstrapping spirit, as we have kept full ownership and have no plans to sell the company.
Our road to profitability has been long and full of obstacles, but that’s to be expected if you go against the grain. As long as you have a clear vision and the team is 100% behind it, you can make it. If you need an extra push, we hope our story will be that. Plus, we hope you’ve learned something new for your own startup!
If you have any questions for us, or tips of your own, leave a comment in the section below!