Web dev at the end of the world, from Hveragerði, Iceland

Feeling The Itch

I’ve been feeling an urge to work on a greenfield project again.

Consultants usually don’t get hired to work on completely new projects.

Or, to be a little bit more specific, they only get hired to help out on specific parts of a new projects to fill in the expertise gaps in a team, but nothing beyond that narrow slice.

Consultancies sometimes do get hired but one person working in their home office doesn’t really qualify as a consultancy.

This means that my job has been mostly working on existing codebases, where the team needs additional resources from somebody who is good at figuring out other people’s code, or training and education.

Both sides of my work have been hit hard this year.

Since I turned freelancer three years ago – almost exactly three years now – the only greenfield project I’ve been involved with was one I started myself, but that ran out of funding after the research and prototyping stage and finding additional funding here in Iceland proved extremely tricky.

That’s also effectively what happened with Rebus Ink. The actual story is a bit more complicated, but it boiled down to us not getting the chance to take the project from the prototype stage, where the code and design was still filled with bad ideas and experiments that didn’t go anywhere, to product stage where the design has been boiled down to just The Stuff That Worked.

Even though it’s pretty close to the opposite of sensible, I’m beginning to feel the urge to work on something completely new again, but for slightly different reasons this time.

One reason is that I learned a lot from doing so much research and prototyping over the past decade that I really want to have a go at applying that to something that actually gets users.

But the other reason is that there are just so many new exciting features available in the web platform that, if applied to a completely new project with no baggage, should be huge boons to productivity.

  • Import maps is the obvious one. I’ve spent a lot of energy going over how testing benefits from them, but they honestly could have an impact on so many aspects of web dev.
  • Cascade Layers let us rethink from scratch the structure of our stylesheets.
  • I’ve been waiting for container queries my entire career.
  • Even though I think nesting in CSS is a generally bad idea, there is one exception: nesting media queries. That lets you treat a media query condition as a conditional property to the current selector, which is a much more natural way of thinking about the problem that doesn’t have the over-specificity and complexity baggage that comes with other uses of nesting.
  • Full module support in both the main thread and in workers is a big change.
  • Shared Workers being supported everywhere except Chrome Android.
  • Atomics and SharedArrayBuffer getting broad support.
  • Origin Private File System is inherently easier to understand and use than IndexedDB. It’s a sandboxed file system for your page! You don’t need to understand transactions or queries or the IndexedDB event model. It’s just a matter of saving and working with files.
  • Even on the hosting level quite a few problems have become more straightforward. Many hosting providers such as Render or Fly have wildcard SSL domains support built in. Litestream provides backup assurances for projects using SQLite, and SQLite in turn makes developing, deploying, and managing medium-sized projects more manageable than having to use PostgreSQL. LiteFS can provide availability guarantees.

That isn’t even an exhaustive list. So much has improved in just the past five years or so and nobody seems to be taking advantage of it. These changes are so useful I think new projects would be justified to “cut the mustard” at a very high level and deliver simplified, read-only versions to browsers that are still stuck in the past.

(Of course, if you’re delivering a media website, that simplified, read-only version might well be the only version you need, but that’s a different problem.)

That’s a lot of cool stuff that I personally think should have a substantial impact on developer productivity. It should be a surprise to anybody that a web dev looking over all of these new toys would get the urge to use them on something real.

The question, as always, is what?

It can’t be too ambitious as it needs to be a side project that can be bootstrapped alongside paying work. The mistake I made with Colophon Cards was that it had much too broad a scope.

It also needs to be something people will use. Theoretical projects, that turn out not to interest actual users, is the mistake we made with Rebus Ink.

Competition is actually a positive signal here. That means there is enough demand to sustain more than one project.

But the problem also needs to be a bit interesting.

Interesting problems

The figurative elephant in the room is “AI”. Not because there I think there are interesting applications to generative models—

Well, I do think there are, but getting involved in generative models today is a bit like trying to find safe applications for radium during the “golden age” of radium snake-oil products. It’s a genuinely useful material, but anybody doing anything to feed an in-progress full-blown financial bubble for a risky technology is either a fool or a criminal, and I’m only occasionally the former.

But generative models are changing the landscape specifically of the product types where I have some expertise: reading and writing.

It’s hard to find writing or reading apps that haven’t shipped or aren’t in the process of shipping a generative model feature of some kind.

You have reading apps that let you “converse” with a biased nonsense-spouting chatbot about the contents of a PDF.

You have note-taking and writing apps that offer you the convenience of not bothering with the notetaking or writing in the first place.

Others give you the opportunity of having a model trained on the web’s detritus “correct” your writing.

At least iA with their iA Writer 7 was instead inspired to include a new feature that has true general usefulness, albeit one that also shows us the boundaries of the capabilities of plain text formats.

My problem is that the generative model features I’d want as both a developer and a user – truly parametric adjustment of style and structure instead of the abysmal and counter-productive prompt-and-pray nonsense currently on offer – just don’t exist and nobody seems to be developing them. Everything is all about generating bullshit and replacing existing work with something worse.

