About
I live with my wife in Seattle, Washington. We enjoy reading in cafes or a quiet bar, walking the Earth, strength training, and observing trees and other plants.
Professional info
I design and develop software for fun and professionally. In the past, I worked as a software engineer at Adaptive Biotechnologies and as a software developer on the Beacon team at Epic.
I enjoy exploring difficult problems, working to understand them, and building solutions. Computers and software are powerful tools that provide incredible leverage. They put all sorts of previously inaccessible problems within reach, and that’s exciting to think about!
When writing software for production use, I value reliability, performance, clarity, and frugality. I do my best to be pragmatic and focus on solving the right problems with the simplest solutions possible.
I like working on projects that have a real-world impact with teammates who care deeply about their work. Environment and team dynamics significantly affect the quality of software produced. Here are some beliefs about teams and organizations that are important to me:
- Those writing the software should remain close to those using the software. The more layers between them, the more painful the software becomes to use.
- Speed of iteration in development is important but requires constant upkeep and investment. Entropy and friction accumulate quickly in all aspects of development.
- A culture of good documentation is a wonderful asset.
- Pair programming is an excellent way to rapidly refine ideas and transfer understanding.
- At all levels, a culture of respect, honesty, and good faith feedback are invaluable. Every problem is ultimately a people problem, and a healthy culture makes everything run more smoothly.
Before working in the software industry, I studied probability and stochastic processes at the University of Wisconsin, where I received my Ph.D. in Mathematics under Benedek Valkó. Here are a few lessons I’ve taken from doing mathematical research that apply directly to software engineering:
- Clearly defining and framing a problem is often the most important step in finding a solution.
- Finding the right framing requires experimentation and iteration. Committing to solutions without adequately exploring the problem space invites trouble.
- Getting the details right is crucial. Little things can make or break a project.
About the site
The site is hosted on NearlyFreeSpeech. I’ve been hosting sites with them for over a decade now and have nothing but good things to say. Their integrity, fair pricing, and idiosyncratic way of doing things appeals to me.