Early technology choices and AI supported workflows
I managed to spend quite some time this week to research technologies, pick a name, clarify the vision and set up an initial domain model.
I managed to spend quite some time this week to research technologies, pick a name, clarify the vision and set up an initial domain model.
Name
So, we have a new name! After some very anonymous person starting creating an IDE at codescope.app, I decided to find a new name. I settled on Comper and bought comper.io . Comperio is the Latin word for "to learn, discover, ascertain or find out". This is exactly what we want to do for the software in organizations. The name is short, pretty catchy and not a "cheap" combination word.
AI Programming
I've also spent a lot of time pair programming with AI tools (Plandex.ai, Aider.chat and Github Copilot) to get a good grip of what these tools can do. They are quite limited and heavily dependent on both the available context and the prompts. I'm blown away by what I've seen so far: although the results are mediocre at best, the workflow is good but the industry progress is amazing. In a couple of years with better models and better Agent integrations in IDE's, AI aided coding will be fantastic. The bill is hefty though. In 30 minutes of using Plandex my OpenAI bill was 10 USD.
The Good the Bad and the Ugly for early stage technology choices
When building something solo it's important to optimize for an ultra-fast feedback cycle. We're looking for a high productivity environment that will not get us into too much trouble later. If a customer says "I would like this" and you can build it in minutes/hours you can get very good products.
I'm struggling big-time with technology choices, so I'm going to say what is good about the tech choices so far, what is bad and what is ugly.
The good
In the PoC I built last year I used Rust for the git parser and fabric.js for the canvas. These are great for their job and not going to change.
Always focus on what is not negotiable and pick that part of the tech first. For me that was "I want to parse the git history of huge projects like the Linux kernel on-premises within minutes." For that, Rust is the standard choice nowadays. For the front-end it was "I want to have a super smooth 60fps zooming experience on browsers on regular laptops, zooming in from high level architecture to lines of code, with 1000s of objects in the screen". For that I needed to use a canvas and a library, which turned out to be fabric.js.
The Bad
The first big decision I took last week was to split off the product into two parts:
- The SaaS portal for managing users, orgs and installations. This is a pretty boring portal but needs a lot of security.
- The Installation that actually stores all the data, parses your git repos, etc. There will be regional cloud versions as well as on-premises versions. I suspect most people will go with on-premises.
Obviously the Installation is going to contain the most clever stuff (aka intellectual property). A canvas renderer in the frontend, a high performance git indexer in the backend, an IDE integration, a real-time collaborative editing environment.
I'm not so sure about VueJS (although I love it, I'm not sure if we should not just use fabric.js directly from plain javascript).
As the Installation is most important and complicated, I need to make the right choice there for sure. I'll experiment with some different platforms for the SaaS portal first and see if I am blown away by one, then I'll probably use that.
Attempt nr 1: FastAPI
Last year I with Flask but it had no database and no OpenAPI spec. I think we're going with FastAPI instead. I spent time on setting up FastAPI with a simple username password authentication scheme, docker-compose, a database model based on SQLAlchemy and database migrations based on Alembic. I noticed how confusing everything was. SQLAlchemy upgraded to v2 and the APIs changed. SQLite had problems that went away once I moved to PostgreSQL. There were ini files to configure, models, schemas, access rules. I probably got spoiled with the powerful Low-Code environments at Mendix.
For the next week there are two alternatives that I want to consider.
Attempt nr 2: Supabase
Supabase has a free plan, is free for self-hosted, has built in real-time collaboration, row-based access control, authentication. It seems really cool. I'm going to give it a spin.
If I use supabase I will have no separate backend. Just a front-end and database management platform. Seems cool!
I'll have to investigate how I can package on-premises versions of Supabase and if the licensing supports it.
The Ugly
I'm bad at design so I need some help. I bought Tailwind UI last year. Everything front-end is so bad, confusing and so commercial. I'm just doing hand-crafted tailwind designs based on the Tailwind UI package. Hopefully the AI tools can help a bit here. The lack of standardization and terrible programming experience is infuriating.