Articles

AI Zealotry
Senior engineers are best positioned to benefit from AI. We're good enough to avoid slop, and there's so much we can accomplish. I wouldn't go back.
Twitter, LinkedIn, and Failing in Public
LinkedIn shows only the final act. We connect to heroes during their struggles, not their victories. The solution: fail heroically in public.
I Walked Across Spain
Reflections from 27 days and 500 miles across Spain. The overlapping physical, social, cultural, and spiritual layers that make this pilgrimage meaningfully different.
Thoughtful Professional Writing
Speaking flows at the speed of thought. Writing forces you to organize first. This is hard on you but easy on your reader.
Transactionalism vs Respect
"Can I ask for your help?" makes me feel like a person who helps people. "I'll pay you back" makes me feel like I'm trading favors. Incentives feel transactional.
Hammers and Nailguns
A nailgun puts nails into wood. A hammer whacks things. Simple tools with humble opinions are more versatile than specialized ones.
Python Support is Socially Complex
When a Python workflow fails, most of the work is diagnosing whose fault it is. The ecosystem's distributed ownership means no one has clear responsibility.
Cloud Computing is Broken
What hunger am I seeing on the ground? Boring shit. People struggle most with the basics of cloud computing. The promise remains undelivered.
Venting and Constructive Communication
Constructive conversation and venting differ by one question: "Will these words help me achieve my goal?" If no, we're probably venting.
SatCamp Retrospective
Satellite imagery's potential is incredible, but companies in this space are struggling. An outsider's first impressions from an unconference in Boulder.
How I Almost Quit My Job, and How Being Selfish Saved Me
When a small amount of your work helps others a great deal, of course you sacrifice. You'd be a monster not to. But your ego can fade in service of your project.
What Does Pangeo 2.0 Look Like?
In 2018 we unveiled a new architecture for scalable cloud Python. It was great, but also fragile and limited. What comes next?
Usage Based Pricing
It was good for a while but became a dead end. The pros, cons, and alternatives for capturing value while making customers feel good about paying.
How GitHub taught me to Micromanage
Open source code review taught me to give intense, detailed feedback. Then I became a manager and learned why that doesn't always translate.
Hiring Sales
We fired the sales team when our product was bad. Now it's good. Finding the right early sales hire is an interesting challenge.
Reddit, Twitter, and LinkedIn Comparison
I pushed the same message to Reddit, Twitter, LinkedIn, and Mastodon and tracked views and engagement. Reddit won by a mile.
Decision Fatigue
When you hit a roadblock, don't ask "what should we do?" Own the problem. Propose a solution. Help your team by carrying the weight yourself.
Laser Eye Correction
From deciding to explore the procedure to having my eyes lasered in two weeks. Long, rambling, and nothing to do with startups or tech.
Performance Reviews
Give critical feedback from voices other than your own. People are different—treat them differently based on need.
SaaS Go-to-Market
A snapshot of where Coiled is on product and GTM, written for internal use but useful for other early-stage SaaS companies.
How I Conduct an Interview
My approach to 45-minute interviews: what I share, what I ask, and how I evaluate candidates. Useful for interviewers or anyone interviewing with me.
Rethinking My Website and Blog
I felt smarter and happier pre-Twitter. I'm turning back to blogging—optimizing for longer attention spans and mixing evergreen with timely content.
Think for yourself
In dynamic environments, historical advice often doesn't apply. Imposter syndrome is appropriate—but so is trusting your own thinking.
Audio-Visual Setup
How we present ourselves has unreasonable effectiveness on perception. An excellent Zoom setup costs $2000 and a day—anyone can achieve the unfair advantage that tall people have naturally.
Meetings
It made a huge difference. I learned that it's easy to spend energy on routine activities, think "I'm doing my job", and be completely wrong.
Stability Bias
By not releasing due to regressions, we accept regressions in reverse. By not fixing confusing APIs, we confuse all future users. Stability has hidden costs.
Offsites
Remote teams accrue alignment debt and interpersonal friction. Offsites rapidly pay down that debt so everyone can go off and work independently again.
Failure
Someone has to pay the psychological cost of uncertainty. I choose honesty, even when it has negative consequences.
Startup Advice
Most advice is wrong—not because advisors are dumb, but because their experiences don't transfer. The wisest person for your situation is probably yourself.
User Valued Work
Developer-valued work is valuable, but only in that it makes us faster at delivering user-valued work. Keep that distinction clear when prioritizing.
Over Grown
Painful, but we moved faster as a result. More smart people doesn't make you go faster. Often the opposite.
SciPy Mission
The SciPy community evolved from accelerating science, to enabling data understanding, to now—making people's lives more comfortable. The mission keeps growing.
Revenue
They care more about valuation than revenue, and only certain kinds of revenue matter. A taxonomy of good and bad revenue from selling open source software.
Small Scope Reviews
A fast review cycle is incredibly valuable. Distinguish obligatory comments that stop regressions from commendable ones that add enhancements. Better is the enemy of good.
Tech Leads
Tech leads steer efforts technically using soft power. It's a really fun role. Here are behaviors that make for a good one.
Startup Metrics
Hockey stick growth and GitHub stars sound great, but the reality is more nuanced. Dask took six years of listening and diligent community service.
Ideal Tweet
Start with a short single-line hook, then deliver actual novel content. People skim—get to the point immediately.
Short attention span
Speaking truth is easy. Getting people to listen is hard. Practical advice on respecting your reader through an attention span budget.
Listen to sell
Resist the urge to answer technical questions. We want to show off how things work, but we often dive too deep before understanding the customer's actual problem.
Senior Engineers
My criteria for senior engineers: handle vague requirements, seek context, connect with stakeholders, take ownership, communicate regularly, handle uncertainty, and take vacations.
Short Blogposts
I encourage colleagues to write blogposts frequently. It informs your community, increases visibility, and focuses you on work relevant to others.
Avoid Indirection
Abstraction has costs. Every layer you add is another place readers have to look. Sometimes the clearest code is the most direct.
Maintainers
Best practices for open source maintenance: the difference between developers, reviewers, and maintainers, and how to spend your limited time well.
Why I Avoid Slack
Real-time chat makes everyone feel productive but does little for long-term consensus building. I prefer public, permanent, searchable, cross-referenceable discussions.
Craft Minimal Bug Reports
Maintainers' willingness to help you for free is optional. Minimal, complete, verifiable examples take 10-30 minutes but dramatically increase your chances of getting help.
Write Dumb Code
We should write code that novice programmers can understand without explanation. After maintaining code, I think differently about showing off what I know.
Biased Benchmarks
Fair benchmarks are surprisingly difficult even with best intentions. We judge others by our objectives, fail to use their projects with expertise, and gravitate toward cases where we excel.
Write Tests
Testing feels like flossing—theoretically important. But if you contribute to long-term software with many collaborators, your tests will outlive your source code several times over.
Dictionaries v. Objects
The mechanisms we choose to store and share data strongly impact the longevity of the code we write. When do we transition from dicts to custom classes?