The curse of craftsmanship

I’m not a computer scientist; I’m not a software engineer; I am a programmer. I see the difference as being between a theoretical view, an engineering view, and a “craftsman’s” view of creating software to run machines. That is to say; I don’t build software, I craft it. Everything is unique, hand-made. Tools matter to me in so far as they let me express my craft. I want the tools that best help me do the work.

Here is a list of languages that I have used to solve real problems. It does not include those I learned purely for the fun of it.

  • 80×86 assembly language
  • C
  • C++ (although the C++ of the ’90s, exceptions were new back then)
  • Java
  • Perl
  • Javascript
  • Usertalk
  • Ruby
  • Objective-C
  • Clojure
  • Elixir

The choices in bold are those languages I’d go back to reasonably happily. Here are languages I actively avoid:

  • Python
  • Javascript
  • PHP
  • Go
  • Swift
  • Scala

My reasons here, as much as anything else, are reasons of taste. Python I dislike because I don’t think significant white space is a good idea (as opposed to programming in an outliner which works well and I’ve no idea why the Python community never cottoned on to this) and I never liked its feel.

Go, Swift, and Scala, are on the list because they make choices I find distasteful. For example, Swift feels like the authors have to include every possible good idea from the programming field. I’m reminded of this by Antoine de Saint-Exupery “Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”

More language authors should take a stand like Rich Hickey and José Valim by having a language philosophy dictating that they reject good ideas because they don’t fit that philosophy. Their languages feel coherent, and designed toward a purpose. They choose not to include the kitchen sink.

The reason I am thinking about all of this is Javascript, a language I have used to solve real problems yet, given a choice, actively avoid.

I’m sure there are good things about Javascript if you look hard enough. It’s near-ubiquity makes it a winner, and I wouldn’t criticise another’s choice to use it (esp. if they are a competitor). But, improve as it may, Javascript has cruft encoded into its DNA, and that cruft leaks out in every direction.

For a new project, I am learning Elixir and its web framework Phoenix. And do you know what has been the most challenging thing? Webpack. Worse yet, Webpack is a tool written in Javascript (using nodejs) for managing project Javascript!

Whenever nodejs hoves into view, I tend to find myself waist-deep in a mess of dependencies and version incompatibilities. Perhaps I have been lucky, but I don’t experience this level of pain elsewhere. So it makes me think it’s a function of the choice of language and the kinds of people who are aligned with those choices.

I guess it is the craftsman’s curse: You come to care about the way the tools allow you to express the work and, therefore, feel pained when forced to confront tools that feel wrong.


After 30+ years I am playing Dungeons & Dragons again. I got invited to join a 5e campaign and am having a lot of fun learning to role-play again and enjoying being in the (virtual-)company of a bunch of nice, enthusiastic, people again.

I’m playing an Elven Assassin to round a party that’s a bit magic-user heavy (even the front-line tank is Paladin with spells). I’ve chosen to be chaotic neutral rather than evil, so assassination is mostly a kind of moral flexibility and my assisting the party is a whim.

Thank you Martin for inviting me to play.


I cut my blogging teeth in Radio Userland, an application created by Dave Winer. One of the key ideas was “user radio” that any fool could broadcast their thoughts.

Something key to enabling this was Radio’s “upstreaming” feature. In 2000 this was a pretty freaky idea. You put a file in a folder on your local machine and… poof!… a few seconds later it was on the web with a permalink (well, as permanent as your site was anyway). It just worked.

Later Dropbox would implement the same idea with it’s “Public” folder. In a pretty hostile move, they would then yank that feature out of the product and force you to share things one by one which isn’t remotely as useful.

When I think about Mentat I imagine making sharing things as easy as Radio’s upstreaming feature. In my context, I am not dealing with files, but the same idea applies. Make it super easy to share things you want to share.

Radio remains an inspiration so many years later.

Back to Blogging

Or should that be “Back to Blogging (again)”?

Blogging has been an on and, mostly, off thing for me the last few years. However I am writing more regularly on LinkedIn but finding that I only want to create certain content for that platform (the algorithm in control), here I can write what I like because I am mainly talking to me.

Things I am working on at the moment:

The Art of Navigation – this is “work” where I help digital platform entrepreneurs build a better business, faster. The client work is a conversation, the other work is essentially research into why businesses don’t succeed, what you can do about it, and how to explain that to busy people going very fast.

AgendaScope – this is the secret project that I’m working on with two co-founders about which I should be able to talk more soon. It arises out of my work at The Art of Navigation but scratches my tech entrepreneur itch in a way that TAON cannot.

