086: Just use postgres, man

Dominic:

Hello, Gophers. You're listening to go podcast. I'm Dominic StPierre.

Morten:

And I am Morten.

Dominic:

I realized that I I need to pronounce the the t at the end of the word because, well, as a French Canadians, we don't we don't do that here. So that have the impact of, you know, the the transcript that that we are doing for this podcast, you know. I I was interviewing the author of a Lizette the other day, and I was saying rust. And I was not pronouncing the t, so it it it kind of translated to something else. And I cannot edit that because that part in in in transistor, the software that that I'm using to host this podcast, this piece is not accessible.

Dominic:

So I cannot I cannot even even play with that. So sorry about that. It's my pronunciation as a, you know, Canadian that speak French. Yeah. What is going on with you, Morten?

Morten:

Well, the usual hardware incompatibility issues as always, but mainly been working last week on getting. I spent a lot of time last week after we spoke, like, trying to fix my mic again and gave up and just, like, right now recording on the iPad. So that was a lot of fun. Other than that, I have been doing a lot of rewriting the the the what I call the create operator, the thing that runs on on DeployQuad servers, getting that into something more sensible. I tried to skip corners initially to just get, like, a a working proof of concept up by having l l LLMs write a vast majority that focus on our platform, which, of course, ended up not really working as expected.

Morten:

So, yeah, been fixing that in preparation for actually letting people audit myself onto the platform, and it's been great. You know, it's always it's always, like, nice, you know, to understand things that you created and not just verify that they work. It's such a underestimated thing that you see, for, like, a year or two, everyone at least on Tech Twitter just kind of forgot was the thing that you could do, you know, like, actually understand the workings. No. No.

Morten:

You just need to to test it out, and then you're good. It's like, no. No. Definitely. Definitely not.

Morten:

So, yeah, I'm almost done with that. I'm gonna be building some onboarding for Deploy Crate this week, and then I think I'm actually gonna gonna let it sit a little bit and gonna gonna gonna do some freelancing again. Let it let it live its own life for for a while.

Dominic:

Yeah.

Morten:

Yeah. So Nice. That is most of what I have been up to.

Dominic:

How how do you test this at the moment? Because I I remember you saying that you don't have any UI at all at the moment. So how you know, what what is what is the the path for you to test this this operator at the at the moment?

Morten:

I I I have I have staging and production set up separate, so my staging is just being completely duck duck dogfeeded? Dogfooded? What is what is it? Yeah. Yeah.

Morten:

I tried to add to get a testing setup. But since this this involves, like, a Debian system and then installing it and then running through with running, like, sudo and and and system d commands, system system CTL commands, it doesn't really there's not any, like, clear path. So I am currently just testing this on on on staging, where sometimes, if I break contracts, right, it's literally just SAP ing a new binary into the staging server and switching to traffic. But for the most part now, the self updating mechanism is stable. So so I I generally just push to to to staging.

Morten:

I have, like, in my in my dashboard, have a way to to trigger updates across all servers. So right now, I just trigger updates across all staging servers and and then, you know, test it out. I also have locks, live logging that comes into that. It also helps a bit now. So it's starting to be

Dominic:

Oh, nice. So you're basically tailing the standard out standard output of the of the operator?

Morten:

Yeah. Yeah. So everything runs in in in, like, a system d service. So I basically just use journal CTL Okay. And then with different different durations, do I do a little bit of filtering.

Morten:

So that is, yeah, that is the locks for now. That's not necessarily gonna be the long term plan, and I'm still also playing around with how I wanna do telemetry. So you can actually search locks and and and do some, yeah, do do do do do proper

Dominic:

Yeah. Yeah.

Morten:

Proper lock work. Right? But because right now, it is just like like life pulling in the locks. So at least there is some visibility into what's going on. But once

Dominic:

So how does it work? Is it is it like a WebSocket that that your operator have with your server, and now the the operator do some some kind of tailing on the journal file, and it it just send the data as it receive?

Morten:

It it's it's just an API request. So DataStar does the does the trigger the request to deploy create and deploy for it then, like, triggers the request to the create operator that then simply just runs runs journal CTL on the on the on the specified service that can either be the the application that is running. It could also be some of the service like KD or the operator itself. Yeah. And then then we just I just show that in the UI.

Dominic:

Okay. It it does not refresh. There's a new line in the log. It it you you need to do you need to refresh? You need to click a button or something in your UI?

Morten:

No. No. No.

Dominic:

It's just

Morten:

right now, it's a it's a little bit of a naive approach because it's just data start that is just pulling on an interval right now. So it so the the deploy create the platform itself has, of course, access to all of the the the operators that's running on all the servers. So the UI in the dashboard will simply just ping the, like, the controller for an update, and the controller will then fetch from there. You know?

Dominic:

Nice. Nice. Nice. Okay. Okay.

Dominic:

Good. So so you have a it like, an infinite loop in your Go handler that is, you know, that is working with with Datastar, and this thing this thing is is calling the the operator in a sense?

Morten:

I could do that. That's actually what I'm gonna do on a broader scale to be able to update the UI when you trigger a deployment. But for this one, it does there's no open connection. There's no for loops. It's it is just Datastar has this I forget the name right now.

Morten:

But Okay.

Dominic:

There's a there's a Datastar mechanism to to call an endpoint at an interval?

Morten:

Yeah. Yeah. Yeah. Oh, okay. I will look up the name, but it's something like polling.

Morten:

It's it's basically

Dominic:

like Okay.

Morten:

Okay. You can either do the one, you know, where you keep the connection open so you can have, like, basically two way communication, or you can just have the UI ping the the front end for let's say, the back end for updates. And then kind of just using a big morph. So everything that needs to get updated, get updated. Right?

Morten:

And I I believe Ben and Delaney talks about this can be more efficient if more people are, you know, on the same page. Yeah.

Dominic:

Yeah. Totally. Yeah. Not not only that, but if if you were to tell your log as well, so as soon as there's one line, it just sends the new line. It it it does not sense the the huge blob of of the entire log at each each time.

Morten:

I think what I really need to do is also I'm I'm debating if I wanna add traces to the operator. I'm trying to keep it as minimal as possible, but then I could then I could actually use that to get, like, the IDs because right now, it's it's not really morphing correctly with based on the IDs, or maybe I could use the timestamp. That could also be a way. And then I should be able to also create a little search box where you can just search whatever is in the UI and then have have, like, data stuff filtered out. That might also be a little a little, what's the right word?

