Knowledge Base

Welcome to my Knowledge Base!

This is a collection of articles, videos, and ideas that influenced the way I think about software engineering to the extent that I want to refer back to them occasionally. I've often sent these to colleages as more eloquent or in-depth ways to express an idea I'm trying to get across in discussions or code reviews; this page also serves to help me look them up in those situations.

Programming

Functional Programming

My preferred approach to programming has evolved over time towards data driven design with expressive types; as functional programming typically leans heavily on these tools I tend to find ideas on functional programming particularly interesting and helpful.

Parse, don't validate - Alexis King

Parse, don't validate captures a pattern that solves the common problem of validating inputs by using the type system to your advantage.

Railway Oriented Programming - Scott Wlaschin

Railway Oriented Programming lays out a recipe for error handling in function programming pipelines.

Python

Python was my primary language for a long time - it's probably still the language I'm most experienced with.

Below are a few talks I've found useful.

Transforming Code into Beautiful, Idiomatic Python - Raymond Hettinger

I luckily stumbled across Raymond Hettinger's Transforming Code into Beautiful, Idiomatic Python talk when learning Python, and although it's starting to show its age a little it's still a great overview of how to make your code more 'pythonic'.

Super Considered Super! - Raymond Hettinger

Another gem from Raymond Hettinger, this time diving deep in to Python's multiple inheritance model.
While I reach for inheritance less often nowadays, Super Considered Super! gives you the knowledge to wield it with maximum potential in Python.

Architecture

Domain Driven Design

Architecture Patterns with Python - Harry Percival & Bob Gregory

Architecture Patterns with Python begins with the fundamentals of domain driven design and builds, layer by layer in 13 chapters, to event-driven architecture and CQRS. The result is a collection of great ideas that build on eachother, but also can often be taken piecemeal as an incremental improvement to how you build software.
The book presents the tradeoffs of applying each technique, making it clear that - especially for the more significant architectural ideas - you may not benefit from applying them unless you have a particular problem to solve.

While oriented around Python, the particulars of the language are secondary to the architectural techniques presented; the code references and library choices are useful, but could be substituted for any other language and the book would be just as valuable.

General Architecture

Stop Using Mocks (for a while) - Harry Percival

Also available as a blog post, this talk presents itself as an introduction to better testing techniques in Python (and is full of great ideas for testing), but for me its key insight was how to exert design pressure on a system through both testing and architectural choices.
I watched the talk at a time when I was exploring similar concepts in my own work, and it helped crystalise ideas that continue to influence how I write code.

I watched Stop Using Mocks long before reading Architecture Patterns with Python, and it wasn't until I assembled this list that I realised that Harry Percival had authored both - I wouldn't be surprised if more of his work appears in this list in the future.

Tools

git

How to Write a Git Commit Message - cbeams

I'm glad I found How to Write a Git Commit Message early in my career.
I definitely read more commits than I write, and I do a lot of git history spelunking - often of my own commits.
Reading a great commit message - one that explains the why, and provides the right amount of context - makes a huge difference both when doing reviews and while digging in to the commit history.

Software Engineering

Engineering in a Big Tech Company

Good Engineers series - Sean Goedecke

Sean Goedecke has a whole list of articles (linked above) dedicated to being a better engineer, mostly in the context of big tech companies. His views broadly align with mine and my experience, especially as I've progressed to senior+ roles.
A couple articles I've particularly enjoyed are How to Ship, which clarified my thinking on how I approach delivering projects; and Ratchet Effects, which maps closely to advice I've given to juniors about how positioning yourself within a team or organisation is half the battle for progression.