Welcome to foldl

I’m in the middle of a website redesign, but all of the old (often embarrassingly poorly written) content is still here.

Recent posts

Asking useful questions
In this post I explain why some questions are more useful than others, and how to ask better questions. Asking excellent questions is an important skill that improves the outcome for anything you work on. The best questions are specific, leverage existing mental models, yet force you to think beyond what you currently know by evaluating problems from different perspectives. How do good questions improve the outcome for anything you work on?
Serendipity is a bug
Think of a time when you were walking in the hallway or grabbing coffee in the kitchen and chanced upon colleagues discussing a project that impacted you, which you were previously unaware of. Learning about the project is great, but it’s hard to argue that this sort of chance encounter is a good way to learn important information. In this post, I explain how serendipitous communication is an organizational bug and point out an approach that improves how information flows in your organization.
Currently Reading
I love to read! I also have a “bad” habit of reading four or five books at a time. If you’re ever curious what I’m currently reading, this is an up-to-date record of the half-finished books scattered around my home. Make it Clear A collection of bite-sized chapters about effective communication from a long-time MIT professor. Thus far it’s been excellent, although much of the content focuses on presentations which are not relevant to me right now.
Skolem and existential types
In this post I explain what skolem variables are and how they relate to existential quantification. After reading this, you should have an intuition for how skolems work and why existential types are a natural extension from skolems. Lots of talk about existential types lately A couple of months ago a coworker of mine gave a talk on using existential types to address the expression problem. The talk was great and engaging, and provided a nice refresher on working with existentials - this isn’t something I use daily.
Build your very own ban hammer
In this post, I describe how to implement a ban button in a web application with minimal boilerplate. This is one of those features that shouldn’t be used often, but when you need it, you need it. The requirements for a useful user ban are simple and straightforward; prevent them from doing anything else on the application. You can break that down into two parts. First, prevent them from doing anything else right now.
Using D3 on Hugo pages via Shortcodes
In this post, I explain how to easily embed one or more D3 visualizations directly into Hugo page content. Embedding D3 content Hugo posts with Shortcodes Using D3 on any page requires loading the D3 library and a script containing the D3 code you want to run. Both of those tasks require adding <script> tags to the page, so you’ll need some way to add a pair of script tags. Additionally, you probably don’t want the D3 code to mount its visualization directly to the page’s body, so you’ll need a target element somewhere in the DOM.
Understanding variability in Heroku dyno performance
Heroku is a great platform if your app conforms to their expectations, but their dyno abstraction is somewhat leaky. It is surprisingly easy to deploy an application that behaves differently than you’d expect despite their documentation’s warnings about shared CPUs. In this post, I share some research on the performance/behavior of their various dyno classes and how I think about selecting dynos for different workloads. If you’re familiar with Heroku’s platform, I suggest skipping ahead to exploring CPU-intensive workloads.
Debugging Page Rendering
Debugging rendering issues is a bit of a black art. Doing so effectively requires understanding the browser’s critical rendering path along with how to use a sufficiently powerful debugger. This article aims to explain the basics of the critical rendering path - although there are far better resources available - as well as how to use Chrome’s debugger to identify the issue. A primer on the Critical Rendering Path After your browser requested this webpage it began a complex dance between three interconnected processes in order to process the HTML & ultimately render a page in the browser window.
Hiring Specialists
In this post I want to talk about how to hire novel specialists. There have been thousands of pages already written on hiring in-general, and I don’t have anything to add there. However, twice in my career I’ve needed to hire a novel specialist into the organization to bring in new skills. I’m defining novel to mean: someone with highly technical skills that your current organization does not have the capability to evaluate effectively.
Hunting for a match
This post continues the series of interview problem breakdowns. In this series, I attempt an interview problem from somewhere on the internet that I have never seen before and share all the details with you. I set a limit of one hour for the initial attempt, then follow up with a correct solution regardless of how long it takes. Hunting for a match With all the changes and a new schedule for my toddler its been difficult to find the time to work on these challenges In fact, this is the first problem I’m attempting under “lockdown”.