Joris Schellekens is the author of the popular Borb library for Python. Joris started working on Borb in November 2020, and the project has recently surpassed 3k stars on GitHub. Borb is being released under a Dual License, AGPL / Commercial. Given that it is still early days for Borb, this interview is an interesting look into the mind of a developer who is still on his way to sustainability with his library.
Like iText, Borb is a library for generating PDFs. In fact, Joris hails from the same city as iText creator Bruno Lowagie (read our interview with Bruno). Is that a coincidence? Read on to find out!
Joris, thanks for agreeing to be interviewed. Borb is a relatively new library, yet it already boasts 3k stars on GitHub. Can you tell us when you first got the idea to write Borb, and how that idea came about?
It’s funny you mention this mysterious coincidence surrounding Ghent and PDF libraries. I previously worked at iText. Its previous headquarters is only a small walk away from my house actually. I’d worked with iText already as a hobbyist, and I was surprised to find that the company was (at that time) a small Belgian startup.
“Turns out there aren’t any good Python PDF libraries. Or maybe I just didn’t find any at the time.”
Bruno, its founder, lives similarly close and we still keep in touch every so often. I think we share the same “mad scientist” personality traits in some regards. He’s also the catalyst for this interview.
Anyway, at some point during my career at iText the company started restructuring. Hancom (a Korean software company) came into the picture, having bought its way into iText. And the company changed; it no longer felt like the same company I started at. A substantial number of the people working there felt the atmosphere had shifted I suppose.
I left, and pursued other fun problems. I ended up at a company that builds software and hardware for charging electric vehicles. One of the main issues there was being able to test the software.
You had people going around all the charger models they produced with the new version of the software, with a laptop, filling in an Excel sheet, marking stuff like “I did X and Y, and the light turned green”. That simply wasn’t scalable.
Kurt (a colleague of mine at the time) and I decided to automate that. We built a test-framework in Python that executed all the actions and checked all the outputs. Finally we got to a point where this previously manual process was now a proper testsuite, being automatically run by Jenkins at the click of a button. And at the end of it, I wanted to produce a nice little PDF report to share with stakeholders.
And of course, I was used to working with iText, a well documented, Object-oriented PDF library in Java.
Turns out there aren’t any good Python PDF libraries. Or maybe I just didn’t find any at the time. I think that was one of the first motivators for me to build my own library.
How was the reception to Borb?
In general it’s been wonderful. People have sent (alongside their inquiries about price and licensing) compliments about the quality of the library and its documentation.
I think this is reflected in the GitHub statistics as well. If you look at the number of stargazers for instance, we are at roughly 3K right now, that’s a big thing for such a young library.
I did a quick comparison using the GitHub advanced search. There are 1,761,284 repositories written in Python, created on the same day or after the creation day of Borb (using the creation day of the README as a guide here). However, only 201 of those repositories currently have as many or more stars as Borb. Thats 0.011%.
In fact, if you search for “pdf python” on GitHub (selecting only the Python projects, and sorting by number of stars) Borb currently ranks 9th.
“1000 seemed like a giant milestone back then. And we hit it almost overnight it seems. ”
The project just above us (pdfminer.six) has 4.4K stars, but has been around for almost 10 years already (first commit to its README.MD was Oct 22, 2013).
According to Borb's star history, Borb jumped from about 500 stars to almost 2.5k in the span of a month or so. What happened around this time that could explain the rapid rise? What can other creators do to drive this kind of growth?
There’s no magic trick I’m afraid. It’s all about knowing the right people. The spike you mentioned is due to Bruno if I’m not mistaken.
I don’t know the exact details of the story anymore, but I think it was some social media post I made about Borb that he shared or liked. It got picked up by someone with a wide audience. And the stars kept flowing in. It was unbelievable at the time. 1000 seemed like a giant milestone back then. And we hit it almost overnight it seems.
Can you tell us a little about your work situation around the time that you started developing Borb? How much work was it to build out the first version of Borb?
At the time (and currently) I was employed full time at a software company. From that point of view, Borb was a pleasant side-project. I was also pretty new to Python at the time.
The adage goes that it only takes 20% of the work to get 80% of the features. It’s perfecting your code, elevating it to completeness that will require the majority of the work.
Certainly, having worked at a PDF company already, I could take with me all the lessons learned. So from that point of view, creating a PDF library was easier for me than it would be for most.
It’s hard to answer the second part of your question. Borb always felt like a passion-project. I didn’t keep track of time spent developing Borb. I can give you an estimate at best. I would say roughly 850 hours. (2 hours per weekday, 5 hours every weekend day for a duration of roughly 10 months)
“At this point in time, my focus is on getting the word out there. Having as many developers as possible come into contact with Borb.”
How has your experience been with the dual license model? Did you also consider open core? What are the factors that led to using dual license?
One important thing to know about me is that I really dislike paperwork. I am more than happy to just be the brains behind the operation, rather than going out there and setting up contracts, filing paperwork in order to become a business, etc.
So initially, the major driver behind having a dual licensing model was simply familiarity. I was familiar with iText and its licensing. I had a clear example of how such a company could make profit.
The main advantage about being open source is that people can try out Borb without my intervention. There’s plenty of examples to get you started. You can run it in Google Colab if you don’t want to mess with your virtual environment. There is no threshold. You can go from “I wonder if this library can help me” to “That does the trick” in no time at all.
Personally, I think I would find it cumbersome if I had to leave my email, or select a payment option, or talk to a sales rep before being able to try a piece of software.
I see that you don't list any prices on your website. Does this mean you negotiate a custom contract with every new customer?
I currently have two wonderful sales representatives working for Borb, handling commercial inquiries. And although we have a licensing scheme (by volume), we do try to meet customers where they are at.
At this point in time, my focus is on getting the word out there. Having as many developers as possible come into contact with Borb. That way, even if the company they worked for paid a reduced price, they now carry around Borb in their toolkit.
“I still have a full time job outside of Borb.”
And if they ever switch jobs, if they get confronted by a new PDF problem, we can help them again, and they’ll be our spokesperson. They will know from before how easy it was to work with Borb.
Many of our readers are curious to know whether Borb pays the bills and how long it took to get to that point. Can you tell us something about that?
At the moment, Borb is still in the startup stage. I still have a full time job outside of Borb. Having set up my own company allowed me to perform some independent projects though.
Borb currently covers the bills through self-funding. Which by the way unless you’ve gone out and raised money is pretty normal. As you know already I’ve been at it for about 2 years, with a primary focus of just getting the code out there, so success is always measured by the goal.
What is your strategy for reaching the point where Borb will pay your bills and beyond? Have you found a formula that you will continue applying for the foreseeable future?
“It's all about meeting customers where they are at”
Our new goal set is around the number of pages and documents being produced by Borb. Additionally, we recently changed our licensing policy which has led to a large increase in the number of companies that are interested in licensing our product, in order to stay compliant with our policies.
We now have the option to be more granular than just "amount of PDF documents created". Our initial approach of registering the amount of documents was a great starting point, but this approach is certainly more fair.
Imagine you have two customers, one who generates very large test-reports for quality assurances once a month, and a second customer, a small business owner, who generates single-page invoices, on a daily basis. Our previous licensing model would have penalized the second customer for generating documents frequently.
Again, it's all about meeting customers where they are at. Under the current licensing scheme, they have the option to pay by the page. Which ensures fairness.
“There are no magic formulas. You work hard, build a good product, then promote it accurately to the market.”
The next six months ought to see a large uptick in quotes/sold licenses and customer growth. Our current trends are strong and we expect to be able to fund our current initiatives for the year through license sales.
There are no magic formulas. You work hard, build a good product, then promote it accurately to the market. With that we expect our customer retention to be key to building a solid foundation from which our future growth will come. Retention means stability, and enables future growth and development. Full cycle!
How did you promote Borb? What worked? What didn't work?
I was told by my sales people that libraries are hard to sell. If a development team is used to working with library X to achieve functionality Y, then they are likely to continue along with X. You can’t expect immediate effect (in terms of conversion) after running a marketing campaign.
I try to focus on being there for people when X no longer does the trick. Or if they simply haven’t made up their mind yet.
I’m active on StackOverflow, answering questions about PDF and Python. Borb even has its own tag now!
I have published tutorials on StackAbuse in the past, and I’m currently collaborating with another educational platform to produce a more interactive tutorial with quizzes and code snippets you can run in your browser.
I am not that great at doing social media. But I imagine it could have tremendous potential; just thinking about the earlier question about the spike in GitHub stargazers.
Are you spending more time these days developing Borb, or marketing Borb?
I spend the majority of my time developing Borb. I try to be active on StackOverflow (but that’s more a mix of marketing and development) and I make the occasional post on Reddit (/Python, /SideProject, /opensource, /coolgithubprojects).
How have you been able to compete with FOSS libraries with a more permissive license? Do you think that a competitor with a permissive license will appear in the future?
The (number of) competitors varies depending on how granular you want to look at things.
“If you want a library that is regularly updated by a team of developers, someone needs to pay those developers. ”
If you have a microservice architecture, and you can build each component in whatever language you fancy, then the whole spectrum of PDF libraries is open to you.
If you need something in Python, we’re down to a handful of well known libraries.
If you need a Python library that is object oriented, completely documented, and tested, Borb has very few competitors.
I’m sure budget plays a significant part in the decision making process when adopting a new library. But ultimately, you get what you paid for. If you want a library that is regularly updated by a team of developers, someone needs to pay those developers.
Do you think that a competitor with a permissive license will appear in the future?
The world around FOSS is somewhat strange at times. It’s weird how developers/companies (whose livelihood depends on the concept of “being paid to write/deliver software”) sometimes flat out refuse to pay for software.
Having a company behind a project does not have to be a dirty little secret however. Selling a product means you have more money to re-invest in that product.
I can only imagine how much progress I could make if I could hire a full development and testing team.
Do you think there are more opportunities for commercial libraries in Python?
I think Python has its strengths. My alma mater started teaching Python after I graduated. So I’ve seen it shift in popularity. And certainly, that relationship with prototyping and the academic world may have helped Python become one of the preferred languages for machine learning.
I imagine you can either work on innovative, cutting edge software (such as AI) using Python, or you can work on being the supporting layer for such software.
No matter how you cut it, even an innovative AI company still needs to send invoices to its customers (and thus use a PDF library).
Maybe there are other such gaps that other commercial libraries could fill.
What has been the most difficult part of running a commercial library?
There’s the odd bug or two that might threaten a release, but at least that feels like it's completely inside my comfort-zone.
For me, undoubtedly what gives me the most stress is the paperwork. Taxes. Becoming a company. Having people working for Borb (thus inducing more paperwork).
Joris, thanks for taking the time to answer my questions. Your answers will be a valuable resource for software developers that are considering making a move into commercial library development.