Mentat – a long-term project to build a macOS app that I can use for managing information for life in a collaborative fashion. While I am pretty sold on Roam Research it’s (a) not mine, (b) never going to be mine, and (c) seems increasingly to diverge from my priorities. I doubt I will stop using it because it solves a different subset of my problems to Mentat. But my need for Mentat hasn’t gone away. Unfortunately, it’s suffered from fatigue and too many #1 priorities. Probably I need a collaborator to make real progress with it.

Yasutake – a board game I’ve been working on based in a fantasy Edo period that blends trade, military conflict, and intrigue. It was somewhat inspired by Legend of the Five Rings (although the games are not so similar) and my frustration at problems I was having with Mortem Respublica. It’s close to playable but not quite there yet.

Mortem Respublica – a board game I’ve been working on even longer that is based in the period prior to the fall of the Roman Republic. It blends trade, military conflict, and intrigue. Sounds a bit like Yasutake. In fact many of the concepts I worked on in Mortem Respublica I took to the later game. Perhaps that was a mistake. Finish one thing at a time, etc… etc…

Minecraft – Given how much time I spend playing it I guess I should call this something I am ‘working’ on. Probably a big part of why the previous three items have struggled. Then again it is really good and scratches an itch few other things on a computer do.

Family – I’m rather surprised to find myself in a happy, long-term, relationship with a French lady, Florence, who has a 9yr old daughter.

Now I write it down it seems like I have a lot going on, especially since there’s a bunch of stuff that didn’t make it to a headline.

Cult Leader

At some point towards the end of last year, I decided that it would be a good idea to try and create a community of software leaders since such a thing did not, to my knowledge, exist and I really felt like a place where they could get the kind of help they needed would be a useful thing.

It’s also the case that I have built a lot of tools and it seemed like somewhere that I could share them, and start discussions around how those tools are used to solve common problems that software leaders experience.

Later I had it in mind that I could sell some kind of subscription services to the community that builds upon what is available. In mid-March, and with little fanfare, I launched a Discourse based site called COMPASS. Since then I’ve tried, gently, to encourage people to sign up and maybe ask a question.

The result has been a total failure and it turns out that I made a mistake on two fronts:

The first is that COMPASS is also the name of the system of tools I designed that I use with clients. It stands for Customer Operations Mission Perspective Advantage Software Strategy, the pillars on which I build. So that was already confusing.

The second mistake is more subtle. My friend Graham Ruddick, who has a lot of experience in helping people building communities, described what I was doing as more like creating a ‘broadcast platform’ than a community. Today, as I was talking to Amy Faeskorn about this, I realised that what I was actually doing was saying “Join my cult”.

The seed of this thought was in a recent conversation with someone else who was thinking about creating a community but didn’t know where to start. For various reasons I couldn’t see how to say “Come join COMPASS”. Because COMPASS is all about me. Not all about software leaders.

I think I got foxed because I did Seth Godin’s “The Marketing Seminar” which is also based on Discourse and feels like a community in that you are with a cohort of people all learning the same material. But it’s actually not a community at all. It’s all about Seth. That’s okay, you’re learning from one of the greats of marketing.

But I am not Seth Godin. What works for him will not work for me.

So, now, I am rethinking. How do I create a community for software leaders? Not invite people to join my cult.

Betting big on Roam Research

I’ve been using Roam Research as my primary note-taking and writing tool since December 2019. It immediately struck a chord with me, despite numerous short-comings something fundamental felt right. The fundamentals of the concept were sound.

This caused me an immediate problem since I had been working on Mentat (since early 2018) as my primary note-taking tool. However, Roam caused me to rethink what a note-taking tool should be. At that point, I took that out of my requirements for Mentat. There are enough itches left to scratch and I am interested ??when Roam has an API ? to wonder what I might do with them both.

The Roam team have announced their pricing of $15/month or $500/5-years. I was one of those who “liked” the tweet announcing their $500 “believer” plan as an indication I’d be up for it.

I do have some disagreements with the team (I guess with Conor) in terms of how they have prioritised work in some areas. But I feel like, overall, they are on a good track and while there are (and will be) other tools, Roam and its team, is worth betting on.

So I will be signing up for the $500 when it’s available and looking forward to seeing where the application goes.

Making Zoom cool again

Like many of us, I am sure I’ve done more Zoom calls in the last month than I might ever have wished to do. Basically Zoom works pretty well but there are a few things that I think could elevate the experience.

When you are in a real-meeting one of the great pleasures is to lean across to someone near you and add witty (or, perhaps, even useful) commentary. Zoom is all one way. I’d love to be able to pick another participant and have my audio channel go directly (and only) to them.

I’ve had some great conversations but found it would be interesting to know who was talking at different points, how much each of us was talking (am I hogging the mic) and so forth. Give me some meaningful stats about how we’re communicating.

What would you add to Zoom if you could?

What Mentat is for? networked collaborative thinking?

