Skip to content
Open to select opportunitiesPlettenberg Bay, Western Cape, ZA

> Lead Backend Engineer

I design event-driven backends that stay up, scale out and explain themselves.

Portrait of Juan Botha
REC ● JB-0001
Role
Backend / Platform
Focus
Event-driven
Now
Alpha7x
TZ
SAST · UTC+2
TypeScript✦JavaScript✦Go✦Python✦C++✦SQL✦Node.js✦Fastify✦Express✦Gorilla MUX✦gRPC✦OpenAPI✦Zod✦RabbitMQ✦Kafka✦BullMQ✦MongoDB✦Redis✦Redis Search✦RedisJSON✦PostgreSQL✦Kubernetes✦AKS✦ArgoCD✦LinkerD✦Vault✦Pulumi✦Skaffold✦Minikube✦AWS✦Azure✦IBM Cloud✦CI/CD✦OpenTelemetry✦Prometheus✦Grafana✦Datadog✦Jaeger✦Keycloak✦OAuth✦JumpCloud✦React✦Nuxt✦HTML✦CSS✦Vitest✦Supertest✦Agile✦OOP✦
Years building software
12+
Faster admin content tree
15×
Services in the platform I led
14
Countries worked in
3
// 01About

Engineer by trade. Systems thinker by habit.

Results-driven engineer with 12+ years of building software. I started out in electrical engineering, and that is still how I approach systems: understand the load, design for failure, and leave every circuit labelled.

I work mostly in TypeScript and Go, with Python and C++ when a problem needs them. My focus is distributed, event-driven architecture: multi-tenant microservices on Kubernetes, message brokers, typed contracts and the observability that keeps them honest. Right now I'm leading a TypeScript platform rebuild at Alpha7x.

ECT
Electrical Trade · 2000 – 2004
Wittedrift High
High School · 1987 – 1999
English
Native
Afrikaans
Professional
juan@plett: ~
$ whoami --json
{
  "name": "Juan Botha",
  "role": "Lead Backend Engineer",
  "base": "Plettenberg Bay, Western Cape, ZA",
  "origin": "Electrical trade → engineering → software",
  "worked_in": ["ZA", "UAE", "QA"],
  "primary": ["TypeScript", "Go"],
  "now": "Lead Backend Engineer @ Alpha7x",
  "thinks_in": "events, contracts, failure modes",
  "status": "open to select opportunities"
}
$ 
// 02Career journey

From switchboards to service meshes.

I started in the electrical trades, managed businesses in the Gulf, then moved into software. Today I lead a TypeScript platform rebuild at Alpha7x.

Jun 2026 — Present

Plettenberg Bay, ZA

Lead Backend Engineer

Alpha7x(opens in a new tab)

Trust infrastructure for mortgage assets.

Current role

  • Leading the rebuild of a legacy .NET backend as TypeScript services on Fastify, with Zod-typed contracts and generated OpenAPI documentation.
  • Designed Kafka event flows across the backend, import, communication, orders and response services, with retry and version-conflict handling for tenant events.
  • Built the import pipeline: authenticated document uploads into MongoDB GridFS, BullMQ background workflows and pluggable Azure, AWS and FTP storage providers.
  • Created @alpha7x/common-ts, the shared ESM contracts package for roles, identity, Kafka topics and error schemas, published to a private Azure Artifacts feed.
  • Ship to AKS through ArgoCD GitOps, with a standard Minikube, Skaffold and Docker Compose development setup across services.
  • TypeScript
  • Fastify
  • Zod
  • Kafka
  • MongoDB
  • BullMQ
  • Redis
  • Keycloak
  • Datadog
  • AKS
  • ArgoCD

Apr 2025 — Apr 2026

Cape Town, ZA

Platform company behind tools for building enterprise apps and PowerSync, an offline-first data sync engine.

  • Built backend systems and internal tooling across both the JourneyApps platform and PowerSync to improve reliability, visibility and operational insight.
  • Designed and implemented SDK connection reporting, showing how customers adopt the SDK, how they use it and how their connections behave.
  • Built Atlas billing and cost-tracking processes that show what drives infrastructure cost and make internal reporting more accurate.
  • Improved monitoring and observability across platform systems, which made service behaviour easier to see and troubleshooting faster.
  • Upgraded and maintained services across the platform and fixed security issues in the codebase.
  • TypeScript
  • Node.js
  • MongoDB
  • Kubernetes
  • Prometheus
  • Grafana
  • AWS

