giusdp's blog

Working for an Early Stage Startup

Dec 22, 2024 - 9 minute read

It’s the end of 2024. At this point it’s been 1 year and a half since I’ve started actively working for a startup. Well, it’s actually been for longer… I started helping as an open source contributor initially, until I was invited to join the team.

I was in the middle of my PhD when I started that, and now I’m about to finish it. So I’ve been juggling between these two jobs for a while, doing research during the day and developing at night. Kinda. I didn’t really have a schedule, so I’d work sometimes in the evenings, some other times in the weekends, or during the days if I had a slow period at uni.

The Jobs

In uni I do research mainly on Function as a Service (FaaS) platforms. I worked since my master thesis on schedulers for FaaS, i.e. how to choose which worker should execute a function. From there I’ve been working on this general area of distributed systems and DevOps things, like Kubernetes, containers, microservices, etc. A big project that was born initially as a hobby thing was FunLess: a FaaS platform built from scratch. We used Elixir with the BEAM to have a distributed system from the get-go. It was super fun and it became a published research paper.

So ok, some context given on the PhD part. I do distributed systems things. Why did I start working for a startup at the same time (besides money)? The startup in question was born to create an open source serverless environment. Instead of doing yet another FaaS platform, their idea was to create the complete package: a CLI tool to easily deploy a Kubernetes cluster in commong any variant (local, GKE, AKS, EKS, K3S, OpenShift, etc.), a FaaS platform at the center (Apache OpenWhisk), and as opt-in features, Postgres, Redis, MongoDB, etc. All of that handled by an operator.

The Beginning

I liked the idea and it seemed like a great opportunity to work on something related to my research, so I started appearing on their radar (Github issues and chats). This was at the start of 2022, 3 years ago, which was also at the start of my PhD. I didn’t have any plan to become a real, paid, part of the team so I was just taking some easy issues here and there. I kinda wanted to learn and do everything so I was jumping around between the CLI in Go, the operator in Python, some testing framework they were developing in Javascript and some bash scripting for some CI/CD stuff. I think I was getting overwhelmed with all the things I was trying to do, plus the PhD work started to pick up pace and after a few months I ended up stopping and disappeared.

The Return

The startup kept going without me no problem, I mean I was just a random open source contributor. The product they had in mind started taking shape while I was working on my things, submitting papers, sometimes getting rejects and other times publishing and presenting at conferences. During this time I had the idea of creating a FaaS platform from scratch to get my hands dirty with how this stuff actually works.

Fast-forward to the start of 2023, one day I was curious about about the startup and found out I had a couple of notifications on their slack. Big news they were ready to work on their CLI tool version 2, with more features and with a plugin system to make it extensible. They needed an hand and asked me if I was interested. I jump aboard immediately cause I was looking for something to do after my hobby FaaS reached a good state and I slowed down on it.

The CLI

Initially all my work was on the CLI using Go. The project was just started and had a barebone architecture on how it would work. I started adding things few at a time, following the issues they were assigned to me. I was having a lot of fun and started to pick up pace, admittingly sometimes I was focusing more on the startup than on my PhD. I was learning to code in Go for real and was crunching through the issues.

After a couple of months the startup decided to hire me. I accepted but as a part-time job and cranked up the development and ownership of the CLI. At that point I was the actual maintainer of that project. I started touching other parts of the product like the new E2E tests.

The Startup

Besides developing and merging PRs, I got to know a bit more of this world. Sync calls in the evenings, things not working and needing to be fixed fast, new features being requested out of nowhere, other people’s work relying on mine.

I remember in one of the evening sync calls we used to do, a particular new feature for the CLI was needed badly to make deployments customizables in a clean way, which was needed to be shown off in demos for investors. There was no clear timeline for it, we only needed it asap. I had nothing else to do in that period so I just kept coding right after the call and finished it around midnight. I was so proud that for the day after it was already there ready to be used. A few days later I ended up re-writing it from scratch cause it was a mess (but working).

