Of Locals and Ledgers

Every once in a while, someone from the Tebi team will write a blog in this space. In this first post, Tebi’s Junior Kotlin Developer (and CEO) Arnout Schuijff shares a personal account of his mission to help independent business owners.

In 2012, I wrote a simple Point of Sale (POS) app for my friend Stef, the owner of a local bar. Stef was still registering his sales with pen and paper at the time, and the tax authorities had given him a warning. I offered to build a digital replacement for his stained paper notebook. Stef was not particularly fond of entering the digital era, so he agreed to my offer reluctantly. 

The resulting POS was, I would say, “charmingly bare bones,” but Stef’s bar — which has since then been taken over by Frits — has been working with it for eight years. During that time, some tweaks were necessary (thank you, Pieter B!) and only a few minor issues came up. One of those issues was a single tab called “Susana €57,40” that had been opened in 2018 and which, when you try to close it, crashes the entire app. So Frits moved it into a corner and explained to all staff that under no circumstances should that tab be touched. Problem solved.

In March 2020, I had just come back from a three-month stay in LA when I, like everybody else, suddenly found myself working from home. Next to all the Adyen work, I decided to spend some quiet evening hours on upgrading that old POS that I had written eight years before, fixing old bugs, streamlining the design, and adding an accounting system at the back end. When mentioning my pet project to other (Android) developers, they would inevitably ask me, are you writing it in Kotlin? I gradually became more embarrassed to say no, it’s in Java, so I decided to make the leap to Kotlin and thus become a junior Kotlin developer. 

I built two versions of accounting systems before: the first one for Bibit, when a simple payment status table got out of control, and the second time for Adyen, where we incorporated many of the learnings from Bibit, mainly with regards to scalability. But this time around, it was going to be small and simple. Just the essentials. First task at hand: building a mini ledger to account for all the sales. This idea of a mini ledger gradually developed into what I’ve now come to call ‘subledgers’: small ledgers that come into existence dynamically and are host to a set of bookings for an arbitrary period of time. When a subledger is closed, the resulting balance is transferred to another subledger. For example, a subledger representing an invoice is closed and its balance is booked into a subledger representing a business day. Seen in its entirety, the overarching ledger consists of a swarm of subledgers that communicate through a streaming platform, in our case Kafka. I say ‘swarm’ because they are loosely linked, and are in themselves stateful but independent.

So, ‘small and simple’ became a bit more than that. I realized that I was basically building an accounting infrastructure that could serve as the basis for many business processes, not just a POS at the counter. I get really excited when talking about this because of all the amazing possibilities it opens up to build lightweight apps that seamlessly work on- and offline and stay in sync. It allows for ledgers as small as a single invoice all the way up to large scale banking ledgers. This ‘infinite’ scalability is achieved by keeping the subledgers independent so that they can live anywhere and communicate through event streaming, creating an extremely snappy user experience. But I’d love to tell you all about that in another post.

The other main driver for me personally is to work together with people that share my enthusiasm, who will tell me straight in my face when I come up with a BS idea and who will be creative, smart and funny. I feel blessed that I managed to bring my talented friends Mazdak, Greta, Rob and Thijs on this adventure. This colorful ensemble of fun people all share the fundamental belief that it’s possible to create an ethical business that charges only for added value, while staying aligned with the interests of independent business owners. 

Tebi is our attempt to create a next iteration of technology for businesses; a single platform that brings local businesses around the world everything they need, built for and by business owners. Tebi will be free to use on a single device, and reasonably priced for multiple devices. In due time, we are also open sourcing the codebase so that anyone can host the software at no cost at all, as well as make adjustments to adapt to local circumstances.

Step by step though. Today, just over a year after I started working on these ideas, the first version of Tebi went live at my local bar. The train has left the station.