I’m not going to work on a project that’s built around generative model features, but I’m also concerned that for the duration of the “AI” bubble, I’ll be in a solid minority.

There isn’t anything I can do about that except note it and move on.

Reading apps

The problem with reading software is that, most of the time, reading is a feature, not an app, a cost-centre not a profit centre.

(My decision to specialise in reading and ebook software all those years ago was a pretty unfortunate one.)

Even when you have genuine “reading is all we do” apps, like ebook apps, those tend to be saddled with dire economics. They are usually ecommerce platforms who, because of the toxic dynamics of most app stores, can’t directly be ecommerce platforms. The reading features are almost always incoherent and the development teams are underfunded and overworked.

PDF readers are competing directly with both free apps that come with the OS and with the de facto format owner – Adobe. The apps that are sustainable lean into the office productivity angle with editing, sharing, and annotation features for marking up documents.

The only reading apps that seem to have some life are in the “read-it-later” segment. There’s some crossover there with bookmarking services, but there seems to be some life in the field. Bookmarking in general seems to be large enough to support a number of competing services. None of it is revolutionary, but at least it looks somewhat sustainable.

The problem with both read-it-later and bookmarking apps is that they are hit quite hard by the web platform’s lack of support for being a share target. There is a non-standard proposal supported by Chromium, but that’s dead in the water without Mozilla or Apple on board.

Shipping an iOS app just to get a share widget is untenable. What’s the point of testing the potential productivity benefits of fundamental platform improvements if you’re just going to piss it all away by committing yourself to maintaining an iOS app as well. That bullshit might have worked in the era of low interest rates and easier funding, but it’s a non-starter for new projects today.

Whether iOS users are likely to put up with alternate solutions such as email to share or Shortcuts actions is a big unanswered question. The wrong answer could easily kill a project. This makes read-it-later and bookmarking apps quite risky.

Another subgenre of reading apps are markup or annotation software.

Being able to review and annotate somebody’s work is an important part of collaboration. This is one of the selling point of a few PDF apps.

Again, as with other reading app genres, these often end up being features in larger platforms. For example, CaptureOne has support for annotations to aid collaboration between the photographer, editor, and retoucher.

And, again, you’re competing directly with built-in OS features that seem to be improving every year.

The problem with competing with OS features is that to avoid getting stomped out, you need to specialise, and for a specialised app to be sustainable you need to find a niche where people are willing to pay – either with time or money.

Writing apps

The other genre of apps where I have some familiarity would be note-taking or writing apps. The problem here is that even simple writing apps are not simple. Any text editing interface will inevitably become a complex beast, so even the most bare-bones, cut-down writing or note-taking app will still be built around a core of substantial complexity.

There are open source libraries that help but most of the libraries that genuinely address the problems of writing UIs (as opposed to a rich-text-widget in the context of a SaaS) are some of the most complex pieces of software you can find on the web, like ProseMirror or CodeMirror.

They aren’t complicated for the fun of it. They’re complicated because it’s a complicated problem.

The good news here is there seems to be endless demand for all sorts of writing or note-taking tools. It’s a field that seems to be large enough to sustain a number of projects and products. Still a very tough problem to crack and the entire point of scratching my app dev itch is to find something narrow enough in scope to be doable, but broad enough to be a thing.

Something else?

The alternative is to try and find something else within my expertise to work on.

Honestly, given the problems inherent in the genres of software above, this might be my only option.

  • Web dev? I’d need to sit down and research some of the pain points we suffer as web devs and find one that can be addressed with a simple app. The research on its own would be useful for my training, coursework, and ebook practice as well. Despite what you may have heard, developers do actually pay for stuff, often quite a bit – or at least they did before the wave of lay-offs this year.
  • Photography? I’ve been a photography buff since I was a teenager – both in terms of the practice of taking photographs and in terms of being an enthusiast of other people’s photography. There are few things I enjoy more than going to a gallery showing of somebody’s photography. Many of my favourite books are of photography. But, even though I know quite a bit about the field, nothing immediately comes to mind as being a problem I can solve by building a simple web app.
  • Project management? Managing complex projects is not my field of expertise, so it would require quite a bit of research on my part.

There’s a lot to consider and I still haven’t made up my mind one way or another. I still have that itch, which means I have some research to do.

To be continued…

Recently on the blog

​"Don’t be a correctness bully"​:

This goes for every aspect of software. You can’t talk somebody out of hating CSS. You can’t talk somebody out of hating JavaScript or fearing HTML. But you can reinforce the positive. Give the behaviour you want and think is desirable, positive reinforcement. When somebody tries their hand at CSS who otherwise avoids it, you should focus what they have done well and point out how to do it better.

An extract from “Yellow: principles (or useless aphorisms) for software dev”

You can also find me on Mastodon and Bluesky