Skip Navigation code drift

Thunked

Thoughts thought through. Essays on products, leadership, engineering, culture, and more.

2024

  • Mocking AWS at the Network Level

    We use AWS pretty heavily at Taskless, with their compute-on-demand making it easy for us to scale our bi-directional API Gateway from zero to thousands of concurrent requests with no additional effort. It's truly wonderful; that is, until it's time to write tests. The path most

  • A Eulogy for a Pet Where LLMs Persist

    A Little Prince, lost in the era of diffusion models.

2023

  • The End of expo-community-flipper

    With the release of Expo 48, expo-community-flipper (gh) (npm) can finally declare its purpose fulfilled. A year ago, I was trying to debug redux inside of the Chrome Debugger and nearly lost my mind. It wasn't just a bad experience. It was an awful experience, defined by console.

2022

  • Tailwind CSS for Email

    I can no longer count the hours Tailwind saves me. I don't really hate the state of CSS-in-JS. I just find it gets in the way of quickly saying "make this blue, put it in a flex box oriented by row, with the items centered." It&

  • Designing A Time-Based Queue for Serverless

    Building a serverless-friendly queue system continues to be an adventure. Recently, we had to say goodbye to our Redis queues and replace them with something more durable. The journey there involved a lot about time storage, visibility windows, and how the most popular queue solutions solve these problem. So, if

  • Solving a Node.js Memory Leak on Heroku

    There's nothing more frustrating that your node.js app leaking memory. If you're coming here because of Heroku R14 / R15 errors, take some deep breaths, it'll be okay. Heroku's smart enough to swap to disk when this happens, and will kill and

  • GitHub as a CMS

    GitHub's rich GraphQL API gives you a built-in headless CMS

2021

  • Developing React Native with Expo and Flipper

    There’s a lot of great React Native modules out there, but most of them require a custom iOS or Android build, leaving “ejecting” as the only option for Expo users. That changed in SDK >42, when Expo added the ability for Expo Application Services to create custom development builds of your app.

  • Running Expo in Windows Subsystem for Linux (WSL2)

    Windows, meet Expo in Linux; it's about time someone wrote up everything you need to do if you're a Windows developer looking to run Expo. Chances are, you've also got WSL2 running. Here's how it all comes together.

  • Relay Cursors for Database Queries

    Before we had k-ordered ids (and in legacy systems) the sort order needed to be baked into your relay cursors.

  • A Guide to Tailwind CSS in React Native

    React Native is very behind the web when it comes to UI libraries. There’s two likely reasons for this: CSS on the web is easy and the object known as StyleSheet in React Native is not.

  • Complex Hasura Permissions Via Views

    When there's no amount of "or", "and", and "exists" that can make your Hasura permissions simple, pull out the postgres view and simplify a huge part of your permissions query.

2018

  • Reversable Engineering Decisions

    Bad news: most you can undo almost every engineering decision. Good news: that means you should probably just be moving forward.

  • Training vs Coaching

    A question I frequently get is about the relationship and the differences between coaching and training. I don't believe coaching and training are either/or solutions to most engineering leadership problems. When used in the right context, both coaching and training can be powerful tools for building leadership

  • Positive Feedback Matters

    Positive feedback has a larger impact than you think. One in three managers never do it. Whoops.

  • Engineering Management Mistakes

    Engineering management is daunting. Suddenly, you're no longer writing code. You're the one overseeing the team. Also, you're the one about to learn a lot of lessons, fast.

2017

  • Blind References

    When faced with a difficult hiring decision, the least productive thing you can do is begin reaching out to your network in search of an "unvarnished" view of a candidate. These blind, or off-list, reference checks are both useless and dangerous. "He always left early to do

  • RFCs FTW

    The answer to sharing ideas and intents resides in the oldest consensus tool on the internet, the "Request for Comments" (RFC).

  • Introducing Lead SV

    Launching my own consultancy focused on growing a generation of engineering leaders.

  • Reward and Recognize

    Why your spot bonus program might be hurting, not helping. Personal acknowledgement has to supplement cash; we care that our work mattered.

