Skip to content
Paul Hunt

Work

What I do for a living

I'm a senior software engineer and hands-on architect. In plain English: I design and build software, I fix the things nobody else can work out, and I try to leave every codebase in better shape than I found it.

The overview

Nearly thirty years, three languages, lots of industries

I have been a professional software engineer since 1998, working hands-on in C, modern C++ and Python, almost always on Linux.

For twenty years I worked at Bitwise, a software consultancy, which meant a new industry every few years: payment terminals, medical devices, geophysical test equipment and then telecoms. The telecoms work turned into more than a decade on one family of network monitoring products, first as a consultant and then as a member of the team at Illuminate / CipherForge Systems until 2026.

I do my best work where the problem is hard and the documentation is thin. I'm comfortable owning a complete system on my own, and equally comfortable sitting with a customer, a support engineer or a new starter until we have got to the bottom of something together.

Where I've worked

The areas I know best

Telecoms monitoring

Over a decade on a large C++ network monitoring probe for 3G and 4G networks: protocol decoders, subscriber and session correlation, filtering, vendor-specific formats from Ericsson and Huawei, and a traffic simulator to test the lot.

Secure communications

I designed, built and tested a TLS 1.3 / DTLS 1.3 proxy in C++ with OpenSSL, on my own, and proved it with 2,000 concurrent clients. I have also built key extraction and traffic decryption into an existing monitoring system.

Embedded payments

C on 16 and 32-bit Ingenico and Thales payment terminals: Chip and PIN, gift cards, remote updates, and a barcode product database for the UK Post Office squeezed into 8 MB of slow flash.

Medical devices

Moved a blood-glucose meter from a 4-bit processor to a 32-bit one. The calculation only existed as undocumented assembly, so I reverse-engineered it, wrote it down and reimplemented it in C with tests.

Test automation

A Python system that tested up to 32 geophysical devices at once, driving ovens and freezers while checking every reading that came back. Plus traffic simulators and test harnesses wherever they were missing.

Tooling and AI

Code generators that removed pages of boilerplate, a Bash monolith rewritten as testable Python, and a containerised assistant that joins group calls, then transcribes and summarises them with the actions for each person.

Greatest hits

A few things I'm proud of

  1. 40ร—

    One server, forty times the work

    A monitoring probe could follow about 200 subscribers per server. I split signalling from media, made the media processing multithreaded, and had a prototype ready to demonstrate in two days. The result: 8,000 subscribers on the same server.

  2. 60s โ†’ 2s

    The Post Office barcode scanner

    I built this one from scratch: the barcode scanner support and a product database for the Post Office's payment terminals, holding thousands of products in very slow flash memory. My first, naive version worked but took up to a minute to find a product. I then redesigned the storage and the search until it took one to two seconds.

  3. 4-bit

    The algorithm nobody had written down

    A customer needed their blood-glucose calculation on new hardware, but it existed only in 4-bit assembly. I worked out what it did, documented it and rebuilt it in C, with automated tests to prove the new device agreed with the old one.

  4. 1 library

    Safer parsing with no wasted instructions

    Copy-and-pasted protocol decoders without bounds checks had caused crashes that took weeks to trace. I replaced them with one reusable C++ template library, then compared the disassembly to confirm the only new instructions were the safety checks.

  5. 2,000

    A TLS and DTLS proxy, start to finish

    Sole designer and developer of a proxy that decrypts traffic for a back end or encrypts plain text on the way out, in both directions, tested with up to 2,000 clients connected at once.

Working with me

How I like to work

I'm at my best when I understand why something matters to the person asking for it. I ask questions early, I prototype quickly so there is something real to look at, and I measure before I claim something is faster.

I care about the people who come after me, so I write code that can be tested and read. I enjoy mentoring, and I have never minded being the person who gets the phone call when the support team is stuck.

  • Understand first. Read the code, the core dump and the customer before changing anything.
  • Show, don't tell. A two-day prototype beats a two-week slide deck.
  • Prove it. Measure it, test it, and check the disassembly if that is what it takes.
  • Leave it better. Modular, testable and documented, so the next engineer has an easier day.
  • Be straightforward. Clear about what I know, what I don't, and when it will be done.

Want the details?

The CV has the dates, the job titles and the long list of acronyms.

Read my CV