Werner Pieterson
Staff Software Engineer, Backend
Pretoria, South Africa · Remote since 2020
Profile
I'm a backend engineer. I've been building web applications, APIs and microservices since 2009, these days mostly in Go and Python. For the last few years I've worked in the cryptocurrency space at Luno, building the API services that power our mobile and web apps.
I enjoy refactoring code with a focus on reusability, readability and ease of use, and a lot of what I work on is foundational to the engineering team or has high impact across it. I like to automate the repetitive, write a technical design doc when there are real unknowns, and prototype when that's the faster way to find the answer. I believe simpler is better. The first solution is rarely the final one, so I iterate, refactor and improve.
Experience
I make time to pay down technical debt, even when it isn't on the roadmap. As the coin catalogue grew, I rebuilt our digital-assets package around a single per-coin config map, so settings that had been scattered across functions all over the codebase now live in one place. Along the way I split a service another team had built into smaller, focused packages, reworked our coin filtering, and built the shared testing helper the team now uses as standard.
Much of our UI is server-driven: the backend describes each screen and the apps render it. I built the layer that turns our business logic into those UI structures and keeps them separate from the Protocol Buffers (protobuf) definitions, so screens can change without reshaping the services underneath.
- Backend lead on a company-wide analytics migration: untangled three efforts that had been rolled into one, re-sequenced them, and built the Go code generator that plugs into our multi-platform pipeline, turning the data team's event definitions into a Go module our core services import.
- Helped launch 50+ tokenised stocks and ETFs in 2025, including our Blue Chip+ bundle, and shipped compliance features under regulatory deadlines. Two examples are our transaction-monitoring (KYT) integration and the UK Financial Promotions work under the FCA's October 2023 deadline.
- Over the past year, made agentic coding part of how I work, treating what it produces as a first draft to review and refine, not something to trust blindly, and folding historical review feedback into a team AI review skill.
- Sit on our backend standards squad and interview Senior and Staff candidates. Most of my mentoring is informal, through review feedback: explaining the why, not just what to change.
- Work day to day in Go, building gRPC microservices with protobuf across 25+ of Luno's 100+ services, using our open-source Go libraries, including reflex, a Kafka-inspired event-streaming framework, along with jettison, shift and weld. Grafana is open most days, with OpenSearch for logs and Prometheus feeding the metrics behind it, plus GitLab CI/CD. It all runs on AWS (RDS, S3, CloudFront) and Cloudflare.
- Co-designed our portfolio profit & loss service, which replays more than a billion ledger entries to work out each customer's returns.
- Introduced our themes package, starting with an asset layer that decoupled hard-coded assets from business logic. It shipped one brand refresh behind a feature flag and carried a second.
- Led the currency-formatting work so that every monetary value a customer sees flows through a single, client-version-aware layer, and migrated the callers across 10+ services.
- Trimmed noisy and stale logging in favour of metrics, which cut our log volume and unnecessary on-call alerts.
- Led the wind-down of our savings product: built the account sweep and unwind processors, ran the phased disablement from staging to production, and swept the remaining customer accounts to closure.
- Designed and built the client API for our savings product, working with the mobile and web teams to deliver its features.
- Shipped a real-time price-change monitoring and alerts service.
- Worked on the content system behind the app's Explore tab: an internal service that aggregated and cached crypto news and market data from external feeds alongside our own blog posts and learning articles, plus the card layer that served it all to clients.
I worked with clients on short contracts. For one, I built Django middleware, view mixins and a custom authentication backend that authenticated users against a remote API with no local user database. For another, I built a Flask web UI to manage the schedules of a hydroponic greenhouse. For a third, I built a debtor self-service portal.
I worked on an online debt-collection platform serving retail, banking and collections clients. We did test-driven development, and every change was reviewed before it was merged. I started on the original product, built in PHP and MySQL, and later worked on its Django rewrite. I designed and built the core of our in-house services framework, a REST API to third-party SMS, voice, debit-order and payment integrations shared across both, using Django REST Framework and PostgreSQL with RabbitMQ and Redis for asynchronous work. I served on the technical committee, and I looked after infrastructure too: Ubuntu servers, MySQL replication and CI/CD.
I acted as technical lead and developer on a web and mobile loan-application portal built in CakePHP and integrated with the company's in-house loan-origination system.
I built location-based services in PHP (CakePHP) and Java (JSF): ATM and branch locators across USSD, mobi and web, and weather and traffic backends that pulled in mobile-network location data and partner feeds.
I worked on a real-time vehicle-tracking and fleet-management system in PHP, JavaScript and Java, along with R&D proofs of concept, document tracking, a J2ME tracking app and spatial-data processing, and helped build the company's in-house web framework. I also set up and ran its Ubuntu servers.
A four-year programme across Computer Science, Informatics and Information Science, with a six-month industry learnership in the final year.
At home
I have a soft spot for the Internet of Things. A lot of my free time goes into tinkering with hardware and automating my home with Home Assistant. I've flashed ESP32 relay boards and written ESPHome firmware to control my garage doors, gates and irrigation, and I reverse-engineered my alarm system's RS485 protocol, with AI-assisted coding, to bring it into Home Assistant.
My homelab runs on Proxmox and Docker, with a k3s cluster where I'm experimenting with AI agents that help plan, build and review software through a CI/CD pipeline, using Hermes Agent as the harness. I've submitted upstream fixes to the project as PRs too. The containers run on Ubuntu, Debian and Alpine, and I've been a Linux user since 2004. I favour open source, and I believe technology should simplify life without getting in the way.
Open source
Most of my open-source contributions are in the Home Assistant ecosystem.
- Load Shedding for Home Assistant: PyPI library and HA integration that tracks South Africa's load-shedding schedules using the Eskom SePush API, so you can automate around outages.
- ESPHome-based firmware to integrate things that aren't smart into Home Assistant.
- WASP occupancy detection and Aqara motion-sensor reset: AppDaemon apps.
Skills
Go · Python · SQL · Bash
Django · Django REST Framework · Flask
Microservices · gRPC · Protocol Buffers · Event-driven systems · REST APIs · System design
MySQL · PostgreSQL · Redis · RabbitMQ
AWS (RDS, S3, CloudFront) · Cloudflare · GitLab CI/CD · Docker · Linux
Grafana · Prometheus · OpenSearch
Test-driven development · Code review · AI-assisted engineering
Homelab & hardware · Proxmox · TrueNAS · Kubernetes (k3s) · Home Assistant · ESP32 · ESPHome · Soldering & firmware flashing · BLE & RS485 reverse engineering
Languages
Afrikaans (native proficiency) · English (bilingual proficiency) · German (limited working proficiency)
Beyond work
When I step away from tech, I like to stay active. These days that mostly means running. I'm a husband, father, home barista and coffee aficionado.