2016

  • SCD Diversity Fund (concluded)

    It should be obvious. We, Silicon Valley, have a diversity problem. A small Cal State fifty miles south of San Jose is doing something about it.

2015

  • Too Many Males

    Women are 50% of the workforce, but only 15% of LinkedIn's new spotlight

  • Redesigns are Hard

    Don't skip the hard parts of the redesign. Put the ads in. Use bad pictures. Use silly text. Be realistic with your design so you can learn its limits.

  • Coding Interviews

    A rant on interviews that don't assess anything useful and a call to assess the parts of the candidate you're really hiring for.

  • The Stairway Problem

    How 12 steps can feel like 12 miles apart - Physical space is one of the most difficult things to overcome if it isn't a part of your DNA.

  • (P)inspiration

    Helping people accomplish something through software. My thoughts on why I decided to join the team at Pinterest.

  • Fix the Status Report

    There are better things for everyone to do on a Friday. The weekly status report is a chore, and it obscures what really matters; answering "why did we focus on what we did?"

  • An Engineer's Manifesto

    When mentoring other developers and managers, I get asked a lot what process I go through when I am picking my battles. To be honest, the one consistent thing I look to is my manifesto. Defined as "a written statement declaring publicly the intentions, motives, or views of its

  • On Take-home Coding

    Trying to find the right value in take-home interviews. Should you do them? How should you do them?

  • Useful git

    These are some of my favorite commands.

  • Reparenting iframes

    If you're playing around with iframes, there's a nasty bug that occurs when you attempt to move the iframe using methods such as appendChild or insertBefore. How nasty the bug is depends on how tolerant your code is of reloading behaviors.

  • Line Numbers in eval

    You should never do this. But "never" is a bit too absolute for engineering

  • Data Liberation for LinkedIn

    Free your data

  • window.postMessage and Internet Explorer

    It started out innocently enough: the LinkedIn Platform needed to run our Professional Plugins on third party sites. To do the basic process of resizing iframes (to fit our plugins), we needed a way to talk across domains.

  • Enhancing for Bugs

    In the days of Internet Explorer 6, it was common to lament the problems of the browser nobody wanted to support. Some of the bugs that developers have uncovered are well documented, some of them not. This falls more into the later camp.

2014

  • Human-Centered Instruction

    When learning & development focuses on learner needs, retention and application go up. There's no real word or phrase for "focus on the learner" hence the human-centered part of instruction.

  • Gulp and Browserify

    How to use Vinyl after gulp-browserify was blacklisted

  • In Memoriam

    Fuck cancer

2011

2008

  • Fake Germanizer

    🆕2020-02-23: This was rescued from the archives of the old felocity.org. As a result, many links in this piece were left pointing to archive.org destinations. I ran into a problem where I needed to guess how something would look in German, without knowing a single drop of German.

2007

  • Just In Time JavaScript

    Web apps are heavy, and wait times suck. For every interaction you build, there's that much more code being added to the project.

  • JavaScript Threading

    Filed under "completely useless trivia", but not alert() seems to run in its own little world.

  • Defining Social Fun

    Belonging makes you an evangelist. An exploration into what makes users passionate and how Maslow and Nevis fit into the idea of how social belonging feeds this loop.

2006

  • Stylizing Form Submits

    For the legacy code around Gaia, we have forms with more than one possible "submit" for an action. The most common case of this is preview and submit buttons we traditionally use in the forums.

  • Transacting Items on Gaia Online, Part 2

    Behind the scenes of the Bank Transaction Manager at Gaia, responsible for escrowing items between accounts on different MySQL shards.

  • Transacting Items on Gaia Online

    Sagas before we really had the right word for it.

  • AJAX Scope in Prototype.JS

    One of the most challenging things I've had to do was create an object that could make an AJAX request, and then internalize the response.

2005

  • Most Minteresting

    I wanted more exposure for the more interesting things on the site I've written. Some articles get a lot more reads than others, and some articles get a lot more comments.

  • sIFR & Floats

    Just fixing a weird issue when sIFR and floats needed to coexist. Your standard collapsing containers. Mostly.

2004

  • phpbb Permissioning

    Currently, I've been doing a lot of work with the way phpbb handles its permissions.