Morten:

A little quick way to get some, like, log log searching. Yeah.

Dominic:

How are you handling that? Because if I'm not mistaken, is the the data the raw data from the journal is, you know, contains, like, NC characters and whatnot. You know, those are probably not translating right away to HTML properly. Right?

Morten:

No. But I'm I'm I'm just grabbing the the message output. Right? So I don't know if that's what you're asking.

Dominic:

Well, I don't know. It's some you know, sometimes they'll there's colors when you are looking at that in your terminal, and I I guess that those colors are in the terminal coming, you know, have have some NC codes that will will just not convert to HTML colors and whatnot.

Morten:

Yeah. I'm just actually quickly trying to look it up now because I get the we specify service, we specify the name, specify duration, then the no pitch, and then output is short ESO. So that I don't get any other real output than

Dominic:

Okay. So it's a raw it's a raw text that you're getting from the journal Yeah. Blogs. Okay. That's cool.

Dominic:

That's cool.

Morten:

Yeah. And then I just style it in the in the UI. Right?

Dominic:

Okay. Okay. Yeah. Got it.

Morten:

Thanks. That is moving along, but I think it's now is the time to to to get some to get some some money in the bank again and and then let it live a little bit, see if people actually wanna wanna wanna pay for this or not. But, yeah, it's getting to to a very stable point on the application side, and there's the whole telemetry, manage database side of things that likely will come, but will come a little bit slower, I think.

Dominic:

Yeah.

Morten:

Yeah. I would like to because I I've never run a click house databases myself. This is what I'm thinking of using for telemetry data. I mainly I always, like, either used AWS or Datadog or also done a lot with with Grafana stack. Right?

Morten:

So kinda kinda wanna a self self run this thing on on Deploy Quiz stuff before start offering that to to customers. Right?

Dominic:

Yeah. Sure. Sure. Yeah. Kickhouse is is is pretty is pretty nice.

Dominic:

Very, you know, very man manageable. I I did a course actually on on building a Google Analytics kind of application in Go. And yeah. I was you know, I I wanted to demonstrate the the columnar, you know, stats and whatnot. It's it's very, very, very quick compared to to a Postgres.

Dominic:

I I did a a segment on on the course at some point where I do compare the exact dataset from Postgres with with Clickhouse and wow. Yeah. It's it's brutally brutally destroying Postgres. But, you know, Postgres is not done for that as well. No.

Dominic:

You know? But but, yeah, it's a it's a different it's a different way of thinking. Yeah. Kinda. You need to explode your data a lot in in in that system.

Dominic:

Yeah.

Morten:

Yeah. I I really wanted to use Postgres for this, but, yeah, it's not gonna it's not gonna be a thing if this gets any any, like, any

Dominic:

Well, the scale. Yeah. Yeah. The the A

Morten:

drop of success, I guess, what I'm thinking I'm trying to say right, where it gets like this project gets any kind of success, this is never gonna scale. Right? So it

Dominic:

needs to But on the on the other hand, if it's going to take you, I don't know, x amount of times to to use ClickHouse versus just having the MVP with with Postgres, you know, this is something that I I you know, it's always evaluating the how much time will it take you to switch to Clickhouse if the scaling happened? Because scaling does not happen from, you know, Monday to to Tuesday. I mean, it's I remember when I was at LeadFuse, you know, LeadFuse was was I I it was a SaaS that I I was there as a as a CTO back in 2016. But, you know, the bottom line is that at some point, it's it's started to scale. Not not, you know, not a crazy amount, but the the task that that was done there, which was like, you know, scraping LinkedIn, which anyways, but I quit the campaign, by the way.

Dominic:

But that that's not the point. But at some point, I mean, you scaling well, it it does not really happen, like, in during a night. So, I mean, you you could probably start with Postgres and and at some point, just move to especially if your if your services is is kind of, you know, well well written, just swapping the the database might not be a huge thing to change at some point.

Morten:

No. And, I mean, that's a fair point that that could also be an option. I just I I I wanna go in that path, and I would like to I think that's I think I I would let I would rather do that when things are small.

Dominic:

Yeah.

Morten:

So I is it, like, if it's so my plan is also to start opening up for people that can actually subscribe and then get, like, a discounted rate while things are still getting built. If something fails over in the beginning with, like, say, 10 customers, it's easier to go in and help those 10 customers individually by hands to to to figure out where it's like I don't know if this is an English saying, but in Danish, you kind of say, like, holes in the cheese to figure out where the problems are.

Dominic:

Right? I don't know that.

Morten:

Yeah. You don't know that? No.

Dominic:

No. No.

Morten:

Probably probably a Danish Danish phrase then. Yeah. So the the I definitely was also just saying kind of like saying, fuck it. Wondering of just saying, fuck it, and then putting it in Postgres. But then since this is still early days, I I I think it would be easier to reason about doing it now because I also like likely would would have to to to play around with a lot of new technology that's that, yeah, from my my experience, it's always easier to do.

Morten:

Sure.

Dominic:

But the but the counterpart to that is that if you reach that, you will have time and money at that point.

Morten:

Yeah. Yeah.

Dominic:

I mean, the yeah. It's it's always a trade off versus well, if if you want to to jump into Clickhouse and because you want to learn and things like that, that's different. But if if if your main goal is to ship this thing, well, because Postgres, you know, when when I when I said that postgres versus clickhouse in my example was was abysmal. I mean, it was like in the 20,000,000 rows and whatnot. It's on under under 10 millions, there were not much difference.

Dominic:

Yeah. So it's just as at a certain point, which is is what I'm I'm trying to say. It's like from the 10,000,000 to 20,000,000 rows, you still have a gap. You still have a tie you still have time to react to to to something happening.

Morten:

Yeah. Yeah. You know?

Dominic:

But, again, I mean yeah.

Morten:

It's true. It's true. And I I'm not I'm not saying it won't like, could also just go that way, to to get it out there, I just, yeah, it's it's not

Dominic:

It's just something to think about. I I I I just wanted to plant that seed in in your in your mind and say, well, what what is important to you at the moment? You know? Yeah. Is it is it to ship faster, or or you want to to handle a scale that might not be there, you know, for, I don't know, one year, one and a half year?

Morten:

Yeah. It's it's true. I also I researched also what what you could do with Postgres. I also know that it's what is this called peck Percone or Postcone or Percone. It's I it's something with with p e r something that also did an extension for Postgres or they ship in their just to that's that version of Postgres for optimized for OpenTelemetry data.

Morten:

So it's not out of the question that I could do this in in in Postgres. I I Yeah.

Dominic:

Yeah. But but but anyway, you know, click house is not is not long to implement as well and things like that. You know, I'm I'm I was not, you know, trying to change your mind or whatever. I'm I'm I'm I'm just just saying that, you know, sometimes we tend to do some some things at the beginning that, you know, might yeah. Might might derange you from the main goal.

Dominic:

Yeah. Derail derail you from the main goal.

Morten:

That is that is definitely true. That is definitely true.

Dominic:

Alright.

Morten:

Yeah.

Dominic:

Nice. So do you so you don't currently have a way to test your system locally, you know, let's say, with with Podman or Docker and things like that. So you you you run a series of tests and it it provision, you know, it provision the server in in a Docker way. So that that's where that's what I was trying to ask earlier when I was saying testing, you know, not testing in a real server, but do do you have some way to automate, you know, the the a fake deployment on a a throwaway container that you could just, you know, boot up and delete that at at will?

Morten:

No. Not yet.

Dominic:

Okay.

Morten:

I've I've really tried to to find something that's that also would also would work nice in the CI system because Mhmm. I I I need access to so the way whenever I provision a server, I run specific hardening stuff, and I give it I'll I give it permission to do specific things. And those specific things, it can use sudo for. So I don't run into the the you need a password issue, but it's also very narrowed, the set subset of things it can do with sudo, but it still needs sudo. And and and that is not really something that you typically do in docker images because it's more on an application level.

Morten:

And I also need system d or system yeah. System d service access, and I did found a Docker image that had that. But then you need to rely on different kinds of processes, and it doesn't really work. It doesn't really work. So there's another one called Incus that I have done some work with and tried to make it work, but always end up being like this.

Morten:

Like, I might as well just provision a new server, and that cost me $5. And then I can delete that server. Yeah. Yeah. So and go going back to your point about, like, trying to to spend the time in the right place.

Morten:

Right? Because that that long term will Inkos probably be the better option. Because I do run into things where because there's so many layers that you have that I have to have in my head to test things where I was like, I just wanna do this locally so I can write, like, a golden file test or something. But it's for now, I I I don't wanna spend, like, two days with Inkos to to set it up, which is probably probably what I I need to do longer term. Right?

Morten:

Yeah. Yeah. Yeah. So for now, it's a cheap HESNA server that I can delete or

Dominic:

Yeah. Oh, yeah. Totally. Totally.

Morten:

Right. Yeah.

Dominic:

Yeah. Good good point. Good point.

Morten:

But that's still the yeah. That that's also the the the whole rollout process because, ideally, when people get onto the product, the create operators should be in this call as so stable that I don't really need to update Yeah. Anything in the API. But I do have the option to roll it out, and I'm roll it out in, like, batches and do, again, some some telemetry to see does it succeed, does it not succeed. Right?

Morten:

But it's also it's also like the whole flow of continuously installing, updating, you know, getting getting that as as as robust and and and stable as possible. Right? Because it's gonna be hard. Let's just say not say if, but when I get a thousand customers and something goes wrong and I have to SSH. And I can't even SSH into their servers.

Morten:

Right? I have to Right. Write them and ask them, can you can you give me a a key? Give me your SSH key so I can go into your server, which is gonna be a hassle.

Dominic:

Give me your SSH key. There's no problem there.

Morten:

This is totally not a scam. Letter. Yeah. Nice. So, yeah, that's the state of the the projects.

Dominic:

Cool.

Morten:

Yeah.

Dominic:

Cool. What about you? I, well, finally shipped version one dot seven of static back end.

Morten:

Nice.

Dominic:

Yeah. Now and well, before we go into into some details, I post on Reddit.

Morten:

Okay. And it

Dominic:

got it got it got caught by their bot there. There there there there's this bot at the moment. They are preventing on I'm talking about slash r slash golang. They are preventing people from posting too much, you know, small projects and whatnot. It it was caught by that.

Dominic:

The title was something like oh, I don't recall the title. You know, something like, you know, maintaining an old Go application is the opposite of other languages. And I had unarchived my seven years old project, which was in the title. So unfortunately, I was not there when the post got live because obviously, at some point, the the mods unblock that. I I I I still have, like, 61 upvote, which which is which is, you know, very very nice, I I think.

Dominic:

I I think my post was interesting because I've been maintaining old c sharp and dot net application in in my career, you know. Before I so was it's always it always amaze me how Go is good at at these things. Just, you know, being stable. The the backward compatible compatibility compatibility that we have with the version one is very much underrated. When when you jump back into an old project that's or, you know, any any kind of GO program that you you left for a couple of months, even years, it's it just feel right.

Dominic:

And I haven't seen that in any other languages that I've used. As you know, especially especially .net. Mhmm. Especially at the beginning because at the beginning, like like I was replying on on the Reddit, it was mainly, you know, framework upgrades and whatnot. And now it's not it's not really your code, but at some point, your code isn't working with the new, you know, quote unquote version that Microsoft wanted to ship.

Dominic:

Yeah. So that was that was killing killing us. When I say us, I mean the small company where I were alone. But but again, yeah, version one dot seven, very nice. I think this thing is pretty stable.

Dominic:

I do have that that's what I was asking about test because I'm pretty pretty satisfied about how tests are working in static back end. I do have a a suite for Postgres and Mongo and a SQLite and the in memory provider. Mhmm. So all all the providers are, you know, I think, properly tested around 75, you know, percentage coverage, which is not a metric that I'm interested usually and whatnot, but it it's just nice to see that. Well, on paper, this work and and on production, it work as well because I'm I'm, you know, I'm I'm using it in production.

Dominic:

So should be good. Nice. Yeah. A a lot of features related to user management. So, you know, a a user can now be part of multiple accounts.

Dominic:

So that was that was something that I needed. And a a lot, you know, a lot a lot of cleanup. This there's there's this server side functions that are executed on a a runtime. Basically, I'm using Goja. So Goja is this is this library that can execute JavaScript in in a sense.

Dominic:

But, you know, you you cannot you don't have e s six. It it's just like the the old ECMAScript five, you know, code that you can execute there. And I I have created a a huge runtime and on top of that. So when you are in inside your server side function, you can all you can call all the the functionality of static back end in a sense. Mhmm.

Dominic:

So you can do all all the credit operation, the the the full text search, creating index, You know, you can you can play with the cache. You can, you know, you can do you can do all of it from the server side. So yeah. So it went well. It was nice to release something.

Dominic:

You know, I I released the one dot six version when I unarchived it, but it was mainly just making sure that the application was running and whatnot. There there were not huge bug fix or anything, new feature and whatnot. So now and my cadence is is like, I release at, you know, twice per year. So at yeah. Each Each six months, I do have I do have an an ex an ex version, which is because it's it's pretty involving to to do the release.

Dominic:

You know, there there's there's there's three NPM packages. I hate NPM. You know, releasing the the Go the Go libraries is just is just, you know, pushing and tagging a a commit. That that that is how things should be, but, you know, there's this CLI and this there's the JavaScript and the node libraries that needs to be pushed to to NPM and whatnot.

Morten:

Nice.

Dominic:

So yeah. So that was that was interesting. The CLI is is pretty nice. So I I I've been building my my own SaaS entirely with the CLI. So the CLI allows you to build or to have a 100% identical, you know, server instance that all run-in memory.

Dominic:

So you have you have the caching, you have the file storage, you have the database, you have the real time web web socket operation. Of this does not require any any services on your development machine. So you just do back end server, and boom. You you have, you you know, you have everything that you need to start to start building your application. And when you move to production, it's just too, you know, too small things that you need to change in an environment variables, and and now you are using the real thing.

Dominic:

So it's pretty it's pretty nice.

Morten:

So what so the the maybe I misunderstood, but do you then you spin up the database and everything on your servers?

Dominic:

It's all it's all a it's a data it's it's a memory provider. So all, you know, all all of the services do have this interface that I reimplemented a a memory version. So the the caching which usually use a Redis, you know, compatible service in development. Well, it's fully it's fully local. So I reimplemented the pub sub, you know, all in go and whatnot.

Dominic:

The the database is just simply, you know, maps that, you know so yes. So every everything is is reimplemented as a memory provider, if you will. So basically, the the CLI brings the server itself and just configure it like, you know what? You are in a a mode that you you need to to run-in memory for for now. And so I'm able to reuse the, you know, the same exact the same exact you know, it's not it's not the binary.

Dominic:

I'm I'm bringing the package so that I have this core package, static back end slash core, which is, included as the dependencies in the CLI, and this is exactly what I'm using. So, basically, the endpoint is all using the same endpoint, but since everything is configured as in memory, then you are completely free to to be Yeah.

Morten:

So I'm so sorry. I'm so sorry. Yeah. Is good.

Dominic:

But, yeah, you you're completely free. So you you have nothing to install. So I I mean, I do like this. I do like this a lot. And you can you can just pass, back end server dash dash persist to use the SQLite provider, if you will.

Dominic:

So now all all the data will be persisted to, you know, to your to your disk. So that is useful if you don't want to to restart fresh at each time. But but, yeah, this is this is getting pretty mature to be to be frank. So I'm I'm I'm I'm again trying to just get some traction. I don't know exactly who is this target at the moment.

Dominic:

No. You know? Clearly not the gophers because but but what I what I like to to get from from the the go community is obviously some, you know, some interest. At some point, I I I had this Discord server. We were about, I don't know, 40 or 50.

Dominic:

But yeah. Discourse Discourse is not that's really good for me anymore. But anyways, I I lost the domain as well. I I lost the I I shut down the when when I archived the project, I I terminated everything. So now I'm trying to restart a little bit.

Dominic:

But but again, I did that for me, and it's it's not terrible if if if I'm the only one using it. I think I think it it kind of show what, you know, what I can do. The the platform is is pretty big, and it was all done before before LLM. So yes, I have written all all the lines of code. Maybe not the the latest test because now I'm using LLM to generate some tests because it's pretty pretty verbose out there.

Dominic:

But all the all the implementation is is good. So so yeah. So one thing I was I was I was trying to see if if I could bring that at some point for the server side function is that I I would love to let people build their function in any kind of language and just compile that to assembly web assembly and just just have a runner there. So that could be good. Because the runtime that I do have at the moment, you cannot you cannot bring any dependencies.

Dominic:

So it's just good old JavaScript that runs on the server plus the the entire runtime that I'm offering. Yeah. So that could be, you know, that that could be a a good project to work on, but but again, it's it's mainly just my need at the moment. So I'm I'm not building anything because there there's no there's no demand or there's nothing there. So, of course, I could I could lose myself into building a lot of features and whatnot, but, you know, but what's the point?

Dominic:

Because nobody is using it other than me, which I you know, which is something that I'm I'm trying to to change. But again, maybe I will I will I will start to to do some YouTube video and whatnot. Maybe try to to get some coverage there because it's pretty impressive when you look about when, you know, when you just start the the server and you you are able to build an entire application, especially with with LLM these days. So LLM can can just do a lot of things and at least you can know that the back end is secured in a way. Yeah.

Dominic:

So I don't know. There there's something there.

Morten:

Nice. Yeah. Yeah. Think I think I think the YouTube or the streaming part might be be the way to go to to really, like, drive it home how how fast it is. I think that's, like, like, the the just just having a demo just to to watch is always

Dominic:

Yeah. Yeah. Yeah. There there's there's a there's a small video on on the on the homepage. But but, yeah, I think I think trying to bring some people from from YouTube could be interesting maybe by showing how easy it it could be to create.

Dominic:

You know, Rails have this this fifteen minute blogs. So with static back end, it's like one minute.

Morten:

So Mhmm.

Dominic:

But I I did the I I did a a how do you call that? You know, a a meetup at some point. It was it was it was not in person, but it was I think it was JavaScript Boston or something like that. Yeah. And I presented the static back in there.

Dominic:

