Hi! 👋 I'm Josh, a full-stack engineer.

I build reliable applications that tackle real business challenges. My enterprise SaaS background shapes how I approach solutions, from award-winning hackathon projects to AI-powered platforms.

I work with React, TypeScript, and Node.js, focusing on testing and production reliability. Currently exploring AI applications and writing about tech.

picture of Josh Tuddenham

Skills

My journey spans from an early-stage fintech, where I collaborated with engineers to build behavioural analytics tools for hedge funds, to helping shape enterprise features at a rapidly growing expense management platform. This mix of startup and enterprise experience influences how I approach technical challenges today.

Additional Experience

Capital Markets

Deep understanding of fintech and analytics, building solutions that drive investment decisions

Complex Systems

Experience architecting solutions for complex trading and business requirements

Enterprise Solutions

Building robust, scalable applications that solve real business challenges

Blog

Deep dives into technical challenges I've tackled, from teaching an AI dog new tricks to wrestling with WebSockets. These posts explore the reality of software development - accidental rabbit holes and JSON-induced existential crisis.

Building a Live London Underground Tracker: Learning Go From Scratch
GoBackendAPIsWebSocketsConcurrencyLearning

Building a Live London Underground Tracker: Learning Go From Scratch

How I learned Go by building a real-time London Underground tracker, featuring concurrent polling, WebSockets, and lots of debugging.

Express Error Handling: Because Things Will Go Wrong
ExpressNodeJSBackendError HandlingTypeScriptPinoWooster

Express Error Handling: Because Things Will Go Wrong

From try-catch hell to elegant error handling: A deep dive into implementing robust error handling in Express with TypeScript, custom error types, and global middleware.

Making Wooster Talk: A Deep Dive into Structured Logging
PinoNodeJSBackendLoggingTypeScriptExpressWooster

Making Wooster Talk: A Deep Dive into Structured Logging

From chaotic console.logs to structured logging: How Wooster learned to communicate clearly using Pino, environment-aware configuration, and proper log levels.

From Fetch Mocks to MSW: A Testing Journey
TestingMSWAxiosTypeScriptVitestWooster

From Fetch Mocks to MSW: A Testing Journey

How a simple Axios refactor led me down the path of modernizing my test mocks with Mock Service Worker, and the valuable lessons learned along the way.

Refactoring Wooster's API Layer: A Simple Approach with Axios
AxiosTypeScriptREST APIRefactoringAuthenticationFrontend DevelopmentWooster

Refactoring Wooster's API Layer: A Simple Approach with Axios

Moving from fetch to Axios: simplifying API calls, adding interceptors for authentication, and improving error handling - all while following the official documentation patterns.

Deploying Wooster: A Tale of Memory Limits and Nginx Configs
DevOpsDigital OceanNginxGitHub ActionsDeploymentWooster

Deploying Wooster: A Tale of Memory Limits and Nginx Configs

Adventures in deploying an AI travel planner: memory limits, OAuth drama, and rate limits.

Contact

Looking to build something interesting? I'm always open to discussing new opportunities, technical challenges, or the perfect state management pattern.