The work was a bit erratic, with no fixed hours, no real timelines. I guess that’s what an early-stage startup is after all. There is an idea of a product, it needs to be made. It needs to be presented to investors and let them understand what it can become. The rest is just details. I probably worked way more than part-time hours.

Like that I had my GitHub Issues to work on, it didn’t matter when or how. We kept chugging along for some months til the actual product was in a good state to be used by others. The CLI was in a “feature complete” state, the serverless environment was deployable and working and all the E2E tests were passing. In the last months of 2023 we did the big release and put an installation online for people to try it out.

The Post Release

We put everything online and we switched to selling mode. We have a MVP, what it’s needed now is to have some paying customers and then we can go for the big round A!

The CLI didn’t need me anymore, so what to do? I thought I might have stopped working for them in that moment and my employment would have been just for that project. Instead now we needed something else. Something to appease people easily… like an UI. New project idea: a web UI that acted as a dashboard for the system but also to develop functions, all in SvelteKit.

Well, I don’t have big preferences in programming. I only dabbled in frontend in hobby projects but why not. I picked up Svelte, studied it and started coding. There was a very simple prototype already done by someone else, so I started from there. There was also another contributor lightly working on it and the founder tasked me to mentor him. I mean, I’m also a newbie at frontend… but thanks for trusting me so much now.

Another fast forward to the start of this 2024. The web ui is being shown left and right to people, investors, potential customers. I went from giving a hand around to working on the big things that are being shown off. I tried to just ignore the imposter syndrome the entire time.

Another fun fact: out of nowhere I decided to upgrade the project to the new svelte version. Pushed the new version online, happy to use the new cool svelte stuff. With a bit of miscommunication with the founder, the web dashboard crashed completely 2 minutes before a demo with a founder for a damn missing await.

Besides the dashboard I then worked on the onboarding website, used to make accounts for the installed serverless environment. So yeah I had a period as a svelte developer.

At this point I slowed down though. The PhD work always had priority and at this point I had my period abroad, where I went for 5 months away in France doing research in another team (about adaptability in microservices architectures). I was still helping in the startup with these frontend projects, until summer where I took a break to start working on my thesis.

The Return, Again

After a bit more than a month I returned again. I wasn’t too much stressed about the thesis anymore and I could put some focus again on the startup. At this point all the main traction was about the capabilities that the serverless environment could bring into AI applications.

New start, new project. Now what’s really needed was to create a proxied runtime for serverless functions to be ran on servers equipped with GPUs. Awesome, I’m back with Go and I’m doing something innovative. I also talked about it in a previous blog post.

I work on that, new demos could be made showing off private LLMs called via serverless functions. Cool. People are interested but we can make it even better: have the LLMs replies be streamed back via the serverless functions. New project, again in Go to do that. The previous year I worked with Go on the CLI and never had to use a goroutine (concurrent programming stuff in Go), but now I’m doing the complete package: goroutines, channels, sync groups, etc. I’m having loads of fun again.

The Present

In the meantime I started partecipating in the demos and calls with customers too, getting even more involved in the business. We managed to get some customers, we have an awesome MVP. Our installation has been up for over a year now too.

I feel like at this point I saw a lot how the startup world works. It’s been a rollercoaster and lots of time I wanted to quit, just stick to the PhD and continue in academia chilling with my papers. But I also am the kind of person that wants to do stuff, create things, have my own business one day. I’m really glad for this experience, and for putting my skills and passion to learn on good use.

One thing I learned is that unfortunately appearances matter more than the product itself. Thinking that if you have a really good product then it will sell itself is a big mistake. People will put money more easily if you have a nice looking website and a good pitch with the promise that the product will be able to do x and y (at some point).

One day I might talk about this startup in depth with all the mistakes it did and the things I didn’t like. In this blog post I wanted to just talk about me doing some work experience, which I in general enjoyed a lot.