[null]

I am a software engineer, tech-company founder, former international DJ, music producer, and record label owner with David Lynch hair.

There, done. That's me.

Now for the longer version...

Tech Bio

I started coding at the dawn of the home-computer revolution (age 10) on an 8-bit BBC Micro Model B. Initially with BBC BASIC, a procedural language, which was bundled with the machine and was effectively the CLI for OS. Then on to 6502 Assembly, because as a kid I wanted to make games, and the only way to make a game run quickly on a 2MHz processor with 32k of ram (10-20k of which was for the screen and 1k for the OS), was to go to the metal.

These were obviously pre-World-Wide-Web days and so finding out anything relating to programming was hard. Luckily, the BBC Micro User Guide was more than just a manual for plugging in the computer, it was a full introduction to BBC BASIC and 6502 Assembly. Not that it was a guide to becoming a good programmer, but it was a start, and I loved it.

Then my second computer was the Acorn A3000 from the Acorn Archimedes range. It had the ARM 2 processor: the first commercially available ARM CPU. A.R.M originally stood for Acorn RISC Machine; only when it was spun off as a separate company did it become Advanced RISC Machines.

I taught myself ARM Assembly and C (another procedural language) on this machine. The ARM instruction set was particularly elegant - something I only realised later in my career after using MIPS and 8086 based chipsets.

Because Acorn machines were very big in education in the UK: my first job in industry was in educational software. I worked on various titles, primarily in C++, but the one that changed everything was the Famous Five on a Treasure Island educational game. It was a top down 2D-map type puzzle game based on the book.

Around that time the 3D FPS game Doom came out and we were playing it in the office at lunchtimes. So, I decided to make a raycast 3D Doom-style engine for the Famous Five game (for the bit where they go into the dungeon)! I'm not exactly sure how I learned how to do this, because I still hadn't got access to the internet at that point!

That raycast engine was enough though to get me my first job in the games industry proper, something I'd dreamed of since I started coding. It also precipitated moving out of my home town for the first time to London.

Lunatik

The first game I worked on was Lunatik (EIDOS) for the Playstation 1. It was my first exposure to the MIPS RISC architecture (R3000) and frankly I was pretty disgusted at how ugly it was - compared to the elegance of the ARM instruction set I'd used before.

I was the sole Playstation engineer on the project - developing the 3D graphics engine, quaternion based animation systems, 3D sound engine, tooling, everything! And I really pushed what it could do: breaking the official numbers of what Sony said their machine was capable of.

Lunatik

Unfortunately, this game was cancelled, which was pretty devastating after 2 years of effort and especially as it was my first game in the industry. There's a pretty good write-up of the reasons for its failure on unseen64 with some context given by me in the comments.

I also have a repo with an early playable version that I found on an old disk.

Attack of the Saucerman

The next title I worked on was Attack of the Saucerman (Psygnosis) which was a pretty fun action game. I came in about a year in to this project and worked primarily on the gameplay and AI side of the game, so none of the hardcore geekery on this one. But it was fun to release my creative side and I came up with some interesting algorithms, especially around things like camera control.

It actually looked pretty dated even for the time, but bizarrely it still seems to live on, as there's still people doing 6 hour+ long plays on Youtube!

Once we had finished that game we were in a weird place in the industry: the Playstation 1 had been so wildly successful, and by now it was coming to the end of its life, but there was no Playstation 2 dev kits or any idea of a release date. In the meantime the Sega Dreamcast came out and I started building our next-gen graphics engine and real-time physics engine on it. It really was a dream (pun intended) to program for.

I built a couple of game demos with it: Dead as a Dodo and Ironclad. This is what we would use to get any publishers interested - so we could fund the studio's next title.

Unfortunately, because the publishers were waiting for the PS2, their cheque-books weren't open for Dreamcast games. That meant the company I worked for went under waiting for the PS2.

Some of us even worked for free in the final months because we believed in what we were building. But to no avail. More devastation!

Godzilla - Monster Wars

Having felt a little disheartened with being part of big projects or teams that got screwed over by publishers, I decided to do a Gameboy Color contract: Godzilla Monster Wars. These titles are 1 programmer projects, which seemed appealing to me at the time.

It was all in 8-bit Z80 Assembly, and honestly I hated it. Going back to 8-bit assembly coding after spending 6 months or so working on a Sega Dreamcast engine with real-time physics was quite a shock to the system!