Jan 2025 — Mar 2025

Cape Town, ZA

UK marketplace that matches customers with transport providers and uses spare vehicle capacity to cut cost and emissions.

  • Planned a five-stage migration from Nuxt 2 to Nuxt 3 and shipped stage one to production.
  • Started redesigning the repository architecture for the TPP and Admin front ends, with new standards to make developers more productive.
  • Set up CircleCI alerts that post AWS Fargate deployment failures to Slack, which reduced production risk and sped up response.
  • Nuxt 3
  • Vue
  • CircleCI
  • AWS Fargate
  • Slack

Jan 2022 — Jan 2025

Stellenbosch, ZA

Senior Developer / Technical Lead

Wyzetalk(opens in a new tab)

14 services
multi-tenant platform

Award-winning digital employee experience platform for frontline workforces.

  • Led the rebuild of Wyzetalk as Wyzetalk Next: a multi-tenant platform of 14 event-driven TypeScript services that communicate over 73 RabbitMQ exchanges.
  • Wrote the shared platform library, shipped in about 2,600 releases. It provides typed publishers and consumers, retry and dead-letter topology, tenant-aware auth middleware and per-tenant database pools.
  • Built a segmentation engine on Redis set algebra to replace the legacy segmentation filter, removing the bottlenecks that slowed new imports.
  • Designed a segment-targeted feed, a custom take on fan-out-on-write. Audience changes are pushed when they happen, so each feed read is a single RediSearch query.
  • Kept the platform vendor-agnostic with adapter interfaces for email, push, SMS and AI, so it stays portable across Azure, AWS, IBM and GCP.
  • Standardised testing across the platform: 880+ Vitest and Supertest cases that run against in-memory MongoDB replica sets and Redis Stack.
Read the platform case study
  • TypeScript
  • Express
  • MongoDB
  • Redis Search
  • RedisJSON
  • RabbitMQ
  • BullMQ
  • Keycloak
  • Vault
  • Kubernetes

Aug 2021 — Jan 2022

Stellenbosch, ZA

30s → 2s
content tree load time

Joined the core platform team and took ownership of the legacy API.

  • Rewrote the algorithm that builds the admin dashboard's content tree, cutting its load time from 30 seconds to 2 seconds.
  • Found and fixed long-standing production bugs that had been causing data inconsistencies.
  • Introduced a standardised API structure with consistent error handling.
  • Mentored UI developers as they integrated the new API.
  • TypeScript
  • Node.js
  • MongoDB
  • REST APIs

Aug 2020 — Jul 2021

Eastern Cape, ZA

Software Developer · P2Sys Viewer

A.C Whitcher(opens in a new tab)

Long-established sawmill group. Built desktop tooling that sat between sales staff and the Sage ERP.

  • Built a Windows desktop app that floats over Sage, letting staff copy and auto-paste price-list data with one click.
  • Added fast customer price-list search with summarised views generated by P2Sys Manager.
  • Added validation that emails the sales manager, Sage admin and director when price lists are missing or prices don't match.
  • Made sales order creation faster and less error-prone by automating manual steps.
  • Node.js
  • Electron
  • PowerShell
  • Sage

Jan 2019 — Aug 2020

Eastern Cape, ZA

Software Developer · P2Sys Manager

A.C Whitcher(opens in a new tab)

15 min
automated ERP sync cadence

Designed and delivered the company's price-list management platform end to end.

  • Gave sales managers and directors one tool to create and manage timber price lists, with editing shared across departments.
  • Added scheduled and pausable price lists for targeted pricing, with automatic emails that send sample price lists to clients.
  • Built a Sage ERP integration that syncs pricing every 15 minutes.
  • Python
  • Node.js
  • Electron
  • PowerShell
  • Sage ERP

Before 2019

Middle East

Earlier chapters

Dubai, UAE

Sport In Life

Qatar

Carbon Wheels

  • General Manager

Qatar

Salam International

// 03Case study

Wyzetalk Next. Fourteen services, one event bus.

A ground-up rebuild of a frontline employee-communication product as a multi-tenant platform. Each customer gets its own subdomain, identity realm and database. Admins target posts at audience segments, and employees get a personalised feed with comments, reactions, notifications and support.

