Looking back on a decade in software engineering
Aug 30, 2023Building Canvas-Based Web Applications
Aug 16, 2023 · Gradients & GritExploring Production-Ready AI at the Frontier of Research
Aug 15, 2023 · Gradients & GritIntroducing PromptCanvas, a spatial prompt interface
Jul 26, 2023From regression to neural networks
Jul 9, 2023Writing damn good decks with LLMs
Jul 2, 2023An engineer’s guide to UI design
Jun 18, 2023On the future of coding blogs in a world of LLMs
May 13, 2023Instant Linux VMs without the Installation
Apr 30, 2023Reproducible VMs for Local Development
Apr 23, 2023Extending the Kubernetes Scheduler
Mar 26, 2023Adding Context: The First Weeks
Mar 12, 2023Generating Subtitles in Real-Time with OpenAI Whisper and PyAudio
Mar 1, 2023The OS for building products
Feb 5, 2023Improving Local Development with Atlas
Jan 29, 2023The most memorable computer science education is applied
Jan 15, 2023Using Static Code Analysis to Share Types Between Services
Jan 8, 2023Nested Flags with Bitwise Operators
Dec 31, 2022What's Next
Dec 26, 2022Looking Back on 2022
Dec 18, 2022Calculating Rolling Billing Periods
Dec 11, 2022Storing User-Defined Attributes in ClickHouse with Nested Types
Dec 4, 2022Building delightful React applications has never been easier
Nov 27, 2022Indirection is the antithesis of velocity
Nov 20, 2022Serializing Data between Systems with Anzu Values
Nov 6, 2022Betting on Delightful Products
Oct 30, 2022Experiencing How Big Corporations Work for 240€
Oct 23, 2022Observations on Successful Companies
Oct 10, 2022Offloading Execution Flow to the Database
Oct 2, 2022Running untrusted code in short-lived environments for Anzu v1
Sep 26, 2022Building Sortable Relations with PostgreSQL
Sep 18, 2022Making Architects work in Software Teams
Sep 11, 2022Anzu Behind the Scenes: Why Resource Management Wasn’t It
Sep 4, 2022Steady State means Continuous Rewriting
Aug 28, 2022Sharing Code in TypeScript is (Still) a Mess
Aug 21, 2022Balancing Normalization and Revision History
Aug 14, 2022Handling Long-Running Jobs with AWS SQS
Aug 7, 2022Deploying Containers on AWS ECS Using the SDK
Jul 24, 2022Reducing Database Round-Trips with Boring Queries
Jul 17, 2022Measuring Popularity or How Likes Don’t Tell the Full Story
Jul 10, 2022Running Container Workloads on Anzu with Managed Containers
Jun 26, 2022Improving Cache Hit Ratios with Connected DataLoaders
Jun 19, 2022Introducing Anzu Dev Environments
Jun 13, 2022Bridging the Gap between the Cloud and Your Codebase with Anzu Services
Jun 5, 2022Deploying Docker Containers over SSH
May 22, 2022Modeling Polymorphic Relations in Postgres
May 8, 2022Making teams move faster, happier.
Apr 24, 2022Required GitHub Actions Jobs in a Monorepo
Apr 17, 2022Routing Traffic for Dynamic Deployments using Traefik
Apr 9, 2022The Required GitHub Status Check That Wasn't
Mar 27, 2022Building and pushing Docker images within GitHub Actions
Mar 20, 2022Understanding Deferred Foreign Key Constraints in PostgreSQL
Mar 13, 2022Looking back on Introduction to CS
Feb 26, 2022The Complexity of Building Software in 2022
Feb 20, 2022Getting the hang of Polymorphism in object-oriented languages
Feb 12, 2022Reviewing User-Generated Content with Interactive Slack Messages
Feb 6, 2022Offloading Program Flow into PostgreSQL with Temporary Tables
Jan 30, 2022Layouting across platforms
Jan 23, 2022Important Rules of Embedding Types in Go
Jan 16, 2022Indexing Pages Programmatically Using the Indexing API
Jan 10, 2022Communicating between services with gRPC
Jan 1, 2022Paginating Large, Ordered Data Sets with Cursor-Based Pagination
Dec 26, 2021Looking Back on 2021
Dec 18, 2021Choosing an Implementation for Unique Identifiers
Dec 11, 2021Exploring the Geometric Mean
Dec 5, 2021Decreasing Graph Complexity with Transitive Reductions
Nov 27, 2021Scheduling Tasks with Topological Sorting
Nov 20, 2021Running Untrusted Workloads with Firecracker and containerd
Nov 14, 2021Solving the unexecutable executable
Nov 7, 2021Accessing Workouts with HealthKit and Swift
Oct 31, 2021Reducing SaaS Complexity
Oct 23, 2021Infrastructure-as-Code as Single Source of Truth
Oct 17, 2021Updating Notion Pages on a Schedule with GitHub Actions
Oct 9, 2021Generating Dynamic GitHub Actions Workflows with the Job Matrix Strategy
Oct 3, 2021Preview Environments for every Pull Request with Pulumi and Vercel
Sep 26, 2021Containers as Code with Pulumi and Docker
Sep 19, 2021Cutting Production Release Duration By 80%
Sep 12, 2021Implementing Transactions with Side Effects
Sep 3, 2021An introduction to R
Aug 27, 2021Communicating between Java and Go using gRPC
Aug 22, 2021Built it, but nobody came
Aug 15, 2021Analyzing Blog Performance Using R
Aug 8, 2021Setting up Algolia DocSearch with Next.js
Aug 1, 2021Multi-Stage Markdown Processing with remark
Jul 25, 2021Improving DataLoader Stack Traces
Jul 18, 2021Transforming Exponents, Radicals & Fractions
Jul 11, 2021Motivating Employees with Stock Options
Jul 4, 2021Faster TypeScript Feedback Loops with esbuild
Jun 27, 2021Designing APIs to Last
Jun 19, 2021Observing WebSocket infrastructure with Socket Inspector
Jun 7, 2021Rendering Remote Images with AsyncImage
Jun 5, 2021Versioning Features for Sustainable Product Evolution
Jun 1, 2021Improving Content Discoverability with Topics
May 31, 2021Locking and Synchronization for Node.js
May 26, 2021A primer on SSO with SAML
May 22, 2021Picking Monitoring Methods to Increase Observability
May 16, 2021Improving observability with annotated build information
May 13, 2021Sending Contact Form Submissions to Notion
May 9, 2021Improving releases with service-splitting
May 2, 2021Running a commit-based release infrastructure
Apr 24, 2021My 2021 Swift Student Challenge Submission
Apr 18, 2021Processing Markdown with remark and unified plugins
Apr 11, 2021The Future of Multiplayer: Cloudflare Durable Objects
Apr 1, 2021SwiftUI Meets Swift Playgrounds
Mar 23, 2021Visualize Regressions with Playwright Video Recording
Mar 18, 2021When Velocity Implies Simplicity
Mar 10, 2021Efficient Caching with Reduced Roundtrips
Mar 4, 2021One Semester In, Five To Go
Feb 26, 2021Preventing Increasing Fragmentation
Feb 21, 2021Instant Full-Stack Insights with NewRelic
Feb 12, 2021Secure Asset Management and Upload with S3
Feb 4, 2021GraphQL-powered API Integration Tests
Jan 28, 2021Exploring State: State Machines
Jan 22, 2021Finding The First Iteration
Jan 17, 2021Centralized Validation with GraphQL Scalar Types
Jan 10, 2021Deliver context-aware navigation with Push Evaluation
Jan 5, 2021Building Functional Stack Navigation
Dec 30, 2020Introducing Stapel
Dec 29, 2020Looking Back on 2020
Dec 22, 2020Multiple App Environments Using Xcode Schemes
Dec 13, 2020Supporting Universal Links with SwiftUI
Dec 7, 2020APNs Environments and Push Notification Delivery
Nov 29, 2020It's About Time
Nov 23, 2020Preview-Driven Development with SwiftUI
Nov 18, 2020State and View Composition in SwiftUI
Nov 15, 2020Scraping Country Codes
Nov 12, 2020Boring Technologies, Reliable Foundations
Nov 9, 2020Getting Into iOS Development with SwiftUI
Nov 5, 2020Starting Lasting Side Projects
Nov 2, 2020The Pace of Studying in 2020
Oct 30, 2020When (not) to use pg_dump
Oct 28, 2020Building Productive Habits
Oct 23, 2020Digitizing My Maths Studies with TeX
Oct 20, 2020Rebuilding my portfolio using Next.js & TailwindCSS
Oct 16, 2020My Favorite Tools in 2020
Oct 13, 2020Reaching Remote Acceptance
Oct 4, 2020Rapid TypeScript Development with esbuild and Estrella
Sep 19, 2020The End of an Era for Public Container Image Registries
Sep 12, 2020Common Pitfalls in Go Application Development
Sep 1, 2020Fundamental Design Decisions for Scalable Systems
Aug 28, 2020Forwarding Incoming Mails with AWS Lambda and SES
Aug 16, 2020Building Powerful Integrations with GitHub Apps
Aug 3, 2020Seamless End-To-End Browser Tests with QA Wolf
Jul 31, 2020Accessing ECS Task Metadata at Runtime
Jul 26, 2020Tunneling Local Applications with SSH and Caddy
Jul 22, 2020Handling GraphQL Errors using Sentry
Jul 17, 2020The Weirdest Error I Ever Debugged
Jul 4, 2020Documenting Design Decisions using RFCs and ADRs
Jun 26, 2020Scaling Release Systems
Jun 20, 2020Ship Early and Ship Often
Jun 14, 2020Getting Started with Electron Application Development for macOS
Jun 7, 2020Picking the perfect Serif typeface
May 31, 2020Bootstrapping a Portable Cypress Setup for Blazing-Fast Browser Tests
May 24, 2020Measuring Velocity: The Case for Electron
May 16, 2020Deno and the future of Node.js
May 9, 2020Building a Testing Culture
Apr 26, 2020Managing Your Infrastructure as Code with Pulumi
Apr 25, 2020Rapidly Setting up GraphQL Data Fetching in React
Apr 12, 2020Building Go Test Suites using Testify
Apr 11, 2020Verifying Asymmetrically-Signed JWTs in Go
Apr 5, 2020Building Composable Go Applications With Interfaces
Mar 29, 2020Conquering Randomness with Composable Go Application Design
Mar 28, 2020Testing Web Applications in Go
Mar 22, 2020Recovering HTTP Handlers In Go
Mar 21, 2020Browser-Only React Components With Suspense
Mar 15, 2020Redesigning My Portfolio for 2020
Mar 8, 2020Configuring Jest Snapshot Resolvers
Mar 1, 2020Real-Time Postgres Change-Streaming With lode
Feb 23, 2020Utilizing the data layer: Deadlock Relations with Deferred Constraints
Feb 16, 2020Utilizing the data layer: Complex UPSERTs in Postgres
Feb 14, 2020Supercharging Jest with Custom Reporters
Feb 8, 2020Utilizing the data layer: Conditional INSERTs in Postgres
Jan 19, 2020Building an Authoritative DNS Nameserver
Jan 5, 2020Global Service Deployments with Anycast and BGP
Dec 28, 2019Goodbye 2019, Welcome 2020
Dec 22, 2019Back to Bare-Metal: Building and Hosting my Metrics
Dec 4, 2019Improving Static Assertions with Snapshot Tests in Go
Nov 17, 2019Scaling Network Concurrency in Go
Nov 3, 2019Understanding Go's context package
Oct 27, 2019Tinkering with Global WireGuard Deployments
Sep 21, 2019Parallelized Batch Processing in Go
Sep 12, 2019A Brief GraphQL Day Bodensee Recap
Sep 1, 2019Handling Concurrent Go Workflows
Aug 17, 2019JavaScript Generators And What They're Used For
Aug 11, 2019Inspecting Kubernetes Deployment Logs with kail
Jul 28, 2019Boost Your Team's DX By Formatting All Git Commits
Jul 11, 2019JAMstack Conf London: That's My Jam!
Jun 26, 2019Retrospective on GraphQL Conf & Prisma Day
Jun 9, 2019Automating my open-source projects with CI/CD workflows
Jun 2, 2019Accessing Kubernetes services locally using kubefwd
May 19, 2019Reaching Consensus: GraphQL Input Unions
May 12, 2019What's Next?
Apr 26, 2019Choosing the Right Go Web Framework
Apr 10, 2019Debugging Google Cloud Pub/Sub services in production
Mar 24, 2019The Lifecycle of Side Projects: Planning & Early Stages
Mar 17, 2019Updating your GitHub status with ghstatus
Mar 3, 2019The State of GraphQL × Go
Feb 28, 2019Setting up Kubernetes Dashboard
Feb 22, 2019Provisioning Kubernetes clusters
Feb 13, 2019Empowering CI/CD workflows with compose-deploy
Feb 9, 2019Simplifying Docker deployments with compose-deploy
Feb 1, 2019Bootstrapping local Kubernetes clusters using kind
Jan 27, 2019Introducing aqueduct
Jan 20, 2019Introducing GraphQL Jaeger tracing middleware
Jan 19, 2019Adding tracing to your GraphQL services with Jaeger
Dec 22, 2018Designing my new portfolio