Godzilla Monster Wars

Luckily, the timelines for Gameboy games were shorter too, so it was only 6 months of relative discomfort before I could go looking for other challenges.

I then did another short contract developing a next-gen animation system for Qube Software's streaming 3D technology. These guys made the original DirectX and sold it to Microsoft, so the potential was huge, but it seems they ran out of funding too.

Fireblade

I ended up going back to work full-time at a larger game studio: Kuju Entertainment. It was run by my old boss (whose company went under waiting for the PS2 to arrive). I phoned him up one day and said "Got any jobs?" and he said "You start Monday". Which shows that a bit of loyalty goes a long way!

The first title was Fireblade for the Xbox and PS2, which was a Desert Storm style action game. I was particularly proud of the cow bouncing game I made within it (you fire rockets near cows to make them fly in the air, then you juggle them with your rockets to get extra bonuses)! It became a staple of our lunchtimes, haha!

Fireblade

Toward the end of the making of Fireblade I joined the newly formed Kuju Core Technology group. Up until then most games would rebuild everything from scratch, or re-purpose an old game engine, but make it bespoke for the title being made. Generalist tooling just wasn't really a thing, because general solutions are always slower (in terms of CPU) and larger (in terms of memory footprint) - which on slow/low-memory machines like the PS1 or Sega Saturn meant your game was worse.

The era of the first Xbox and PS2 meant that those constraints loosened somewhat and so it made sense to start building things once. Especially as Kuju had three geographically separate studios, each with two games being made at any one time. They needed to get their best engineers working on core technology for all of the studios to leverage.

This meant that my code ended up in many games, even if I didn't work on them directly. Amongst those were:

  • Call of Duty: Finest Hour
  • Warhammer 40,000: Firewarrior
  • Reign of Fire
  • The Regiment
Battalion Wars

Then the studio got a deal with Nintendo to make Battalion Wars. This was a big deal for us because Nintendo just had that image of being the purest of pure games. And so, to be making a Nintendo game is one of those things that you dream of as a games programmer.

Because, it was important to the company, I was drafted into the game team to work on the core tooling for the game. We really went to town on making the tooling as powerful as possible to make it as easy as possible for the creatives to design, create, and edit a fun game.

Battalion Wars

Toward the end of the project, when things were getting tight in other departments, I also got stuck in with some of the gameplay elements. Primarily the player control, but I also brought my camera algorithm from Attack of the Saucerman to Battalion Wars!

It's the game I'm most proud to have worked on. One, because it was a game for Nintendo, but also, it was easily the most fun game to play. It's another game that still gets long-plays on Youtube, and as I understand it, has a pretty active modding community - which is always great to see.

Medical Management Systems Ltd.

After working on Battalion Wars, and frankly being burned out by the long hours, I had completed a decade in the games industry and was looking for something else. An opportunity came up to be a founder in a healthcare startup - I knew nothing about healthcare, or startups - so I figured, why not?

The company was founded in 2005, I wrote the first line of code on new year's day and 3 months later we had a product and two customers. We were lucky that the regulation was non-existent then and most companies hadn't started thinking about ISO audits for tech and so our small 3 person company was able to get a product to market without immense overheads or regulatory burdens - not that it meant we cut corners, we didn't, but the cost of the current regulations would have meant our way-in, back then, isn't a way-in now.

Growth was slow, because we were self-funded and the smaller medical practices we were dealing with weren't willing to spend huge amounts. We now get 6 or 7 figure contracts, back then it was more like 4 or 5. So, for the first three years I was the sole engineer of Meddbase - the now globally used medical-practice and hospital management system (I never liked the name)!

In the early days all product design, engineering, and quality-assurance was done by me. Eventually we grew to a size where I could bring in a team. I continued to be the strategic visionary, principal product designer, and lead of the engineering and QA team for 18 years as CTO until I switched my role to non-executive director and technology advisor.

As a company we were always engineering-led; and, as I built up the engineering team, I also developed the culture of the business. I took my inspiration from my time in the games industry: with a key focus on mentoring, innovation, collaboration, and a permanent eye on who the user is - something that often seems overlooked in the healthcare technology space.

