Technical Writing

Posts about writing books and articles, the publishing process, documentation, and the craft of explaining technical things clearly.

2026-05-11A Note on LLMs
2026-03-15Distributed Systems Design by Example
2026-02-08104 Days
2025-08-15Productivity Workshop Ideas
2025-04-14No More Encyclopedias
2025-04-12Research Threat Models
2024-11-24Unfinished Projects
2024-10-28What Would Be in a New AOSA?
2024-09-27First Draft of the Webonomicon
2024-09-12Labels for Technical Writing Projects
2024-09-06How I Explain Code
2024-05-12Reviews Are Coming In
2024-05-11Volume Two
2024-05-07Code for Thought Interview
2024-04-27Software Design by Example in Python 27: Conclusion
2024-04-26Software Design by Example in Python 26: A Debugger
2024-04-25Software Design by Example in Python 25: A Virtual Machine
2024-04-24Software Design by Example in Python 24: Undo and Redo
2024-04-23Software Design by Example in Python 23: A File Viewer
2024-04-22Software Design by Example in Python 22: Serving Web Pages
2024-04-21Software Design by Example in Python 21: Transferring Files
2024-04-20Software Design by Example in Python 20: A Package Manager
2024-04-19Software Design by Example in Python 19: A Build Manager
2024-04-18Software Design by Example in Python 18: A Database
2024-04-17Software Design by Example in Python 17: Binary Data
2024-04-16Software Design by Example in Python 16: Object Persistence
2024-04-15Software Design by Example in Python 15: Performance Profiling
2024-04-14Software Design by Example in Python 14: Page Layout
2024-04-13Software Design by Example in Python 13: A Code Linter
2024-04-12Software Design by Example in Python 12: A Template Expander
2024-04-11Software Design by Example in Python 11: An HTML Validator
2024-04-11What I Need in a Static Site Generator
2024-04-10Software Design by Example in Python 10: A File Archiver
2024-04-09Software Design by Example in Python 9: Protocols
2024-04-08Software Design by Example in Python 8: Functions and Closures
2024-04-07Software Design by Example in Python 7: An Interpreter
2024-04-07In Search of Balls and Sticks
2024-04-06Software Design by Example in Python 6: Running Tests
2024-04-05Software Design by Example in Python 5: Parsing Text
2024-04-04Software Design by Example in Python 4: Matching Patterns
2024-04-03Software Design by Example in Python 3: Finding Duplicate Files
2024-04-02Software Design by Example in Python 2: Objects and Classes
2024-04-01Software Design by Example in Python 1: Introduction
2024-03-21NWIT Retrospective
2024-03-17Governing a Book
2024-03-15Thinking About Lessons
2024-03-14Promo Code
2024-03-07Labels
2024-03-03Current Projects
2024-02-17Concurrent Examples
2024-02-14A Pair of Interviews
2024-02-03First Draft of SQL Tutorial
2024-01-31Lesson Log
2024-01-24Working Backwards
2024-01-23The Votes Are In
2024-01-20Including Boilerplate Files in Jekyll
2024-01-20Not on the Shelves (2024 Edition)
2024-01-17The First Six Questions
2024-01-03The Other Examples
2023-12-10Research Software Design by Example
2023-11-21One Damned Thing After Another
2023-10-22Building a Ramp
2023-10-01Software Design by Example (Python edition) Has Shipped
2023-09-13Adventures in Publishing
2023-08-10Language and Library Features for Teaching
2023-08-10Writing a Technical Book
2023-07-23The Loneliness of the Long Distance Writer
2023-07-21Resurrecting the Tidynomicon
2023-07-20Explaining Code
2023-07-16Tooling a Book
2023-07-12Software Design by Example (Python edition) Now in Beta
2023-07-06Software Design in Python: Status Update
2023-06-19Eleven Tips for Organizational Change
2023-06-13Making a Book
2023-06-12Chapter Dependencies
2023-06-12Book Extensions
2023-04-10Dressed in Hand-Me-Down Clothes
2023-03-24Code Complexity
2023-03-12Building a Book
2023-03-12Rethinking Design Examples
2023-02-06A Book I Overlooked
2023-01-29Software Design by Example Summary
2023-01-29Styling Diagrams for Software Design by Example
2023-01-29Would You Take This Class?
2023-01-27Software Design by Example: Conclusion
2023-01-26Software Design by Example 20: Debugger
2023-01-25Software Design by Example 19: Virtual Machine
2023-01-24Software Design by Example 18: Package Manager
2023-01-24Commands I Use
2023-01-23Software Design by Example 17: Module Bundler
2023-01-20Software Design by Example 16: Documentation Generator
2023-01-19Software Design by Example 15: Code Generator
2023-01-18Software Design by Example 14: Style Checker
2023-01-17Software Design by Example 13: Module Loader
2023-01-16Software Design by Example 12: File Interpolator
2023-01-14Do These Tools Exist?
2023-01-13Software Design by Example 11: Layout Engine
2023-01-12Software Design by Example 10: Build Manager
2023-01-11Software Design by Example 9: Page Templates
2023-01-10Software Design by Example 8: Parsing Expressions
2023-01-09Software Design by Example 7: Pattern Matching
2023-01-06Software Design by Example 6: Data Tables
2023-01-05Software Design by Example 5: File Backup
2023-01-04Software Design by Example 4: Unit Testing
2023-01-03Software Design by Example 3: Asynchronous Programming
2023-01-02Software Design by Example 2: Systems Programming
2023-01-01Software Design by Example 1: Introduction
2022-12-28First Copy
2022-12-17The Compassionate Programmer
2022-12-01Software Design in Python Glossary
2022-11-30What I Want for Code in Textbooks
2022-11-21Software Design by Example Personas
2022-11-09Getting Closer
2022-10-24Software Design by Example
2022-10-02Empirically Minimal
2022-06-20How to Write a Technical Book (Part 2)
2022-06-20Dev Ed Book Club
2022-06-19How to Write a Technical Book
2022-05-08A Language for Teaching
2022-04-30Four Books I'm Not Writing (Plus One)
2022-04-21Software Design by Example
2022-02-2512 Quick Tips for Software Design
2021-11-23Not What I Set Out to Do
2021-09-23More Thoughts on Document Compilers
2021-05-17Two Books
2021-04-17Choose Your Own Adventure
2021-04-17You Say Dumbing Down, I Say Inviting In
2021-04-17Building a Book (Part 3)
2021-03-10Building a Book (Part 2)
2021-03-04Staying Safe Online
2021-02-10Building a Book
2021-01-25How I Write a Technical Book
2021-01-18Good Enough Teaching
2021-01-17The Page Is Not The Lesson
2021-01-07Steps in Order
2020-11-02A Lightweight Process for Lesson Teams
2020-10-12Circular Imports
2020-09-14We're Creating the Future
2020-09-13Static Lesson Generators
2020-09-10Ten Quick Tips for Teaching with Participatory Live Coding
2020-09-01What Every Community Needs
2020-02-06JavaScript for Data Science
2019-12-20Terms
2019-11-03Ten Simple Rules That Are Missing
2019-10-25Teaching Tech Together Is Out
2019-08-08Documentation Types
2019-06-24Chapter Summaries
2019-06-15Ten Quick Tips for Delivering a Programming Lesson
2019-05-04In the Classroom
2019-04-27From Textbooks to Notebooks and Back
2019-04-24Ten Quick Tips for Reviewing Lessons
2019-04-16What Docs When
2019-04-12Ten Quick Tips for Creating an Effective Lesson
2019-04-10What Docs and When
2019-03-12Reviewing Lessons
2019-02-11Examples Wanted for Code Review
2019-01-26The Elements of Programming Writing Style
2019-01-06Not on the Shelves (2019 Edition)
2018-12-14No Straight Pipeline
2018-12-13A Story Line Game for Teaching
2018-12-12JavaScript versus Data Science
2018-10-26Formatting Functions
2018-10-24Two Columns
2018-10-18Four Forms of Documentation
2018-09-16Ten Simple Rules for Creating an Effective Lesson
2018-09-04Two Courses
2018-08-18Ten Simple Rules for Creating an Effective Lesson
2018-08-13Authoring
2018-07-15Teaching Tech Together
2018-04-28Version 3 Feedback
2018-04-01The Undergraduate Software Project Guide
2018-03-24Analog is More Satisfying
2018-03-20Comments Sought on the Plan for Version 3 of 'How to Teach Programming'
2018-03-11Wanted: A Tool for Figure Labeling Exercises
2018-03-03Collaborative Lesson Development
2018-02-18Teaching Programming in the Wild
2017-12-24Petzold's Rules Revisited
2017-06-22Good Enough Practices in Scientific Computing
2017-05-31How to Teach Programming (And Other Things)
2016-10-20Ten Simple Rules for Digital Data Storage
2016-01-28A New Version of 'Lessons Learned'
2016-01-21Our Introduction to Git Has Been Published
2015-09-06Unwritten and Undone
2014-09-16Mentioned in the Paris Review
2014-02-19Lessons Learned Has Been Published
2014-01-15Publishing on the Web
2014-01-07'Best Practices' Has Been Published
2013-06-13Problems with Pandoc
2012-10-03Best Practices for Scientific Computing
2012-02-22Converting PowerPoint to SVG: Help Needed
2011-10-19American Scientist Article on Empirical Studies of Software Engineering
2011-08-25AOSA Volume 2 Roster
2011-07-11Architecture of Open Source Applications Webinars July 13 and 20
2011-06-26Architecture Stats
2011-06-15Mostly Pleased, But…
2011-06-11Now Available on Kindle
2011-06-07Blueprints Are Not Architecture
2011-06-04Thanks, Google!
2011-06-02T Plus 10 Days
2011-05-3185K
2011-05-29Coming Up Next (We Hope)
2011-05-28You Doesn't Exist
2011-05-28So What's It Like Publishing a Book Yourself?
2011-05-26How We Got Here, and Where We're Going
2011-05-23The Architecture of Open Source Applications is Now Available
2011-05-19Beta Book
2011-05-06The Architecture of Open Source Applications
2011-04-28Just a Couple of Weeks Away
2011-04-08Table of Contents
2011-03-07Literate Programming
2011-01-20AOSA Update
2010-12-30In the Home Stretch
2010-12-14Presents for the Holidays
2010-11-30We're Number Six!
2010-11-22Michael Feathers on 'Making Software'
2010-10-20Give The Patrons What They Want
2010-10-08'Making Software' Covers
2010-07-16Making Software Now Available on Rough Cuts
2010-05-23Word Is Spreading
2010-05-20The Architecture of Open Source Applications
2010-01-12Quiet Time
2010-01-10Code vs. Messages
2009-11-26Feedback on the Python Book
2009-11-24Greatest Hits
2009-11-18Special Issue of Computing in Science and Engineering
2009-10-23Pictures in Pages
2009-10-21Creating New Niches
2009-10-17My Lack of Artistic Ability is a Real Handicap
2009-10-05Portals Paper Online
2009-09-10New Book Project
2009-08-21Tools for Teams
2009-08-06American Scientist Article on How Scientists Use Computers
2009-05-13A Package Just Arrived
2009-05-12Suitable for High School Students
2009-05-12Beautiful Testing
2009-05-05'Practical Programming' Is Available
2009-03-15Russian Version of Beautiful Code
2009-01-21Text Is Still King
2009-01-21Intellectual Infidelity
2009-01-13When Is A Book Finished?
2008-10-31It's Not You, It's Me
2008-10-05Another Check for Amnesty International
2008-09-18If It's on the Web…
2008-07-30Please Pay For Your Copy of Beautiful Code
2008-07-25Name This Book!
2008-05-05Those Who Will Not Learn From History…
2008-05-03We're Big In Japan
2008-04-21Someone's a Fan
2008-03-27Beautiful Code Panel
2008-03-06Conservation of Happiness
2008-03-06Beautiful Code Wins Jolt Award
2008-03-04Beautiful Code Panel at SD West
2008-03-04Writing Is a Drug
2008-02-06The First Check
2008-01-09I've Been Amazoned
2008-01-08Apparently We're Doing Well
2008-01-08Where the Puck Is, Part 5
2007-12-20Beautiful Code Nominated for Jolt Award
2007-12-09Switching to Zep
2007-11-10We're Number Ten!
2007-10-17Beautiful Code Sales
2007-09-10Russian and Korean
2007-09-01Short Stories Are a Form of Their Own
2007-08-29More Beautiful Code News
2007-08-07A Review and an Explanation
2007-07-30Udell on Beautiful Code (and 'narrating the work')
2007-07-18Number One in Programming
2007-07-11Matt Doar Likes Beautiful Code
2007-07-07Beautiful Code Is Number 3
2007-06-26First Sightings
2007-06-19The Software Project Coloring Book
2007-06-18Lack of Female Authors in Beautiful Code
2007-06-09Home Stretch for Beautiful Code
2007-03-27Beautiful Code: Chapter by Chapter
2007-03-10Beautiful Code
2007-02-19Bitten Again
2006-12-07Writing a Book
2006-11-30Not on the Shelves (Version 3)
2006-08-07Naive SQL(ite) Question
2006-07-30Update on Extensible Programming
2006-07-19Books I Want Someone to Write #23
2006-01-03Petzold's Rules for Writing a Technical Book
2005-08-22Dawson and Kerr in DDJ
2005-06-23Jon Udell likes Data Crunching
2005-06-20Another DDJ Editorial
2005-06-13Selling Open Source
2005-06-10Data Crunching Article on O'Reilly Network
2005-04-25Data Crunching
2005-03-17Jolt Awards 2005
2005-01-18Extensible Programming Slashdotted (Unfortunately)
2004-10-08Open Source, Cold Shoulder
2004-10-06Ten Big Ones