Private codebase · walkthrough on request2022 – 2025Technical lead · primary backend author
Backend services
14
Lines of TypeScript
117k
Event exchanges
73
Event consumers
96
Documented API operations
148
Automated tests
880+
UI languages
9
Shared-library releases
2.6k

+ Service map

Edge

Public entry points

Core APIs

Tenant-scoped, JWT per realm

Workers

Queue-driven delivery

Data & identity plane

  • MongoDB · DB per tenant
  • Redis Stack
  • BullMQ Redis
  • Keycloak · realm per tenant
  • Vault

Selected service

grouping

Core APIs

Audience segmentation engine built on Redis set algebra.

  • Redis
  • redis-om
  • BullMQ

Select any service on the map to inspect it. Every service publishes and consumes typed events through the shared library.

+ How it works

Creating a tenant is a choreographed saga. No central orchestrator runs it: each service reacts to an event, does its part and reports back.

  1. 1profile

    Publishes tenant.create when an operator adds a customer.

  2. 2import

    Creates a dedicated Keycloak realm for the tenant and replies with tenant.create-success.

  3. 3profile

    Fans out create-model, add-data and create-index events.

  4. 46 services

    Communication, content, grouping, interface, logging and support each build their per-tenant models and search indexes.

  • TypeScript
  • Express
  • RabbitMQ
  • BullMQ
  • MongoDB
  • Redis Stack
  • Keycloak
  • Vault
  • Kubernetes
  • Skaffold
  • Vitest
Request a walkthrough
// 04How I build

Principles, with receipts.

Opinions are cheap. Each of these is backed by something I've shipped.

  1. 01

    Contracts first

    Services agree on typed contracts before anything else. If the compiler won't accept a payload on the wrong exchange, it can't be sent there.

    evidence: 70 typed event contracts in a shared package · Zod schemas and generated OpenAPI at Alpha7x

  2. 02

    Design for failure

    Every dependency will fail at some point. Retries, backoff and dead-letter paths are the default, not something added later.

    evidence: TTL retry queues and dead-letter exchanges · 2 → 32 s backoff · version-conflict retries

  3. 03

    Isolate tenants by default

    Tenant boundaries belong in the architecture, not in WHERE clauses that someone will eventually forget.

    evidence: Identity realm per tenant · database per tenant · tenant-prefixed Redis keys

  4. 04

    Readiness reflects reality

    A pod is ready when its broker, database and cache connections are ready, not when the process starts.

    evidence: Readiness gates driven by live RabbitMQ, MongoDB and Redis connection state

  5. 05

    Test what ships

    Tests run against real engines in memory, so they catch the bugs that mocks hide.

    evidence: 880+ Vitest and Supertest cases · in-memory MongoDB replica sets and Redis Stack

  6. 06

    Developer experience is infrastructure

    If the stack takes a day to run locally, every production fix takes a week.

    evidence: One make deploy for the whole data tier · Minikube, Skaffold and Compose · pattern reused at Alpha7x

// 05Stack

Tools I trust in production.

Languages

[LANG]
  • TypeScript
  • JavaScript
  • Go
  • Python
  • C++
  • SQL

Backend & Messaging

[CORE]
  • Node.js
  • Fastify
  • Express
  • Gorilla MUX
  • gRPC
  • OpenAPI
  • Zod
  • RabbitMQ
  • Kafka
  • BullMQ

Data

[DATA]
  • MongoDB
  • Redis
  • Redis Search
  • RedisJSON
  • PostgreSQL
  • SQL

Cloud & Platform

[INFRA]
  • Kubernetes
  • AKS
  • ArgoCD
  • LinkerD
  • Vault
  • Pulumi
  • Skaffold
  • Minikube
  • AWS
  • Azure
  • IBM Cloud
  • CI/CD

Observability & Identity

[OPS]
  • OpenTelemetry
  • Prometheus
  • Grafana
  • Datadog
  • Jaeger
  • Keycloak
  • OAuth
  • JumpCloud

Frontend & Quality

[UI/QA]
  • React
  • Nuxt
  • HTML
  • CSS
  • Vitest
  • Supertest
  • Agile
  • OOP

// 07Contact

Let's build something resilient.

References available on request.