I’ve used a wide range of software across my client projects and jobs, as well as delivering training and writing articles.

Programming languages

PHP: My primary language for developing web sites, which I’ve been using for over 15 years (since PHP 4).

JavaScript: For any client side interaction I use JavaScript, either directly or with a library such as jQuery.

Go: My language of choice for developing software that needs to run on different platforms, including Windows on desktop machines.


MySQL: The database engine for nearly every web application I’ve worked with. For new sites I recommend MariaDB as it has a faster development cycle, and the majority of existing sites can be moved over with minimal changes.

SQLite: For very small projects and desktop applications, SQLite is a lightweight alternative to MySQL.

Web servers

Apache: The majority of sites I work on use Apache with mod_php as the web server.

nginx: For new servers I generally recommend nginx with PHP-FPM unless there is a particular feature that is only available in Apache.

Libraries and frameworks

PhpOffice: For creating Word documents and Excel spreadsheets programmatically. I’ve used this heavily for producing automated reports for a range of audiences, from internal accounts departments to large reinsurers.

jQuery: Although I’m gradually moving towards using plain JavaScript now that modern browsers support most of what I need, I still use jQuery and its library of plugins for some areas such as client-side validation.

Laravel: A PHP framework which makes building web applications easier and quicker. I’ve developed and performed security reviews on existing Laravel sites and built new sites from scratch – including the accounts system which I use to manage my business.

dompdf: Producing PDF files from HTML output, including insurance documents and invoices. All the invoices issued by my business are generated using dompdf.

Development tools

Git: The only version control system for modern projects. I’ve also delivered training on Git.

Vagrant: A tool for creating local test environments that mirror production, enabling development without risking live data.

Ansible: Configuration management for some of my servers and all of my local test environments. I’ve also delivered training on Ansible.

Linux: All the servers I work with run Linux, usually Debian or Ubuntu. I’ve also been running Linux as my primary desktop environment for over a decade, though I also have Windows and macOS machines for testing.

Data formats

XML: Used by client APIs I have built and supplier APIs which I have integrated with.

CSV: I have built import and export options using CSV files.

JSON: Used by client APIs I have built and supplier APIs which I have integrated with.

Excel: Using PhpOffice, I have built systems to import and export data using Excel spreadsheets.