Key themes in my work
Welcome! This page has a curated list of my blog posts grouped by key theme.
I write about system design, software, learning how to learn, and product development.
Alternatively, browse by tag, browse the grid, view the archive, or search in the top right.
System Design
How do we build great (machine learning and software) systems? (mega-post draft)
- Summary of a Philosophy of Software Design - John Ousterhout: Practical tips about software design that also apply to system design ⭐️⭐️⭐️ (personal favourite)
- Key concepts for scaling systems: The 4 most important techniques for scaling software systems
- What a Slinky Can Teach Us About System Design: System behaviour is latent within the structure of the system
- The Blind Men and the Elephant: A system is more than the sum of its parts
- Sweat the Small Stuff: Because complexity is incremental, it makes sense to sweat the small stuff
- A Beginner’s guide to domain-driven design boiled down to one image: What I think captures the core essence of domain-driven design.
- Key design principles for dealing with (human) error: Building systems with humans in mind
- Unlocking the Secret to Never-ending Clean Dishes: Advice on where to intervene in systems
- System bottlenecks explained with water pipes: Always try to optimize the system bottleneck for maximum impact
- Depending on things make them harder to change: A real world example showing how dependencies drive system complexity
Software
How do we write great software? (mega-post draft)
- Summary of a Philosophy of Software Design - John Ousterhout: The most important and practical tips from my favourite book about software design ⭐️⭐️⭐️ (personal favourite)
- Book notes: A philosophy of software design: Bullet note summary of the same book
- A tale of two values: What is more important: something that works or something that we can change?
- How to scale up your code: Tips and tricks for scaling
- Your argparse is not the interface of your application: Anything (also the CLI) should be able to drive your program
- Writing better code using interfaces: Interfaces allow you to decouple from implementation details
- Three examples of theory building: Putting theory central instead of code (Naur, 1985)
Testing:
- Testing Is Like Pulling Up a Bucket of Water from a Well
- What if your code and tests are in the same file?
- Rust colocates unit tests
Optimization:
- Reducing our stored model state by 80% using bit manipulation magic in Python: Storing integers with reduced precision for fun and profit
- How to speed up your code: List of general techniques to speed up (your code)
I make small tutorials on how to do things on AWS sometimes:
- Our Amazon Sagemaker Processing job setup
- How to do cross account Sagemaker endpoint requests in AWS
- How to deploy an AWS Lambda serverless function using AWS CloudFormation
- Building a REST API with AWS API Gateway and AWS Lambda in Python
- Automating cloud infrastructure using infrastructure-as-code
- Deploying your first AWS CloudFormation stack
Learning
How do we learn and get better at learning? (mega-post draft)
- Memorising the first 18 digits of pi: Memory works better when you link it to vivid mental imagery
- To learn, retrieve: Retrieval is important in learning
- Atomic flashcards: Smaller flashcards are better
- Don’t mistake the internet’s intelligence for your own: Avoiding illusions of knowledge
- Lessons from playing video games at the highest level: Skill requires repeated application
- Learning how to snowboard as a skier: Skill transfer from skiing to snowboarding
- Freedom is not free (2 lessons from 2 years of working): Reflecting on data science consulting
- A tool addresses human problems by amplifying human capabilities: What exactly is a tool?
Product
How do we build a great product?
- What is a startup?: Notes on a Paul Graham essay
- Transform waste: Ideation framework for startup ideas
- You can always kill the feature: It is OK to kill your darlings
- Why are instagram, facebook, and twitter so damn addicting?: How big tech got us hooked
- The Juiciness of Slay The Spire: Juice and game design
- Why I Can’t Remember Locking My Door: The Case for Better Design: Feedback is a design problem
- All problems are timely: Our problems often have a very specific time-window in which they appear
Career
Practices that work well for me and other generic advice
- How to: Shared decision making: In your career you often do not take decisions alone. Use this framework to structure group decision making meetings.
- How to: Give better feedback with the SBI-framework: In your career you will need to give peer feedback to your colleagues. Use this framework to structure your feedback to make it more effective.
- How to: Figure out what to do: In your career there will be times where you simply do not now what to do. Use this framework to figure out what to do.