Asko Nõmm

Invobi Refresh

It’s been a bit over a year since I made any changes to my invoice generation service, Invobi, but the time to make some has come.

As I mentioned in my previous post, I see utility in interface-less services where it makes sense, and for something as simple as invoice generation, it’s a great fit. So I’ve gone ahead and done it - all the UI datepickers, input fields, and dropdowns are gone. You now just describe what you want in plain text, and AI takes care of the rest.

This makes the whole thing a lot simpler for both parties. You don’t have to deal with a bunch of UI controls, and I don’t have to maintain a complex frontend. Really all I maintain now is the API and the various LLM integrations. Less code, less bugs, less headaches.

When I originally launched the service over a year ago, I had plans to add paid tiers with more features. Never got around to it, because life happens. However, I’m now actively working towards that, and I’m hoping to get it out in the first quarter of 2026. The paid plans will include things like a REST API so you could integrate invoice generation into your own apps, among other things.

The free tier with no sign up required will always stay, because that’s the whole point. Bring your own AI API key and go forth. I plan on adding support for more models soon, but for now only Gemini is supported.

Interface-less Services

As I’ve been working on the CodeScene MCP server, and the upcoming redesign of Invobi that’s leveraging AI as its user interface, a vision has been starting to form for me where I see AI not as this massively overhyped employment killer, but as a sort of interface for interface-less services.

Where currently services exist as these visual systems where you point and click with your mouse, or tap with your finger, to interact with input fields, date pickers, to move things around and so forth, you would instead interact with natural language. You could choose between written or spoken form of natural language, and services would just have AI translate that input into an output format needed for the functioning of said service.

Really AI is just a compiler, in a sense, and we’ve been using compilers to translate higher-level instructions to lower level ones for decades, so now the higher-level instruction could be the end user simply speaking in their natural language. However, programmers trust compilers because they are deterministic, and AI is not, so we can’t trust it to give us reliable output, but I think there’s a way we can make it work.

Small chunks at a time

I find that the smaller the area you trust AI with, the less it can get off course. In the case of Invobi, I’m giving it very specific instructions on what the input is by prepending and appending instructions to the user’s prompt, so that the AI knows what to expect and what to give as output, in very clear and simple language.

Small is key here - whatever instructions I give it cannot be large as it seems to easily get overwhelmed, similar to a human, really. Just asking it to do one thing and only one thing seems to give good results.

Never trust, always verify

No matter how succinct the prompt you give it is, AI can (and most likely will at some point) hallucinate. Instead of having your service break down when it does, you could design your data requirements in a way that there are as many defaults as possible for when data is missing. You needed a username, but AI failed to give one? Auto generate one instead, just to give an example. Your application should be as forgiving as possible.

Additionally have schema validation, so that when the data that absolutely must be there turns out to be missing, or be invalid, not only would it function as a barrier preventing the invalid data from breaking your application, you could use the validation feedback as a iteration loop to give back to the AI, and have it correct itself.


I don’t pretend to be a UX design expert, so I don’t know all the potentially negative ramifications of applications like this, but I do see utility in the convenience. I’m not saying it would (or should) fit every application out there, but for something as simple as invoice generation, I don’t see why shouldn’t I be able to create it by typing a paragraph instead of filling a form? It’s certainly quicker.

There are many applications out there that have a very specific purpose that could make use of this, such as the CodeScene analysis tools that you can interact with in natural language through the CodeScene MCP server, instead of having to learn all its complex metrics and navigate its web app, which people could find intimidating. It makes complex things more approachable, and I think there’s great value in that.

Post-AI Programming: Not Coding

I just got back home after spending a week visiting the CodeScene offices in Malmö, Sweden, and I came back with a bit of a renewed perspective on programming in the post-AI world.

It’s hard for a craftsman who has mastered their tools to give away their tools, because it feels like they are throwing away all the time investment put into mastering those tools. It even feels a little like their value is tied up in their tools, hence the attachment to the code that I write. I’ve worked really hard over a decade to get good at writing code.

Really though, tools change over time. A construction worker may have started out with a hammer, but nowadays they use nailguns. You get more done, faster. Was a construction worker concerned they would become irrelevant with the introduction of a nailgun? If the ability to operate a hammer was the only ability they had, perhaps, but most construction workers do more than that, so I doubt it.

Likewise, I do a lot more than just write characters to a screen. The code is just a tool I use to solve business problems, and the more senior I’ve gotten over the years, and the wider the net of experience I’ve amassed, the less is my value in producing code.

I’d say my value these days is probably mostly in understanding customers, their needs, understanding how we (whoever I work for) can provide for their needs, and solve their problems, all while also understanding our own business goals and constraints, to then be able to effectively plan, coordinate and deliver what the customer needs.

This requires me to be a good communicator, because I need to be able to talk about technical topics in a way that non-technical people understand. It requires me to be an approachable person, one who you’d actually like to talk to. It requires me to think in an abstract, tying together multiple pieces of hints and clues to form complex solutions. It requires me to be able to make complex solutions simple, by breaking them into logical segments. It requires a lot of things that are not writing code.

In other words, maybe post-AI programming is not writing code. It’s being a sort-of in-between a technical manager and a sales person. To be employed and continue making a high salary, you have to start providing a lot more value, because being able to just create software is no longer enough.

As the code creation part gets easier, the competition in the job market gets harder. As the competition in the job market gets harder, the salaries will get lower. As salaries will get lower, less people will want to do this job. If you do not have, do not want to learn, or don’t like the varied skills neccecary to be of value in the post-AI software development world, you’ll probably not get far.

Framework 16 vs. MacBook Pro 16

I have two expensive laptops, both quite opposite to each other in their philosophy. One is fully repairable and upgradeable, the other is .. basically neither. Well, in all honesty MacBooks these days are quite repairable via the Self Service Repair shop, but the repairs are still ridiculously expensive.