As I approached the 18th March 2020 (the 2-year anniversary of my starting work on Mentat) I realised my enthusiasm for the project had waned. Not in any major sense but I had hit some roadblocks and I had started making serious use of Roam. My will to overcome those roadblocks had been sapped.

Although Mentat and Roam are very different beasts, it’s clear that Roam with its ease of capturing and organising information overlapped with some of my own use-cases for Mentat. ‘Why hump a lot of rocks uphill if you’re just going to use Roam anyway?’ my thinking went.

And so for about 3 months nothing much happened.

Four things really kindled my enthusiasm again:

  1. Reading Andy Matuschaks notes and a cluster of his ideas about “Insight through making”, “Great tool-makers are often not great tool-users, and vice-versa”, and “Authored environments are significantly coloured by authors? motivations”. Really all of his stuff? and it kindled my idea to talk to potential users of Mentat.
  2. So I had a demo/conversation with Metatone who had earlier expressed an interest in Mentat. As demos go it was mostly a disaster as there were many things that broke or just didn’t work at all. But it was enough to get us talking and I think we both felt a spark as we talked about the possibilities of networking our thoughts together.
  3. Tiago Forte’s idea about tools for creating outputs being more useful than tools that are about taking notes. While Roam is a tool for creating outputs I would argue that it’s most suited to creating writings. Mentat has a lot more structure and flexibility. Mentat can do a lot more outputting.
  4. I’ve spent 2 years on this thing and it’s soooo close. I may be a bad poker player but this thing is my baby and may even be a legacy (I hope I have other shots but COVID-19 isn’t over yet) don’t I actually want to finish and publish a 1.0?

So I have picked up Xcode again and am working on finishing 1.0. That is complicated by the fact that sharing/collaboration is definitely in scope for the 1.0 release.

I am still wrangling exactly how this is going to work but you will definitely be able to connect your own workspaces with the workspaces of collaborators and share and exchange Things (Mentats concept of the knowledge object) which will be able to interact with your own.

For example, a use case Metatone and I were both intrigued by was being able to pass a question to others and allow agents running on their copy of Mentat to interrogate it, see if it’s interesting to their user, assemble any resources of theirs that might be relevant, and allow them to construct an answer.

While 1.0 won’t be able to do all of that it will allow us to play with the construct.

I’d love to talk to anyone else for whom tools like Evernote, Tinderbox, TheBrain, Notion, and even Roam itself are not the whole answer. I want my work to be driven by smart people with wicked problems of their own to solve. If that sounds like you, please get in touch.

I never thought I’d plant wheat

I started playing Minecraft to bond with my girlfriend’s 9-year-old daughter who is obsessed with it (over 90% of sentences of her sentences start “In Minecraft?”) little realising what a trap I had sprung for myself!

I realise I am rather late to the party but I discovered a game that appeals to the builder in me. Here is my house Mk. 3 and the field of wheat I am growing. I’m not entirely sure what I want wheat for (bread?) but I ended up with wheat seeds and figured I would grow them and see.

Here is my pyramid. I started this one on a 30×30 base which seemed insane at the time and it certainly took a lot of time to build (including maintaining ramps to get to each level as I built it, Egyptian style). Now I wish I had gone bigger. You get a pretty good view of the landscape from up there! To the left is part of the forest I planted where bees have begun to nest. Quite exciting!

A lot of things you build need resources (you can see iron and gold ore in the rock ahead if you look closely) which can only be acquired deep underground which means digging mineshafts and exploring caves. I’ve been genuinely spooked in some of these.

But sometimes I just like to sit on top of the pyramid and watch the sunrise.

In Minecraft, I have discovered a game that is both entertaining and creative in a way that few games allow you to be. Oh dear, I see that I have started doing it myself?

Exploring a better writing workflow

Over the last few years a lot has changed in terms of how I write.

I’ve used Scrivener quite a bit both on macOS and iOS. I’ve written 24,000 words of my book in it using the iPad. But there’s a problem: Rachael, and now Ralph. Scrivener is a tool for an author but not authors plural.

Working on my copy with someone else has proved to be a challenge. We’ve gotten by using Dropbox to sync the Scrivener document and mostly not trodden over ourselves but there have been some scrapes and Scriv really does not like it.

Since I use InDesign for document layout it seemed to make sense to try and use InCopy for writing together but if Adobe were trying to make it impossible to figure out a shared workflow using its tools then they did a bang up job.

Then again I have Notability on the iPad and I do a lot of handwritten notes there (often backed by audio recordings) and it’s a struggle to know how to integrate that.

Lastly I have this blog (and the blog on The Art of Navigation’s site).

I’ve ended up with quite a complicated, turn-the-handle, workflow for writing and I’m wondering how I can improve it.

Suggestions welcomed.