I think everyone knows at this point that there are limits to the idea that the tech industry will solve all of our problems as humans. People obviously found out when Elon Musk decided to “revolutionize” twitter, or when Unity decided to charge developers 20 cents for every install. Under capitalism, the tech industry (like any other) is just there to exploit value out of whatever resource it can acquire. I, and many other people, don’t like that aspect of our world. I just want to be creative and make video games all day, but I am forced to sell my labour in order to afford a living (I am very lucky to work in the video game industry, so I’m technically already in the space I want to be in). But I’m a programmer! What if we could appropriate one of the most toxic aspects of our society (the tech sector) to work in our favour? What if we could design an application that generates us money in such a way that we could just sustain ourselves, effectively giving us a little money tree, freeing our tie and giving us the privilege of boundless creative pursuit.
I’ve always been interested in how socialists or social movements can appropriate key pillars of capitalism for the good of the all humans. Marx’s predictions of a machine that can produce value without wearing down is interesting in the light of contemporary tech. This hypothetical machine does some operation on some resource & creates value, with the only input being energy rather than labour itself. It’s very clear that in our society these machines are software, applications or “apps”. Unfortunately for us, most of our favourite pieces of software being exploited by the capitalist class. A machine that doesn’t wear down and makes a hypothetical infinite amount of money is appealing to capitalists and their bottom line, which is why they own most of the software companies out there. This is why venture capitalism is almost part of the tech industry itself. But what if we seize these means of production for ourselves? What if we make a tiny money machine to sustain my creative goals? It’s a highly individualistic approach that is in nowhere near the revolution that brings about the dictatorship of the proletariat, but it will have to do for now. We’re not here to change the world, we’re here to get the means to change the world. If we can get enough money out of this to sustain ourselves, we can potentially make culture that fundamentally questions and attacks the pillars on which neoliberalist capitalism stands✨ (ideally, obviously that’s a bit of a reach)
I worked in the tech industry for several years, it’s depressing. The worst part is not even the managers, CEOs, sales people or the relentless alcoholism of everyone involved in order to just cope with the outright boring nature of our work. The worst part, is that no matter what company you work for, you’re essentially making Microsoft Excel with extra steps. What do I mean by that? Very simple, the foundation of any application is to take some data and do some kind of operation on it. We usually do this by having some code run on a computer, accessing a database and then operating on some data, returning some and/or storing some results. Wow, technology is truly wonderful, isn’t it. However, most computing that needs to be done by people on a day-to-day basis, doesn’t need “the cloud” in order to be effective. Most apps are just some data that the user wants to do some operation on and see the result. I found this out when I pitched the entire software package I was making to an artist friend of mine. He just responded, “I can do all of this with Excel though, why would I pay 100 euro a month for that?”. He was right. After that, every single software company I worked for was evaluated by this measurement. I soon realized that yes, even though the sheer magnitude of some computing and amount of data might require some custom solution sometimes, the software itself could almost always be easily replaced by Excel. This is a hilariously stupid oversimplification, but in an alternate world where Microsoft somehow gained a 100% monopoly on computing, they would’ve probably found a way to use Excel in these contexts anyway. Obviously, there is enough to be said for the need for custom applications that do things their own ways, for one, I would hate people to have to deal with the UX of Excel when they just want to order some food through Uber Eats. Doesn’t change the inherent depressing thought of “making another Excel” every single time I worked for another software company.
So, in October of last year, I really wanted to solve a problem I was having. I’m writing a lot of my notes and tasks in Notion. If you don’t know what Notion is, it’s basically your favourite parts of Evernote combined with Trello. It is amazing software if you need to process information and plan a lot of work. Here’s the problem with Notion. It has a really cool way to show your tasks, pages and appointments in a Calendar view. However, there is no way to sync this calendar with something like your phone, smartwatch or calendar on your laptop. I was an avid user of my calendar app on my different devices as well, but I wanted to make sure that I didn’t have to write all of my appointments twice. What if I used Notion’s API to write a small script that converts it into iCal format? 🤔✨
So I did! And guess what, when I initially did some googling to find a solution for this problem, I found out that loads of other people were having problems with this as well. What if I offered this script to them as a service? I mean, most people that use Notion have some form of a disposable income and are willing to spend money to improve their productivity, right? They did.
So I started with a public integration with Notion that provided the Notion-appointment-to-calendar-appointment converter and went to all the Reddit threads where people were asking for a solution to the problem.
Over the span of the last 11 months, more than 15 thousand people have found their way to the integration. The platform has about 6 thousand daily active users and is going towards 200 paying users! This all comes down to more than 500 EUR monthly recurring revenue. I spend this money on things that make me happy and invest it into community projects like gamedev.lgbt 🏳️🌈✨
So how do we appropriate tech into something that we can build our life on? There is a Venn diagram of different things to come together for the application that can do that.
-
It needs to have a demographic willing to pay some amount of money
-
It needs to be manageable by 1 individual (me)
-
It needs to be low-to-zero cost in order to operate
-
The software shouldn’t fundamentally hurt anyone
It needs to have a demographic willing to pay some amount of money
Why start a small business for a demographic that isn’t willing to pay money for your service, but a lot of contemporary apps seem to be focussed on solving problems that people might have no need to pay for, or where the last resort is always selling data. I didn’t want that, I wanted to provide a service where people just pay upfront for the service rather than having to do shady data practices (which I don’t even know how to do).
It needs to be manageable by 1 individual (me)
Manageability sounds rather simple, but a lot of people might get it wrong. The solution to the ever-increasing complexity of DevOps & tech in general isn’t to automate it, but to eliminate the need for the complexity to begin with. If you are designing your application to be run in the simplest & least complex way, it will make it more manageable. It also means that you design your code not for cleanness, structure or aestheticism but rather for manageability over the long run. You’ll see this come back several times as some of my code seems counter-intuitive to what most people would consider “correct”. The end goal should be for the project to be manageable, not for it to be “perfect”.
It needs to be low-to-zero cost in order to operate
This is mostly about not having scalability problems, either now or down the line. If an application like this requires costs that outweigh the revenue, then we’re designing a money pit rather than a sustainable business. If we keep our costs low for hosting, deployment & operation, we can extract the most profit per paying user, therefore making it easier to get to our goal: being able to pursue creative freedom!
The software shouldn’t fundamentally hurt anyone
The last point is one that I think should be evaluated more in tech. One could easily make another platform with some bullshit in combination with AI, or doing something to automate a task done by a secretary. My problem with these types of software solutions is that they make working class people obsolete rather than enhancing their (work)lives. My first job at a startup was mostly characterized by a story that the CEO once told me. He was giving a demo of our software to a medium-sized company. Our software was rather simple, it was the combination of a customer management system, with human resources and billing. These tasks were given to a secretary within the company, a secretary that was sat in the same room as my boss while he was giving the demo. When it was time for a round of questions nearing the end, she raised her hands and asked, “But if all of this is automated, what work is there for me to do?”. And this is where my boss really likes to share the punchline of his story: he told her “Well, I hope your boss really likes you enough to come up with some work for you!”. It’s absolutely disgusting, and it made me forever try and design applications that don’t have the opportunity to destroy people’s livelihoods.
The result of all of these design decisions together? A manageably small, cheap to operate & profitable platform. An interesting side effect is that the profit margins of this service are big enough for me to run it by myself and maybe make a living, but would be completely impossible to run a larger business on. This means that this niche is not easily taken over by competitors with bigger engineering teams. The only risk realistically is that Notion decides to sherlock the feature and give users access, completely shutting down my business 😕
The application I landed on is a simple web service written in Rust with SQLite & Litestream as a database. I deploy using fly.io, andI use Stripe as a payment gateway. By leveraging Rust, I have safety guarantees that make sure I don’t have to wake up in the middle of the night to an inbox full of emails telling me that the service doesn’t work because of a trivial software error. By using fly.io I don’t have to worry about the hellscape that is deployment, I just need to make sure that it compiles on their remote builder server, and it should just be fine. Using Stripe, I don’t have to worry about all the different payment methods, and I can just launch the service globally without having to get into the nitty-gritty of setting up payment stuff for every single country.
I also decided to run Rust in the frontend, so I didn’t have to deal with a new JavaScript framework (again) and I could have the same safety guarantees in the frontend as I do in the backend. Also, because Rust is such a low-level language with great community libraries, it was easy to implement a service that is hyperefficient in computing and memory footprint. I used to run a 256MB RAM with one shared CPU core for the majority of the software’s life. I recently had to up it to 1GB RAM because Litestream is a bit RAM hungry, but I’m working on removing that in the future.
The only bottleneck that the platform has is my bad implementation of things & the speed between my service and the Notion API. This means that with the speed of Rust’s data processing, I can process thousands of calendars a second without having to break the bank for that computing. I don’t even need to serve the calendar as quickly as possible, because the client that the user uses, is calendar software that was built to work with archaic calendar servers that are Way slower. This means 50ms+ response times aren’t bad, since the user usually isn’t aware of their calendar updating.
I am able to service more than 6 thousand daily active users and more than 300k+ requests a day, without having to spend a penny: the resource use is so low that the total costs of running my service is less than $5, which fly.io will just give you for free!
But then how do I make money? Like most services out there, there’s a free version of the service and a Premium version with more features. I really don’t like the way that other services lock a majority of their features behind a Premium model, so I decided to make most features available for free, but just with the limit of having 1 calendar, which is enough for most users. When the user is a power user that is likely to pay for Notion already & makes use of advanced Notion features, a Premium plan is more relevant. I didn’t want to make it too expensive either, it shouldn’t be more expensive than Notion itself, that would be silly.
I settled on 3 EUR a month, which after Stripe fees I keep 2.75 EUR, after taxes, about 2,27 per user per month. At the time of writing, I have 197 paid users, which Stripe tells me gives me 541,75 EUR a month. But there’s a small twist that usually makes this number a lot higher. I give users the option to pay for an entire year, giving them a small discount, but giving me a lot more money upfront. A yearly plan is 30 EUR, which loses me a bit of money, but gives a big boost on a monthly basis. This month (September 2023) I’m making about 851,46 EUR!
The low maintenance nature of the project makes it nice to let it just sit for a bit, but with the increase of scale, there are definitely some things that need to change for the future of the platform to be equally fruitful. Right now, I’m running against the limit of what SQLite can do for me, safely. It’s okay with the total amount of transaction being below 1 million, but once you get above the marker, it’s more spicy to guarantee data integrity in some situations. I’m currently rewriting the platform to use an external database server to guarantee data safety.
Next thing is to do a whole load of caching of user appointments, so I don’t have to reload all the users’ appointments, but rather only the appointments that are new or updated. Once that is done, I’m going to move on to implementing one of the most often requested features: making it possible to change and add appointments in your calendar software and have those changes reflected inside of Notion. I have a strong suspicion that the reason why a lot of users don’t end up paying or using the service, is because they expect this to be a feature. Once I release the feature, I expect the conversion from (inactive/free) users to paying user should increase significantly, potentially doubling my revenue, without increasing operating costs by a lot.
What am I going to do with this new-found livelihood? I’m not going to quit working, I love my job as a technical artist at an indie studio. But rather, when my work on their title is done, I can freely dedicate my time as I see fit. Usually I have to evaluate my creative projects by their ability to pay my bills in some way, completely eliminating some avenues of creativity. With my little money tree, it’s all of a sudden a possibility to these things. I can be my own investor: an investor that wants to see more anti-capitalist culture to fundamentally question the world around us.
Or maybe Notion pulls the plug on my integration before I can get anything true financial stability out of it, who knows. Regardless, I enjoyed this as an exercise in engineering and applying philosophical ideas to my own projects.