A new battery for the Framework is around 100 EUR whereas a new battery for the MacBook is around 800 EUR, because you can’t buy just a battery, you have to get the entire top side with the keyboard and all, to give you an idea of the repairability differences.

That said, here’s how my Framework 16” with 64GB RAM and Ryzen 7840HS CPU compares against my MacBook Pro 16” with 48GB RAM and M4 Max CPU. Do note that all of these tests were run on battery power, though in high performance mode.

Compiling Ladybird

  • Framework: 23 min, 49s.
  • MacBook: 11 min, 16s.

Speedometer 3.1

  • Framework: 14.5.
  • MacBook: 40.7.

Geekbench 6

Single-core:

  • Framework: 2108.
  • MacBook: 3937.

Multi-core:

  • Framework: 4294.
  • MacBook: 26258.

No that multi-core test difference is not a typo - I’m not sure why Framework got such a low score, but it did.

Battery life

With light use, which is just browsing web and watching videos:

  • Framework: ~6h.
  • MacBook: ~17h.

With heavy use, which is doing work, compiling a bunch of things, etc:

  • Framework: ~2h.
  • MacBook: ~9h.

All-in-all, the MacBook is obviously way more powerful, and the Ryzen 7840HS chip simply cannot offer any competition to the M4 Max chip. Meanwhile MacBook can do all this immense power while also being multiple times more efficient, because I can do balls-to-the-wall programming all day long with the MacBook, whereas I’d need to be close to a electrical socket with the Framework.

I really do like my Framework though, and perhaps I’ll try the comparison again some time with the Ryzen AI 9 HX 370 chip, though I’m sure the MacBook will leave the Framework in dust even with that considering it’s just a ~20% improvement over the 7840HS, and from what I hear, even worse for the battery.

Post-AI Programming

Now that thinking about every detail of your application and writing it by hand is a thing associated with boomers and a time when people could still afford to buy a home, programming sure isn’t all that fun anymore.

The fulfillment I used to get from creating something is fleeting, and instead I spend my days yelling at the prompt machine, trying to manipulate it into being a passable software engineer, but just like yelling at your fridgerator doesn’t make it be a better fridgerator, neither does it have much of an effect here.

Reviewing code is the part of this job that most developers I know like the least, so it now becoming the main part of the job sure isn’t exciting. Not to mention that it’s even worse than that, because whenever I review the code and come to the conclusion that it’s an absolute abonimation, I often have to clean it up myself, because sometimes AI gets stuck in some scizo-loop of doom, and keeps producing the same exact result when I keep asking it to unfuck the thing it created.

I realize that I’m the sort-of guy who likes the process of creating things, not so much the end result, and because the process is now replaced with being a glorified self-checkout registry manager in a grocery store, I no longer really learn new things nearly as well as when I actually created things myself. Intelligence stagnation here I come!

Of course I keep working on my side projects without agentic programming, to avoid getting a full-blown brainworm that’ll make me be content and who knows, maybe even make me say that Microsoft ain’t all that bad, but I don’t even want to publish my projects anymore, because sure enough the AI will just steal them.

Sure is great I made it to a senior level before this became a thing because I don’t foresee any juniors or even mid-levels getting hired for much longer anymore, now that senior is the only level left. Heck, we might as well start calling ourselves AI managers at this point, and do away with the whole software engineering thing in its entirety.

This is of course great for the AI companies, because the programming I used to do was entirely free, and only required electricity and some text editor, now I have to pay for tokens to create things, so that the billionare psychopaths could build their cozy little doomsday bunkers, a day we’re all surely working towards making a reality.

But don’t listen to me, I’m just a AI-doomer. Surely this will all be for the better somehow, and I’m just too set in my ways to see it.

All hail our AI overlords

Whether you like it or not, AI is here, and is being forced down our throats on a daily basis. You can probably tell from my wording that I don’t like it, but it doesn’t matter what I like, as long as the shareholder value keeps going up.

Shareholder value goes up by fucking over the consumer in a plethora of ways, such as having the consumer bare the cost of running those huge data centers by having the increased water and electric demand subsidized by the general public as their utility costs go up.

Or in all consumer electronic devices requiring any RAM having their cost increased by up to 50%, while consumer-available RAM itself is in some cases 3x the price it was, because the AI juggernauts have bought up all available RAM supply. This all in hopes that soon enough those same shareholders manage to achieve their holy grail of the promised AGI, so that after they take away all your money, they can finally take away your jobs as well. The capitalists wet dream.

Look, there are definitely good things to AI, but it’s hard to get excited about those things when the AI overlords CEO’s quite literally campaign for the demise of the working class as some holy grail they are about to achieve, and not understanding why the general public is not clapping along, yelling praise at every turn.

And because they are so far removed from reality, they think that in their proposed dystopian future, the rest of us will just be able to live life without needing any money or food, despite there being zero efforts made into figuring that out, so really what’s likely to happen is just a global economic meltdown where hundreds of millions of people (billions?) go homeless and die, while they break open an ice cold beer in their doomsday bunker.

It’s likely that no human will even actually read this blog post, but instead an AI summary on Google, because even content creators get a raw deal by AI stealing their work and giving nothing back, as in this new modern age copyright apparently doesn’t mean anything anymore, and so of course many folks will cease to create anything public because their creation will just be immediately stolen from them.

To make my bitterness towards this entire topic even worse: I’m one of the people who is helping this dystopian future come to life, by either directly or indirectly working on making AI tooling better. I love my job, it has a lot of challenging problems to solve, but it’s just hard for me to find a narrative in my mind in which I’d be able to be content with things, because I’m not able to see a future where all this works out in a positive way.