Well it’s not like I remember them, I wasn’t there! Keep in mind just because I can identify the fact that there’s a problem does not mean I know exactly what the problem is let alone what the solution is. I am definitely not claiming to have found the lost knowledge.
But I know something is wrong because software doesn’t work as well as it used to. To start, go back and read the original Apple Human Interface Guidelines for the Mac. The original Mac, from the 80s. Look at how much care they put into the user experience compared to the average webapp today, and ask yourself how we could have moved so much further backwards in 41 years. It really is just straight up depressing.
Here are a couple of principles that I have tried to embrace and which have (unsurprisingly) given me great trouble with existing tools:
-
The UI should instantly update to reflect complex underlying state without tearing. I tried to do this using LiveView, PubSub, and Postgres, and at this point I think I would say that I mostly failed. I made it pretty far, actually, but the “ugly hacks” slowly start to creep in and that obliterates velocity. I have come to recognize that I was simply abusing these tools; they were not made for this.
On the UI side, LiveView is actually quite decent but deep down post-hooks React’s design is more refined. This is not a difference you are going to perceive when working on “simpler” apps. The lack of composition for a number of key constructs (global
id) is problematic and the imperative APIs (JSandstream()) are poison.On the DB side things are worse. Postgres’s consistency guarantees are a clown fiesta to begin with before you try to graft incremental views onto them. I admire that ElectricSQL is trying, but honestly it might be easier to throw it away.
-
Impactful actions should be trivial to undo/redo.
Actually I got good results with LiveView here initially, as it is a legitimate stateful UI runtime. Forms and REST could never have gotten me that far. The problem is that the “backend” side of the undo/redo impl (command style) is glued to Ecto/Postgres.
SQL databases are just evil for this stuff. A proper undo/redo implementation requires a level of flexibility that is just not present.
There is more but look at how these two simple goals, which were met by desktop software 40 years ago, are enough to bring modern tooling to its knees. Form-based saas violates both of these so thoroughly and so deeply that there is no coming back.
Thankfully React’s design is simple and solid enough that I should have no trouble replicating it, so the frontend is easy. The database is… a bit harder, but I’m making real progress! A new stack will rise.






