So there there's a couple of things out there in the in the Internet, but they they are all linked in the in the readme on on on GitHub and whatnot. But but again, I I don't know. It's it's it's very hard. And I don't really understand because it's it's pretty close to Supabase in terms of what it do. There's a lot of things that that it does that Supabase don't do, like just sending email, for example.

Dominic:

So they I don't know if they have that now. I I stopped watching at them in 2022 and whatnot, but they they were not having any kind of this. And I I do have a function to convert HTML to PDF, for example. I there's a lot of things. I like to to to say that static back end is is all the back end feature that typical application typical web application needs.

Dominic:

It's it's all done there, you know. Yeah. And the the the channel the channel based communication is is pretty strong as well. So I've I've done some example. There's some example on the blog where I'm building, you know, live chat or collaboration, you know, simulation of of some application of some sorts where one, you know, one party type something in in from from one side the other, you know, all all the other parties are seeing that.

Dominic:

So it's it's already built in. You you you join a channel, so you can have a small group of people, you know, sharing data and and whatnot. So, yeah, there's there's a lot there. There's a you know, there there's there's some event base as well, events that you can react and just execute the server side function. So when let's say let's say you have a table x and you want to execute something when when there's a create on that.

Dominic:

You you can you can do all of this with the server side function. So you you define your server side function with with a special naming convention, and and now boom. You you you it's it's like having a trigger on the database. You it's just that it execute after to create. But still, there there's a lot of things that that can be done with with this this server.

Morten:

Yeah. Yeah. I did I would love to see some some some videos about it. It sounds really cool.

Dominic:

Yeah. Yeah. I I think so. I think so. But but, again, maybe I I I I don't know where it blocks.

Dominic:

It it has been the it has been the the the blocker since the beginning. And when when I launched, crazy enough, I was having someone paying $100 per month in the GitHub sponsor.

Morten:

So Okay.

Dominic:

I mean, that that that gave me so much confident. But but again, I don't know. I don't I I don't know. I never really were able to generate traction at all, which which is I don't know. It feels strange because again, on the other hand, you you have Supa base with with this, I don't know, $1,120 millions dollars in founding.

Dominic:

And you have you have me that is not even capable of of getting you know, I do I do have like, I don't know, 725 stars on GitHub, but I I I want I want people complaining. I I want people saying, wow, this thing is not working or this thing is working. You you know? You know what I mean?

Morten:

Yeah.

Dominic:

And and that that is hard. That is hard because I I don't I I probably don't have a clue about who this thing is is targeting, and that is the problem.

Morten:

Yeah. But as also certain element of, I think, luck around it, but also, like, a difficult decision of when do you kill something and when do you continue working on it. And Yeah. Maybe maybe it's time because also Peter Levels, the famous indie hacker bootstrapper was was was notorious for that twelve months, 12 startups challenge that I saw what is his name? This guy behind VP Engine or something.

Morten:

He has the thing called Bare Block or something like I don't know. Jason Jason Cohen.

Dominic:

Oh, Jason Cohen. Yeah. Yeah. Yeah.

Morten:

Where he was, like also, he was criticizing it because it's it's it is also you know, a a month for anything is not really a lot time.

Dominic:

To to build a good software. Right? And good business.

Morten:

Yeah. Exactly. So those are, like, you people are pointing out, like so let's say you got, like, a few customers in that month, and then you just say goodbye because it's not worth your while. You know? That's also, like so so, yeah, it's it's a tricky decision.

Morten:

That's also why I, like, would would say Deploy Grid being, like, now it this part of where hosting, like, application that is stable, and then, you know, let live for a while, see if you can find a way to gain traction, and then then then, you know, take it slowly from there. But, yeah, it is it is strange that some some thing just takes off and other Yeah. Other things doesn't. But I think, like, I'm sure if you were to raise, like, a couple of million of dollars and then put it put it into the creator economy engine, I mean, will will change a lot. You know?

Dominic:

Yeah. Totally. Totally. But, yeah, that that is not something I I would want to do. So, basically, I'm I'm trying to, well, quote, unquote, bootstrap something that probably is, you know, requires funding.

Dominic:

Mhmm. You know, the this type of application. Devel developer tools are very hard to to bootstrap. But, you know, it's doable. It's not it's not like it's not doable.

Dominic:

If you if you look at you know, a good example for that is the it's on it's on the Ruby world. There's this guy that build a is it is it like a task executor or scheduler or whatever, a queue system and and whatnot? I don't I don't recall the name anymore. Side side sidekick? Yeah.

Dominic:

Sidekick. Okay. Yeah. So, you know, the very, very successful and whatnot. But again, I mean, you know, the it can happen without founding and whatnot.

Dominic:

But, yeah, the problem is that how do you how do you put the word out? And and and to be frank, I did have, you know, two or three paying customers at some point,

Morten:

which Yeah.

Dominic:

Which was which was crazy. But, yeah, I never I don't know. I don't know. I I don't know how to do that. But again, I will I will try to do to do the the minimal at least trying to to talk about it.

Dominic:

Maybe maybe try some YouTube video and whatnot. But, again, it's

Morten:

But also hard. I think that's also where, like, especially when you're doing this from a developer as as a developer where he was like, I'm gonna do so much marketing. And you like, if you you really like, if if I look myself in the mirror and be like, how much marketing have I really done? I have done one demo video, which got, like, 800, 900 views on YouTube, which I know doesn't sound a lot, but when you're building the channel, they can that that's a big video for me, right, because of the current size of everything. And that took me that took me three hours, but it took me three hours because of my neighbors loving to drill all day every day.

Morten:

The actual production of this video took me roughly thirty minutes. Right? Wow. That's also why it's like I'm I'm also trying to be better at, like, okay, now stop stop building now. Like, stop it.

Morten:

Write some blog posts. Make some videos. Text some people on LinkedIn or Twitter or wherever. Right? Send some some somebody an email.

Morten:

I think that's it's very easy to get. Because, like, I I also have another I have another friend who also is bootstrapping a personal finance app. And the thing we always joke about is that now it's marketing week, and then we end up building all the week anyways. You know?

Dominic:

Famous trap.

Morten:

