Bookmarks

Interesting reads I've encountered in my travels, about the art of building web applications and working with engineering teams.

Authentication

OAuth reference
Okta have written a very comprehensive and approachable introduction to OAuth2.

OpenId Connect specification
I've spent more time referencing this specification than I care to admit.

Open sourcing BuzzFeed’s single sign-on experience
Case study on how BuzzFeed handle authentication

What happens when you visit FT.com
Case study on how Financial Times implement authentication, paywalls, and other edge concerns.

Databases

How Twitch uses PostgreSQL
Case-study on Twitch's database implementation

Why Uber Engineering Switched from Postgres to MySQL
Case-study on Uber's databse implementation

Design/FED

Klim Type Foundry
Amazing fonts and studies of historical typefaces.

Refactoring UI
Teaches various approaches for improving UIs

Web performance checklist
Addy Osmani will depress you by reminding you how much work is involved in building a performant UI.

Gov.UK design principles
I keep coming back to this. Clear, simple design principles and a brilliant piece of organisational communication.

Wipster
Video workflow software, produced locally in Wellington.

Charlie Gray
Nick de Jardine's done a stunning job on this photography portfolio website

Dotnet Core

Stripping Away Cross Cutting Concerns
How to enforce sensible NFRs without requiring developers to do anything.

Policy-based authorisation
Dotnet Core does an exceptional job of authorisation. This is a good writeup of the policy system and how to use it.

Architecture patterns in dotnet core
A git repo full of examples of how to implement various architectural patterns (good accounting references).

Engineering

Code as Craft
Etsy's technology blog. I've enjoyed their in-depth writeups which are often backed by comprehensive data and analysis.

Increment magazine
A beautiful editorial website, focusing on a different software development topic each issue.

Intercom blog
Big focus on product management and continuous delivery best practices.

Dropbox tech blog
Some particularly interesting reads about data at scale.

A List Apart
One of the most established and well respected authorities on web design, inclusivity and accessibility. Guest posts from many leading minds.

Brad Frost's blog
Design systems, frontend development, refreshing honesty.

Twelve Factor Applications
Written by Heroku several years ago, this is still a great reference for how to build a cloud web service.

On being a senior engineer
What's expected of a senior engineer

DevOps Strategy
GitLab's guide to DevOps. Useful if you need to do any DevOps.

Becoming a 10x developer
Tips on being a better teammate and lifting up those around you

Winning the battle against flaky tests
Tests that are unrelaible don't inspire much confidence. Some techniques for improving testing success rates.

The art of refactoring
Most software you'll encounter in a SaaS company was written by someone else, ages ago. It's a good idea to learn how to work with old code safely.

Migrations
Sometimes a step-change in technology means you need to move from one system to another, while keeping the lights on.

Microservice testing - coupling and cohesion
To test distributed systems, you need to draw very clear boundaries. This post talks about how to do that.

Sizing engineering teams
What's an efficient number of people to solve a problem?

Building services at Airbnb
Guidelines and checklists aren't enough to ensure consistency in a service ecosystem. Airbnb automate a lot of their cross-cutting concerns.

How to write a good software design document
Successful software engineers need to clearly articulate their decisions to other stakeholders.

Practical test pyramid
A good primer on software testing strategies.

Prioritising non-feature work and continuous improvement
It's common for SaaS organisations to invest in new features while paying little attention to growing technical debt. How to hold these things in balance.

Scaling engineering teams
How Stripe has grown while remaining nimble

Favourites

Run Less Software
The philosophy behind software development at Intercom.

Choose Boring Technology
This post was referenced in Run Less Software, and explains why your team should get good at a few key technologies.

On being lost
Simon Wardley's introduction to using mapping for business strategy.

Microservice testing
A comprehensive guide to testing strategies for microservices, helping to define exactly which system is under test at each stage.

Leadership

Michael Lopp
Literally wrote the book on engineering management. Great slack community too.

Why digital strategies fail
Digital transformations are seen as a panacea to all an organisations problems. Is it that simple?

Software architecture

Distributed systems theory
A good reference on the challenges of designing distributed systems

AWS architecture diagrams
Beautifully illustrated pages that outline key features of various AWS technologies.

API first at Paypal
How Paypal managed their transition to an api-centric architecture.

Decoupled, immutable REST APIs with Kafka
A reliable microservice system should favour asynchronous communication, and Kafka is a good way to implement this.

GraphQL and gRPC
Buzzwords galore. Using Google's RPC protocol with GraphQL.

Three mistakes we made moving to a microservices architecture
Hard lessons learned while implementing microservices.

How Etsy caches
Performant distributed systems need a solid caching strategy. I'm always on the lookout for how other SaaS products handle this.

Service discovery at Stripe
As soon as you have multiple components in your architecture, you need to invest in ways to observe and discover them.

Idempotency
Networks are unreliable, so distributed systems should handle the same message arriving multiple times.

AWS Kinesis - the best event queue you're not using
Makes a case for Kinesis over various alternative messaging and pub-sub systems.

Common patterns of multi datacenter architectures with Apache Kafka
Multi-region Kafka and handling eventual consitency.

How to bridge stateful and event sourced systems
Nobody gets to live in a perfect world. Strategies for working with traditional database-driven applications and event-driven systems side-by-side.

Dissecting SQS FIFO queues
Achieving guaranteed ordering with SQS.

Web performance case study
A look at how Netflix optimise their UI applications.

What I've learned working with Amazon SQS
It can be difficult to figure out how to structure an AWS service for best price/performance. Found this very useful.

Trends

OSS Will Eat Cloud Computing
Cloud computing has grown in part by reselling open-source technology. This article explores what might happen next.

Convergence to Kubernetes
Argues for the standardisation of compute workloads on the Kubernetes platform

Why are enterprises so slow?
Insightful read about what slows down development at big companies.

Software disenchantment
Ever noticed how websites and apps seems so slow these days? This article explores why.

The Coming Software Apocalypse
Software is still written by entering text into an editor. Will it always be this way?

Snook’s tweet about Medium
We are seeing a resurgence of the humble personal blog