Welcome to the toolbox I use as a software craftsman, coach in software engineering best practices, and tech lead. This catalogue intentionally steps beyond the ubiquitous corporate standards — Draw.io, Visio, Confluence, Jira — and instead explores tools and practices that are often simpler, more open, and in many cases more effective. My hope is that you’ll discover something unexpected that makes your daily work better.


Documentation & Communication

These are the textual languages and tools I use to describe systems, draw diagrams, plot data, and publish documentation. All of them are plain‑text friendly, versionable, and designed to live alongside source code.

Diagrams as code

Instead of dragging boxes, I describe diagrams in a simple language. The result is readable in a diff, reviewable in a pull request, and never out of sync.

  • Graphviz / Dot language — Render graphs from a textual description of nodes and edges.
    https://graphviz.org/ | Layout engines | Repository

  • Mermaid — JavaScript‑based diagrams from Markdown‑like syntax. Ideal for READMEs and wikis.
    https://mermaid.js.org/ | CLI
    Supported kinds: Flowchart, Sequence Diagram, Gantt, Pie, User Journey, Entity Relationship, State, Class.

  • PlantUML — A Swiss‑army knife for software architecture and process diagrams.
    https://plantuml.com/ | Themes
    Supported kinds: Sequence, Use Case, Class, Activity, Component, State, Network Time, JSON/YAML visualisation, SALT GUI prototyping, Gantt, Mindmap, Work Breakdown Structure, Entity Relationship.

  • Kroki — A unified API to render all of the above, perfect for CI pipelines and tools without native diagram support.
    https://kroki.io/

Other text‑to‑diagram DSLs

Smaller, specialised tools that turn ASCII art or concise text into clean graphics.

Plotting, charting and science

When raw numbers need visual form.

Writing and publishing


Development Environment & Setup

A well‑tuned workspace that supports multiple identities, multiple language runtimes, and multiple operating systems.


Automation & AI

Automation frees developers for higher‑value work; AI, used carefully, can become a powerful pair partner. I treat both with curiosity and a sharp eye on security.

Low‑code automation

  • n8n — Low‑code workflow automation for gluing together internal tools, notifications, and data pipelines. I build integrations that call AI platform APIs.
    https://n8n.io/
  • Node‑RED — Flow‑based programming for wiring together hardware devices, APIs, and online services. Often used in IoT and automation contexts.
    https://nodered.org/

Local AI

  • Ollama — Run large language models locally, privately, and without cloud dependency.
    https://ollama.com/

Generative AI experiments

I actively experiment with both cloud‑based and local assistants, always applying strict cybersecurity rules: no sensitive code leaves my machine, prompts are sanitised, local‑first when possible, and every AI suggestion is reviewed like an untrusted junior developer’s pull request.

AI‑assisted development in practice

I use the above tools while building office‑stamper (see Repositories). The goal is to improve my workflow — from scaffolding code to explaining unfamiliar libraries — while keeping the human firmly in control. It’s pair programming with a machine, not a replacement for craftsmanship.


Collaborative Practices & Product Thinking

How teams organise, name their work, and split requirements has a bigger impact than any technology choice.


Technical Disciplines & Craftsmanship

The day‑to‑day practices that turn code into well‑crafted software.

Foundations

Katas (deliberate practice)

Repetition of small exercises to internalise technique.

Code quality & security

Accessibility

Inclusive design is a quality attribute, not an afterthought.


Languages & Paradigms

I believe a polyglot approach sharpens thinking. Different languages force different mental models.

  • Ballerina — Cloud‑native integration language where sequence diagrams are syntax.
    https://ballerina.io/
  • Clojure — Lisp on the JVM; functional, immutable‑by‑default.
    https://clojure.org/
  • J — Terse, array‑oriented programming.
    https://www.jsoftware.com/
  • APL — Symbolic mathematical notation descendant; experimented with via the Diamond Kata.
    https://www.dyalog.com/
  • Java (with JEPs) — My core enterprise language; I follow JDK Enhancement Proposals closely.
    https://openjdk.org/jeps
  • JavaScript — The web’s language, used with Node.js and nvm to manage multiple runtime versions.
  • Python — My go‑to for prototyping, glue code, data wrangling, and interfacing with AI/ML ecosystems.
    https://www.python.org/
  • C# — For Windows‑specific and Azure‑centric solutions where the .NET ecosystem shines.
    https://dotnet.microsoft.com/en-us/languages/csharp
  • C / C++ — When I need to hack closer to the metal, understand performance, or work with systems programming.
    C | C++
  • Bash / Batch / PowerShell — Small scripts that run on any machine without extra installation; the glue of CI/CD and everyday automation.
    Bash | PowerShell
  • Ruby — Cherished for its vibrant documentation‑focused community and tools like Jekyll, Asciidoctor, and more.
    https://www.ruby-lang.org/

Self‑Hosted Infrastructure & Services

I have a strong affinity for self‑hosted, open‑source alternatives that keep data under my control. These are some of the services I run, contribute to, or use regularly.


Repositories

A selection of my open‑source projects and deliberate practice playgrounds.


Inspirations & Tangents

Things that inform my work, make me smile, or remind me that technology is a human endeavour.