Yeah. It's such a trap because the whole ad engine, I think, has gotten gamed so much that it's again, if you don't have a couple of million dollars in in VC capital for VC funding, then it's really hard to get anything out of of of ads, and, especially, it's really difficult to make ads be profitable. You might get users, but do do you actually get a a positive ROI? I don't think so for a lot of lot of lot of lot of products. Right?

Dominic:

But for static back end, I'm not you looking at all at at revenue. I I I I would be very happy with just some open source usage, but that is that is even more difficult to build a, you know, a a good open source project that people are using and whatnot. It's it seems to be to to be very hard because I I I don't believe that I I the only way that I would do money with static back end is if someone were to to say, you know what? Let's let's build it further. Let's try to compete with the VC's, you know, competitor in that space and whatnot.

Dominic:

That that that is the only way I I could even believe that it would be possible to have money. But even that is is crazy. I'm not even sure I would do that No. Because of the, you know, the the life that now you have is it's not really where I want to be. No.

Morten:

Just need to add some AI features, you know, then then there's money.

Dominic:

Well, yeah, I I changed a little bit the copy on the website. Now the h one is saying it's it's the

Morten:

Static AI.

Dominic:

It's your LLM oh, I don't even LLM back end Copilot over. I I don't even know where what what what I said, but I'm I'm just trying some things here here and there.

Morten:

Yeah. Actually, funny because we we got a message in the Slack channel, by the way. Yeah. Well, last week, we talked about we'll be on rails and LLMs, and and Tim was in and talked about his experience. I just thought this was a good bridge over to to to that because he basically I think he he confirms a lot of what we were what we were at least what I was postulating around, like, rails and OLMs.

Morten:

Right? And I also think it maps a lot over to what you were talking about on the on the front end side with React, for example, where he was basically, like, it was it was really, like, totally efficient, and it knew what it's it had to do and all those kind of things. Yeah. So yeah?

Dominic:

Yeah. I I I I saw this a a couple of episode ago. I I mentioned a a a tweet that I've seen that someone I've I've done a a kind of, quote, unquote, research, and Ruby was was the the least costly talk in in terms of tokens. So Go Go was in the middle, Ascull was at the end and things like that. So so so, yeah, I I I don't have difficulties to believe that those things are because you're leveraging the the framework in in a So yeah.

Morten:

And and being in the I I still I still think a big part of this is being in the in the training data because

Dominic:

Sure.

Morten:

The the the concepts, as also talked about last time, is just I don't think it's enough. Because I'm like, I I literally I built Endodel to be very close to rails, at least in philosophy. Right? And it still doesn't really write good in the model view controller, framework, whatever code. It it invents all these little weird methods of things, and it's kind of duplicated, kinda not.

Morten:

Right? So Yeah. You also you get a lot from these, like, human designs constructs that then have a lot of documentation and is in the training data. Yeah. So seems like I have to try and also build something with Ruby on Rails in the in the in the near future, I think.

Dominic:

Nice.

Morten:

Yeah.

Dominic:

You will be build that, or you will let the LLM build it?

Morten:

No. I I I'm gonna let LLM try and build it. I just I wanna see. I wanna see if

Dominic:

I'm Yeah. Yeah.

Morten:

What what this side of the of the of the fence looks like with with purely not purely necessarily, but but letting letting the LLM drive in a framework that has existed for twenty years and has a lot of

Dominic:

Yeah. Totally. It's it's so easy to get started with with something new these days. Yeah. So yeah.

Dominic:

Yeah. When I say something new, I mean I mean, in in report to you, you know, I I I haven't done much Java in my life. I always kept far far away from that. But today, if I were to to need to modify something, well, I'm a little bit more, you know, confident that I would be able to do that because it's not it's not me that I need to learn all all this this thing.

Morten:

Yeah. Don't want

Dominic:

to learn Java, man.

Morten:

No. No. Nobody wants to, I think.

Dominic:

That that's a pact that I I've done with myself at the beginning of my career. So Java is is that's what the yeah. That's why I cannot work in a in a company these days because they are all using Java or or dot net.

Morten:

Yeah. Yeah. Yeah. It's the same same same same feeling for me, at least at least in Denmark. They love they love those two Yeah.

Morten:

Technologies. And almost it's like it's most of my sometimes when I have recruiter conversations, the fact that I don't use those languages, they're like, what? What? Like, what what is that? Yeah.

Morten:

Is

Dominic:

that something and you you say Go and nobody knows what it is.

Morten:

Yeah. Yeah. Like, I I was like, I had a client one point, but they were like, they didn't have they haven't heard of Go, so they were like, obviously, like, is this is this, like because they literally asked me if this was a stable language. You know? I was like, yeah.

Morten:

It has, like, ten years. It's been existed. It's I'm speaking too Spanish now. It it it has existed for ten years, building Google and blah blah blah. You know?

Morten:

Like, it's it's it's the it's the language that wrote Kubernetes that you also used. Right?

Dominic:

So Yeah.

Morten:

I'm pretty sure it's gonna stuck around, stick around. You know? Yeah. But that's that's true. So, yeah, gonna gonna try and explore some some purely generated LLM rails at one point, I think, just to to see see how it feels like and and then how fast you can you can actually go with the with these kind things.

Morten:

But I'm still I'm still certain not certain. I can say I'm certain. I'm relatively positive that that's some of my conclusions around LLMs is true that, you know, don't don't they they should not be the driver. You should be the driver. You should write the code yourself, and you should, you know, for as for as much as possible, you'd use them as a research tool or, like, a throwaway kind of tool.

Morten:

You know? Yeah.

Dominic:

I I don't know if I'm sensing a a small shift. I think we might be finally arriving at the the top of the of the curve. Yeah. Or, you know, our and hopeful hopefully, we are there. Hopefully, there there's more and more people that that just I don't know.

Morten:

I I I definitely think so because the I I just had it in my mind. I completely forgot what it was about. Like, I joked about it in the beginning. Yeah. It was the, you know, the it's it's an it's a advantage to understand your code base.

Morten:

Right? Which which was the the guy behind Flask, the Python framework Mhmm. Was out actually talking about this on Twitter that he was talking to someone, and this was a solo developer that could not explain his products in a call with him without asking Claude. Right? And and and this is, like, this is probably something that have been normalized a little bit, I think, because the big the big operators has put so much money in the marketing part of you don't need to know your code.

Morten:

Right? And if you don't need to know your code, why should also really understand what your project does? And and and that sentiment you can actually see is starting to well, I I think a lot more people are questioning it because there's, like, this this doesn't this doesn't sound right. Like like, if you're the orchestrator, you should still understand what you're orchestrating. Right?

Morten:

You don't get to Yeah. You don't get to wave the wand in front of a a 50 people quartet or whatever it's called to to, like, to play a concert if you haven't done the work for what many, many years. And this is I think this is what people are starting to realize again. And, actually, the guy who who wrote or created the the LLM harness called Pie had retreated something, an article where he also talked about, like, you know, slow down, write the code yourself, all these kind of things. And they also match a lot of my thoughts on it.

Morten:

I had, like, created some notes for myself that I then retreated his retweet with with that picture. Right? And a lot of people in and and, like, bookmarking that tweet and both of the tweets. So I think people are starting to want better guidelines for how to use LLMs, and they're kind of starting to realize that this is not gonna take all of our jobs, and, you know, you're definitely not gonna just gonna be spinning up six, eight, 10, whatever many instances of Cloud Code to build a assess or start off or a a company Yeah. In the near future.

Dominic:

No. Yeah. Totally. Totally. So Not only that, but I I don't know if you if you have this yourself when you when you're coding.

Dominic:

It's like for me, it's almost like meditating. It's and it's something that I'm I'm missing a lot these days since the the apparition of of the the, you know, LLMs and whatnot. Before I I started my day and I was like, okay, what what I'm going to tackle today and, you know, took my headphones, play my music, and it was just me in the code. It it that moment was was great. Multiple hours of just back and forth writing code, compiling, testing, whatnot.

Dominic:

That flow was was great. I've I'm I'm still doing that a couple of times per, you know, some more than than two, but let's say I don't I don't know. It's it's not it's not the majority of my day now. And I feel very bad about that. And and, you know, that was something that I I thought I talked with Jenna Rendell at some point way before I started to use LLM.

Dominic:

And I I was saying, you know, for me, it's it's all about this is what I like to do. I I don't I don't want not to write the code. This why would I do that? I'm a programmer, and this is what I like to do. Otherwise, it's just a boring job.

Dominic:

I mean

Morten:

Yeah.

Dominic:

To to me, if I don't have the satisfaction of solving a problem myself with while writing code, I don't have the the rush of adrenaline or call it what you want. The the sentiment of succeeding to do something myself, that is what I like. That is what I'm that is the reason why I'm programming. Mhmm. So I've you know, and there's I think there's a lot of people that never really add this feeling, and now they do have it because now they suddenly can do things.

Dominic:

Yeah. Because I I've seen a lot of programmers that, you know, were not really able to to build system and whatnot. Their themselves. They, you know, they they were working their nine to five and and do a couple of things here and there and things like that. But, you know, but now they are they are able to to just achieve things that that they could not do before.

Dominic:

And and, you know, that that is good. That is good for them for them, and that's not what I'm saying. But me myself, I I like to have problems, and I like to, you know, to solve it myself. What what I do appreciate about the LLM now is that, well, when I'm really stuck, instead of going to search and read a lot of things that that might not be as relevant that it should be, now I can just you know what? I have this problem.

Dominic:

What what should I do? What what do you think about x, y, and zed, and things like that? Now now this unblocks me, and I continue. That that flow to me is is is great because I can stay in in my focus zone. You know?

Morten:

Yeah. Yeah. Yeah. It's true.

Dominic:

I'm missing I'm missing that a lot to to be to be all day all day in in that, you know, just just me and the code.

Morten:

Yeah. Yeah. It's fun to it's it is fun to to solve it. Also, you start to feel I I at least I start to feel disconnected. Like, I've it feels weird to weird to say that I have reconnected with a project, but it like, the the the the my my my severely limitation of using AI has really made me reconnect with the project and having a sense and a feeling for it again, right, and understanding a bit more, like, what is the right direction.

Morten:

And and also, I'm I'm still convinced that I have I I I don't think I've had a net gain from using AI, which Yeah. Yeah. Is a thing that's a healthy thing to to see because this is something you only see after a longer period of using it. Because it's definitely something when you use it in the beginning, it's hard to see how you can would not gain gain gain gain efficiency from using this tool. But I I'm very, very confident in my conclusion that a lot of these things that I have built would have ultimately been better and faster have had I not used AI written code for it.

Morten:

Yes. Totally. It it it's it's it's so easy, I think, to get because, like, the you see it in the beginning, and it generates code that looks like good code. And then you continue, and you let it do more and more and more, and and I think it just ends up in a pile of mess because there's no intelligence behind it. That's the like, the the the the fact that I I also wrote tweeted about this last week that I am starting to readjust my mind to outputting a normal amount of code per week.

Morten:

Because I felt behind all week. I felt so much behind. And I was like, what the hell did I do? And then I talked to my wife about it. She was like, but Morten, you have been working for for eight hours.

Morten:

Yeah. I'm sure you have done something. It's like, yeah. That's actually I've actually been coding for almost seven hours and then done some other stuff. Right?

Morten:

So and then I look at it. It's like, yeah. I have actually produced code, but I have not produced 10,000 lines of code, which

Dominic:

was Yeah.

Morten:

Yeah. Kind of what you were starting to get used to doing a little bit with with AI. Right?

Dominic:

Oh, yeah. It's it's a yeah. It's a vicious circle for sure. When when I started, I I, you know, I kind of let let that thing do the the front end and the back end at the beginning. And I was writing less and less code.

Dominic:

And I I think I I said that to you in in an episode at some point. I at some point, I was returning to type some some code, and I was like, what? What? What is the error? It's not error dot string.

Dominic:

It's you know? I I was losing I I wait wait a minute, you know. I've been writing Go for the last twelve years years. What what is going on here? So that was a a super wake up call for me.

Dominic:

I mean, The skills are very quick to to to to be to be lost. I

Morten:

I don't know how to say that. Yeah. The cherries. Right?

Dominic:

Yeah. Yeah. Yeah. Crazy. Crazy.

Dominic:

Crazy. So I I don't know. I I don't know. But again, people that that keeps, you know, raving about LLMs are might not might not find good happiness in in trying themselves. That is the problem probably.

Dominic:

That is that is why it's it's still popular because programming is hard.