As CTO I took the team from the first line of code to the behemoth it became, which included patient EMR, scheduling, AI driven clinical-coding, pathology, prescriptions and prescription delivery, PACS/RIS, referral network, clinical-pathways, document management, billing, stock-control, communications, patient-portal, occupational-health portal, business-intelligence and reporting, and much more.

language-ext

The difference between my time in games and my time building enterprise software products is stark: in games, you make the game, put it in a box, ship it and never see it again (well, that's how games was then, maybe not now!). With SaaS based enterprise software the project you're building lasts forever. So you have a responsibility to maintain the quality of an ever expanding code-base, whilst trying to keep the costs of maintaining that code-base as low was possible.

Quality and maintainability are much more important than outright performance (although performance shouldn't be ignored). This was quite an interesting journey for me to go on as a software engineer who started writing 8-bit assembler, wringing out the most performance out of the machine I was writing for.

About 8 years into the life of the Meddbase project I started noticing the same bugs happening over and over again. The obvious ones were null-reference exceptions, but there were others that I can only put down to incidental complexity. This concerned me. It concerned me because it felt like a limit was being hit, but I didn't know what it was.

So, I did what I always do: I went and found out. I tried to find solutions to the complexity problem - and one that landed in my field-of-view that seemed to make sense was: pure functional programming.

Pure functional programming promises that you can create small components that are declarative and you can trust their declarations. You can then combine those components into larger components and their declarations are the sum of their parts. This was so unbelievably simple to understand, but also so unbelievably powerful as a concept. It's like how mathematicians know that something is correct when the solution is elegant: pure functional programming is an elegant solution.

The problem I had was that we'd spent 8 years building a product that was written using object-oriented techniques. What to do?

Initially we tried supplementing the project with F# projects, which worked OK, but we still had this mass of C# code written in the OO paradigm, that still felt like it was at a complexity limit.

So, I started prototyping ideas in my spare time. The first of such was csharp-monad which was my first attempt at bring in pure-functional ideas into C#. One thing that became very apparent, very quickly, was that these types aren't that useful on their own. The Option monad is only useful if functions and methods that have optional results actually return an Option . This is most noticeable when using data-structures like List and Dictionary .

So, I felt the scope of that project needed expanding, but it was called 'csharp-monad', its name is self-limiting! So, I created language-ext: A full pure functional framework for C#.

It's been a mammoth journey developing the library - which is turning 10 years old this year (2024) and has been downloaded 14 million times! Especially as it's been something I've been building in my spare time, it's never been anything other than my personal project, even if it did become so important for the stability and maintainability of Meddbase.

What is interesting is how the industry has moved, more and more, toward functional programming. It isn't quite as far as pure functional programming, but I believe it will get there in the next decade.

My goal with the project is to create a Scala-like ecosystem where there's two major paradigms for the language. Microsoft can continue the OO journey of C# while I continue the pure functional programming journey.

10 years, after creating language-ext, Meddbase is over 10 million lines of code - and stable. I see that as a major win for the functional programming paradigm and for language-ext - it's been battle tested and succeeded.

Publications

I've been involved in a number of publications over the years – a lot in the healthcare space, which is probably not the audience for here.

  • "Is Functional Programming Finally Going Mainstream?" - Github ReadME project.
  • "Functional Programming in C#" - Manning
    • I did the technical proofs for both editions

What's next?

I left my full-time role as CTO at MMS to work on a new startup idea I have. I am bootstrapping it, which means funds are just savings right now, so in the meantime I am also going to try and monetise language-ext – keeping the core libraries MIT licensed (and therefore free), but adding more advanced layers around it that will have a more commercial license. It remains to be seen if there's an appetite for that, or if the community is as large as it appears, but the more revenue I can bring in from that over the next year, the more time I'll have to bootstrap my idea without compromise.

The idea I'm bootstrapping is related to the idea of reducing complexity in software engineering, but also has a much wider scope - if I get it right! But, it also has a certain amount of research associated with it and that might make it fall flat if the research doesn't go the right way. So, a bit of headroom will go a long way!


Subscribe

This site is an independent publication launched in February 2024 by Paul Louth. If you subscribe today, you'll get full access to the website as well as email newsletters about new content when it's available. Your subscription makes this site continue to exist. Thank you!

Fresh content, delivered

Stay up to date with new content sent straight to your inbox! No more worrying about whether you missed something because of a pesky algorithm or news feed.