Angus
Morrison

I'm a staff-level engineer building massively scalable services for global finance brands. A full-stack developer with a passion for Rust and Go, I've helped hundreds of developers improve their production code. I've spoken extensively on domain modelling and application architecture, and my writing has been shared by the Go core team. Here's where I collect my thoughts on software engineering.

Things I Made

You're currently enjoying a Next.js application configured to use TypeScript and Tailwind! It's running on Vercel and hooked up to Sanity and SendGrid.

Ever wondered what a loosely coupled, maintable Go application looks like? Wonder no more. Here's a fully tested implementation of the RealWorld spec built using Hexagonal Architecture and fluent, type-driven design.

A collection of BSD command-line applications that I translated to Rust while assessing the Clap crate for a professional project. Inspired by Ken Youens-Clark's Command-Line Rust.

Behold the limited power of a single CPU core performing an uncomfortable amount of computational geometry! This exercise in the mathematical foundations of 3D rendering loads models from .obj files and renders them with perspective-correct textures.

A concurrent, non-blocking, composing template cache showcasing advanced usage of goroutines and channels.

Things I Said

Type-driven design is a powerful technique for making invalid states unrepresentable. In this talk, you'll learn how to write robust, type-driven Go that protects your applications from Byzantine failure modes.

Go's concurrency model uses communicating sequential processes (CSPs) to avoid shared memory, but its channel primitives offer footguns aplenty. Get Go-ing safely with my tech talk on essential concurrency patterns.

You'd like to know how your Rails applications are performing without increasing the noise in your codebase. Here I present a simple pattern that keeps lines of instrumentation to a minimum.

So you have a Go service running in production, and you'd like it to keep running. Try these techniques for running stable production systems in Go.