Morten:

Yeah. Yeah. Yeah. Yeah. And yeah.

Morten:

That's the thing. It's it's just it's a question of of time where people will would use these you have to use this thing because I I was I'm I'm trying to finish an article about, like, this whole epiphany, for lack of a better word around AI usage. Well, also, like, through the act of writing out my thoughts about it, I actually started to think about how I initially used GitHub Copilot, which I don't know if you have used GitHub Copilot. Never. Never.

Morten:

I I I actually enjoyed it. I think it's a way better if you have to use AI, I would probably prefer that because I am still more in touch with the code. But there was this term decided to emerge with the the GitHub co the Copilot pause, where you would write a few letters, and then you would wait for the suggestion to come. And that like, I I think it was the primary gen or something that made a video about it. And then it was like, hey.

Morten:

Wait a minute. What what the fuck? I'm doing this right now. And then, you know, like, this is not healthy. And then, you know, that kind of, like, hold on, wait a minute experience just came again with with with the the coding harnesses and them them just, like, puking out words for for half a day, whereas, like, hey.

Morten:

Hey. Hey. What I don't understand what's going on anymore. I probably should because this is this is, like, my advantage as a as a developer, right, that I know what this should look like and how it should be structured and all those kind of things. Yeah.

Morten:

So it's just it's interesting to see how these things it's kind of like the same thing over and over. Also, saw the models get released, and they are really good, and then they get, like Yeah. Slowly worse. And now we're seeing GitHub Copilot changing their their plans. So you can't even I don't think you can you can't you couldn't sign up when they made the announcement.

Morten:

They shut off all sign ups. They changed the plans for for already paying customers. It didn't matter if you paid a, like, a year upfront or whatever. They were just Wow.

Dominic:

Really?

Morten:

Yeah. Yeah. Yeah. That was that was like, I saw that was a guy who was like, but I just paid for the pro plan because it had Opus 4.6, and now you moved that to the plus plan. And I just renewed for another year, and, yeah, it was a huge mess.

Morten:

But, also, the the financials and I forget them, but I I think it was something like for every every $1 you spent, you would you they were like I don't know if it was $25 in tokens you got back. It was crazy numbers, and it didn't work. Forten

Dominic:

Yeah. No. No. Yeah. Sure.

Morten:

WildBites. So they they also moving moving moving over to token or or usage based plans. And yeah. And that's that's that's likely what we're gonna see. You know, like, oh, like, like, if you Yeah.

Dominic:

Yeah. At this point, it's it's not faster anymore.

Morten:

I I I No.

Dominic:

Yeah. You know, Claude, the last the last couple of times that I I used that with with the small, the small thing, the Sonnet four dot six, whatever. You you you are reaching the limits so fast that I I was like, you know what? I I could have write that myself. Yeah.

Dominic:

What's going on here?

Morten:

That's the thing. And I think if you could have, like, a full blown state of the art model just for you locally, then this whole thing would be different. Like, this would be a different question. Then I would be more worried, but because, like, the my adventures into local LIMs definitely tells me that, okay, they they are actually usable, which did not used to be be be the case. Right?

Morten:

But they feel almost as usable as whenever Claud is online or open their eyes online, but they have they have nerfed the model so much that, at least to me, it feels like the general output was sort of on par with whatever you got from the big models. Right? So yeah. No. No.

Morten:

And they're moving over to enterprise plans. They are like, if you have hermes.md or openclaw.md, it's like they they are literally looking for names in your project. And then if you have those names, they will route you over to extra usage and charge you Wow. Instead of using your subscription. And you can't use they have, like, a like, I'm I'm gonna rave a little bit because they have, like, a the CLI you can do, like, Claude space dash p and then put your prompt in, and then it's just like a CLI command Mhmm.

Morten:

Which you cannot do anymore because that was how a lot of the the other CLI tools would use it. Right? Because then you can could program programmatically send off a prompt. And it was also how I used it in the beginning because they were like, you could just, like, you you, like, live your best life, Morten. You know, he has he has, like, free amount of tokens.

Morten:

So I will just be like, okay. Take this product and convert it over to this coding language. Right? And then just have it run-in a loop, which is also what one of the one of the Yeah. Talked about, I think.

Morten:

Right? So, yeah, that is not possible anymore unless you wanna pay for it with real life money. I saw the guy behind Open Claw talking about he was he was not really he was, like, exploring the future of how this could be, and then he was showing at, like, a, like, a UI where he said he spent, like, $1,300,000 in tokens. Well, like, what are you exploring, man? You're not explore like, what what is the return of this thing that you can check your calendar and you can build a UI?

Morten:

Like, are you kidding me? What what I what am I getting here for $1,300,000? Right? Whereas, like, like, I could hire a team of developers for 1.3, right, that will do a better job of creating this, like like, I could even hire people to answer the phone for you that would I I don't know. It's just Yeah.

Dominic:

Yeah. Yeah. Yeah. Yeah.

Morten:

It's crazy that, like and it is interesting what he's doing. I'm not saying that it's not interesting. It's just when you look at the financial and being like, oh, we're exploring how this could look like. It's like, this cannot look like that. Fuck.

Morten:

But it's crazy amount of money.

Dominic:

Oh, yeah. Totally.

Morten:

Like, you better invent you better in like, invent a cure for cancer with that's the, like, the the Yeah. The yeah. Because it's so simple what what is actually being built. Right?

Dominic:

Wow. Yeah. The kinda makes that does not does not work. You know, listeners, the programming skills are still valuable in the future. Don't worry.

Morten:

Yeah. Having skills is still, an advantage. That's definitely, I think, the the title of today, the the conclusion of today, at least.

Dominic:

Nice.

Morten:

Yeah.

Dominic:

Alright. Cool, Morten. I think I think that's a wrap.

Morten:

Yeah. I think we are yeah. Alright.

Dominic:

So we we will talk next week.

Morten:

See you next week, man.

Dominic:

Bye. Bye.

Creators and Guests

Dominic St-Pierre
Host
Dominic St-Pierre
Go system builder - entrepreneur. I've been writing software systems since 2001. I love SaaS, building since 2008.
Morten Vistisen
Host
Morten Vistisen
Contract Full-Stack Developer at mbv labs.
086: Just use postgres, man
Broadcast by