If you have comments, questions, or feedback, you can email my personal email. To get new posts and support my work, subscribe to the newsletter. There is also an RSS feed.
- 2026-02-02: Some good English word datasets
- 2026-01-26: Making niche solutions is the point
- 2026-01-19: 3D printing my laptop ergonomic setup
- 2026-01-12: Bayes theorem and how we talk about medical tests
- 2026-01-05: Reflecting on 2025, preparing for 2026
- 2025-12-01: A new system for organizing my writing and projects
- 2025-11-24: Automating updates to a digital vigil
- 2025-10-20: Interview with a new hosting provider founder
- 2025-09-15: Custom for designing, off-the-shelf for shipping
- 2025-08-18: Visualizing distributions with pepperoni pizza (and javascript)
- 2025-07-21: Covers as a way of learning music and code
- 2025-06-30: That boolean should probably be something else
- 2025-06-23: Proving that every program halts
- 2025-05-05: Taking a break
- 2025-04-28: Measuring my Framework laptop's performance in 3 positions
- 2025-04-21: The five stages of incident response
- 2025-04-14: Python is an interpreted language with a compiler
- 2025-04-07: Typing using my keyboard (the other kind)
- 2025-03-31: Shadowing in Python gave me an UnboundLocalError
- 2025-03-24: Big endian and little endian
- 2025-03-17: Who are your teammates?
- 2025-03-10: Stewardship over ownership
- 2025-03-03: Some things that make Rust lifetimes hard to learn
- 2025-02-24: Your product shouldn't require showing my legal name
- 2025-02-17: Can I ethically use LLMs?
- 2025-02-10: What's in a ring buffer? And using them in Rust
- 2025-02-03: Summarizing our recommendations for software documentation
- 2025-01-27: Bright lights in dark times
- 2025-01-20: My writing process, and how I keep it sustainable
- 2025-01-13: Beginning of a MIDI GUI in Rust
- 2025-01-06: Great things about Rust that aren't just performance
- 2024-12-30: Reflecting on 2024, preparing for 2025
- 2024-12-23: Feel, don't think
- 2024-12-16: Estimating projects sells them short (and that's okay)
- 2024-12-09: Parsing MIDI messages in Rust
- 2024-12-02: Evolving my ergonomic setup (or, my laptop with extra steps)
- 2024-11-25: Terminology isn't universal
- 2024-11-18: Using Talon in a game jam
- 2024-11-11: Supporting coworkers, employees, and friends in this time
- 2024-11-04: Parsing arguments in Rust with no dependencies
- 2024-10-28: They want your ethics for $105
- 2024-10-21: Debugging my wife's alarm clock
- 2024-10-14: Making Rust builds fail from YAML config mistakes
- 2024-10-07: Licensing can be joyful (and legally dubious)
- 2024-10-06: Asheville
- 2024-09-30: Rust needs a web framework for lazy developers
- 2024-09-23: What I tell people new to on-call
- 2024-09-16: Personnel update
- 2024-09-09: Making progress on side projects with content-driven development
- 2024-09-02: Reasons to write design docs
- 2024-08-26: Using search as a primary datastore since the docs said not to
- 2024-08-19: Sometimes, I can't talk
- 2024-08-12: You should make a new programming language
- 2024-08-05: First impressions of Gleam: lots of joys and some rough edges
- 2024-07-29: Integrate rest into your work and practice
- 2024-07-25: Resting is hard
- 2024-07-22: TIL: testing in the future using the faketime command
- 2024-07-15: Approximating the Sierpinski Triangle on my CNC
- 2024-07-08: Why I kept my startup job for seven years (and counting)
- 2024-07-01: Testing a WebSocket that could hang open for hours
- 2024-06-29: TIL: 8 versions of UUID and when to use them
- 2024-06-24: If it never breaks, you're doing it wrong
- 2024-06-17: What's hidden behind "just implementation details"
- 2024-06-10: Affirmations for bloggers
- 2024-06-03: My portable ergonomic setup
- 2024-05-27: Instead of "auth", we should say "permissions" and "login"
- 2024-05-20: Rust's iterators optimize nicely—and contain a footgun
- 2024-05-13: Getting buy-in to get things done
- 2024-05-06: I'm hopeful but wary of "empathic" AI
- 2024-04-29: Gaining depth perception
- 2024-04-22: The only two log levels you need are INFO and ERROR
- 2024-04-15: The origin and virtues of semicolons in programming languages
- 2024-04-08: It's getting hard to use and recommend Firefox, I'm afraid for the free web
- 2024-04-01: Decaf is good, actually
- 2024-03-31: Start to finish on self-publishing a technical book
- 2024-03-25: When to use cute names or descriptive names
- 2024-03-18: Procrastinating on my side project by torturing databases
- 2024-03-14: Achieving awful compression with digits of pi
- 2024-03-11: Work on tasks, not stories
- 2024-03-04: Building a demo of the Bleichenbacher RSA attack in Rust
- 2024-02-26: "Help, I see a problem and no one is prioritizing it!"
- 2024-02-19: Go slow to go fast
- 2024-02-12: Great management and leadership books for the technical track
- 2024-02-05: Too much of a good thing: the trade-off we make with tests
- 2024-01-29: Automating my backups with restic and anacron
- 2024-01-21: I'm scared, and hopeful, and you can help
- 2024-01-19: The most important goal in designing software is understandability
- 2024-01-15: RSA is deceptively simple (and fun)
- 2024-01-08: Are any of your features the steak on the menu?
- 2024-01-06: TIL: enabling features on transitive dependencies (Rust)
- 2024-01-01: I found some of my first code! Annotating and reflecting on robotics code from 2009.
- 2023-12-29: Reflecting on 2023, preparing for 2024
- 2023-12-22: My reference was dropped, why is the compiler complaining about multiple borrows?
- 2023-12-18: Three days of Advent of Code in Hurl
- 2023-12-15: Lessons from implementing Hurl
- 2023-12-11: Insights and questions from the original waterfall paper
- 2023-12-04: Profiling Rust programs the easy way
- 2023-11-27: Why do companies hire people to be idle a lot of the time?
- 2023-11-19: Building a digital vigil for those we've lost
- 2023-11-13: Introducing Yet Another Rust Resource (or YARR!)
- 2023-11-06: Accessibility is a requirement, not a feature
- 2023-10-30: That time I wrote malware and got caught
- 2023-10-23: Unpacking some Rust ergonomics: getting a single Result from an iterator of them
- 2023-10-16: Estimates are about time, so let's cut to the chase
- 2023-10-09: A student asked how I keep us innovative. I don't.
- 2023-10-02: What would a web app canary look like?
- 2023-09-25: Making it fast shouldn't be the last step
- 2023-09-18: "Help, iterators made my Rust program slower!"
- 2023-09-11: A systematic approach to debugging
- 2023-09-04: OpenAI fixed their unsafe policy around names
- 2023-08-28: Changing my relationship with GitHub Copilot
- 2023-08-21: The phrase "good enough" isn't fit for purpose
- 2023-08-14: Writing a basic code formatter
- 2023-08-11: Fiction as a lens into technological change
- 2023-08-07: A few weird ways of displaying git hashes
- 2023-07-31: Throw away your first draft of your code
- 2023-07-24: Recovering from a lost disk: how I setup, backup, and restore dev machines
- 2023-07-17: Writing Hurl's grammar, twice
- 2023-07-10: Impact of remote-code execution vulnerability in LangChain
- 2023-07-03: Using git mailmap when names change (or you mess up your email)
- 2023-06-26: Write more "useless" software
- 2023-06-19: Introducing Hurl, a terrible (but cute) idea for a language
- 2023-06-12: Optimize sprint points to get nowhere fast
- 2023-06-05: Units in Go and Rust show philosophical differences
- 2023-05-29: Email addresses are not primary user identities
- 2023-05-22: We deserve to know if something was generated by AI
- 2023-05-15: It's easier to code review Rust than Python
- 2023-05-10: Visualizing the FIDE World Chess Championship
- 2023-05-08: Your app doesn't need to know my gender
- 2023-05-01: You should be using hackdays to supercharge your roadmap
- 2023-04-24: Rust allows redeclaring local variables to great benefit
- 2023-04-17: Scheduling visits from the muse
- 2023-04-10: Feature flags and authorization abstract the same concept
- 2023-04-03: Coding with LLMs can lead to more and better software
- 2023-03-27: Different topologies for an org chart, wrong answers only
- 2023-03-20: Betraying vim for the IDEs of March
- 2023-03-14: Approximating pi using... a cake?
- 2023-03-06: Getting people to tell you you're wrong
- 2023-02-27: If software engineering roles were chess pieces, what would they be?
- 2023-02-20: What's in my software engineering tool belt?
- 2023-02-13: A systems design perspective on why chess.com's servers have been melting
- 2023-02-06: What's the difference between references and pointers in Rust?
- 2023-01-30: Does technology have a right to exist? (No.)
- 2023-01-23: Speeding up queries 1000x by sorting my bitmaps
- 2023-01-16: Why Rust's learning curve seems harsh, and ideas to reduce it
- 2023-01-09: Names should be cute, not descriptive
- 2023-01-02: A confusing lifetime error related to Rust's lifetime elision
- 2022-12-28: Reflecting on 2022, Looking Ahead to 2023
- 2022-12-19: return "reflections on a batch";
- 2022-12-16: Working with Rust in (neo)vim
- 2022-12-10: RC Week 12: What's Next, and Speedrunning Crafting Interpreters
- 2022-12-07: Building Molecule Reader in one day
- 2022-12-03: RC Week 11: Learning is best when multiplayer
- 2022-12-01: Tech systems amplify variety and that's a problem
- 2022-11-25: RC Week 10: Thankful for Family, Missing my Family
- 2022-11-22: Measuring the overhead of HashMaps in Rust
- 2022-11-19: RC Week 9: Parallels of Proofs and Programs
- 2022-11-16: I'm moving my projects off GitHub
- 2022-11-12: RC Week 8: Life happens, and databases are hard
- 2022-11-08: Open source licenses as a reflection of values
- 2022-11-04: RC Week 7: Four habits to improve as a programmer
- 2022-11-04: Paper review: C-store
- 2022-10-29: RC Week 6: Halfway done, wrote a parser!
- 2022-10-28: My first impressions from a few weeks with Lean and Coq
- 2022-10-27: Paper review: Concurrency Control Performance Modeling
- 2022-10-21: RC Week 5: Wrapping up projects and starting a new one
- 2022-10-18: Alpha-beta pruning illustrated by the smothered mate
- 2022-10-14: RC Week 4: Gratitude and emotions
- 2022-10-11: Paper review: The Gamma Database Project
- 2022-10-08: RC Week 3: Returning to Math
- 2022-10-06: Starting my (overkill) homelab
- 2022-10-01: Paper Review: Architecture of a Database System
- 2022-09-30: RC Week 2: Pairing is Awesome
- 2022-09-28: Rounding in Python
- 2022-09-24: RC Week 1: Getting Unexpected Extrovert Energy
- 2022-09-11: I'm taking a sabbatical and attending Recurse Center!
- 2022-07-09: Running an Effective Book Club at Work
- 2021-07-03: Where are we going from here? Software engineering needs formal methods
- 2021-02-01: Drawbacks of developing in containers
- 2021-01-11: Lessons from my first (very bad) on-call experience
- 2021-01-04: Load testing is hard, and the tools are... not great. But why?
- 2020-12-22: Tech salaries probably aren't dropping from remote work
- 2020-12-08: Solving my fun, frustrating docker-machine error
- 2020-10-14: What's "good" code and does it matter?
- 2020-07-26: Where is the source code for ping?
- 2020-05-15: Parallel assignment: a Python idiom cleverly optimized
- 2020-04-29: Terminology matters: let's stop calling it a "sprint"
- 2019-02-27: Gmail's "Smart Compose" feature should be considered harmful
- 2018-12-31: Books I Read in 2018
- 2018-11-02: Kill the crunch time heroics
- 2018-10-26: Avoid multitasking to write better code
- 2018-09-14: Distractions Cause Bad Code
- 2018-09-07: Don't Disrupt Things; Fix Them
- 2018-08-31: Even bad estimates are valuable if you use them right
- 2018-08-23: Topologies of Remote Teams
- 2018-06-02: How I Work Remotely
- 2017-09-02: The bittersweet end of a year of independence
- 2017-08-07: On Estimates, Time, and Evidence
- 2017-07-30: PyOhio
- 2017-01-21: Growing Teams and Baking Bread
- 2016-11-12: Functional Programming and Big Data
- 2016-10-12: Security of the Infinity Ergodox on Mac OS
- 2016-09-26: Consider Part-Time Work
- 2016-08-21: Starting a New Chapter
- 2016-04-05: [Talk] Scaling Graphs
- 2016-03-15: [Review] "The Circle" by Dave Eggers
- 2016-03-07: Surveillance, Schools, and Our Children
- 2016-02-19: Fight Burnout, Go For a Run
- 2015-07-13: [Review] "Data and Goliath" by Bruce Schneier
- 2015-03-08: In Defense of the Midwest
- 2015-02-22: How Cryptology Can Fix Identity Theft
- 2015-02-22: The Beginning of Something
Want to become a better programmer?
Join the Recurse Center!
Want to hire great programmers?
Hire via Recurse Center!