Blog

Posts on software development, careers, and craft.

Using Codex today instead of Claude Code

Using Codex today instead of Claude Code. I like how concise the output is. I can easily do diffs by just expanding next to each impacted file. And...

My big frustration with skills is they're not consistently invoked

My big frustration with skills is they're not consistently invoked. In this post, Vercel saw the same issue. Their solution? Put a compressed index...

Excellent post

Excellent post. Orchestrating multiple agents at once is tricky and the DX could certainly be better. But my take is, I typically don't need to run...

Problem: Generating code via AI may lead to skill atrophy and code I don't...

Problem: Generating code via AI may lead to skill atrophy and code I don't understand. 4 solutions: 1. Use Claude's /output and select "Explanatory...

I keep improving my agentic feedback loop

I keep improving my agentic feedback loop. A feedback loop is critical because it helps the coding agent see if it made any mistakes. My feedback l...

Prediction: Frameworks will start shipping official skills

Prediction: Frameworks will start shipping official skills. Vercel is already shipping handy React skills, but they're not included in the Next.js...

Problem: You want to share a skill with people using different agents, not...

Problem: You want to share a skill with people using different agents, not just Claude. Solution: Use the add-skill npm package. Vercel used the ad...

Woah, Vercel just released the React Best Practices skill

Woah, Vercel just released the React Best Practices skill. Looks super handy. Love the idea of encapsulating all this knowledge in a single skill....

You've probably heard of the BDD testing style, using Given, When, Then

You've probably heard of the BDD testing style, using Given, When, Then. Just saw a test suite using this style, but calling well-named functions p...

Problem: Our team uses many different AI coding tools, so where do we put...

Problem: Our team uses many different AI coding tools, so where do we put our instructions? Maintaining separate Claude, Copilot, and Cursor instru...

Problem: “you could have AI write/maintain your traditional E2E tests, but i...

Problem: “you could have AI write/maintain your traditional E2E tests, but i promise they'll quickly miss CSS selectors” Solution: Don’t use CSS se...

With agent instructions files like http://CLAUDE.md, it's tempting to add...

With agent instructions files like http://CLAUDE.md, it's tempting to add lots of detailed guidelines. But, I only add to the instructions file as...

Problem: I’d like to be able to check on or work with my laptop’s Claude or...

Problem: I’d like to be able to check on or work with my laptop’s Claude or Codex instance via my phone. Solution: Happy. Jump right into an existi...

Last month I enjoyed "Advent of Claude: 31 Days of Claude Code"

Last month I enjoyed "Advent of Claude: 31 Days of Claude Code". The author just published this single blog post with all the tips in one spot: htt...

Problem: In Claude Code, when should I create a custom slash command vs a skill

Problem: In Claude Code, when should I create a custom slash command vs a skill? Solution: Often either works. But, create a slash command when you...

Problem: I want Claude to use Chrome

Problem: I want Claude to use Chrome. Solution: Here's 3 options and when I use each: 1. Playwright MCP – Use as primary cross-browser testing tool...

AI is an accelerator

AI is an accelerator. So, bad guardrails = bad code, faster. Useful guardrails: -Types -Tests -Linting -Auto-formatting -AI reviews -Clear definiti...

Some people run multiple coding agents at once

Some people run multiple coding agents at once. But I'm skeptical - is it worth it? When coding with AI assistance, human inspection and approval i...

Problem: I want to run multiple agents at once

Problem: I want to run multiple agents at once. 4 solutions: 1. Clone the repo twice. Use 2 editor instances. 2. Use Git worktree to checkout multi...

Problem: You want to hide a component, but still preload data and remember...

Problem: You want to hide a component, but still preload data and remember it's local state while hidden. Solution: React's new <Activity> co...

My biggest beef with Scrum: The sprint time box creates an arbitrary deadline

My biggest beef with Scrum: The sprint time box creates an arbitrary deadline. Arbitrary deadlines lead to rushing. Rushing leads to cutting corner...

I don't need stand-ups, sprints, retrospectives, or a scrum master

I don't need stand-ups, sprints, retrospectives, or a scrum master. I need good communication, frequent delivery, iteration based on feedback, and...

Problem: You want to enable a few specific VS Code settings for everybody

Problem: You want to enable a few specific VS Code settings for everybody. Solution: Put the settings in .vscode/settings.json and they'll automati...

I'm reviewing a codebase with over 750 uses of optional chaining

I'm reviewing a codebase with over 750 uses of optional chaining. Example: user?.email I continue to believe adding this feature to JS was a mistak...

Software development is simpler than it sounds

Software development is simpler than it sounds. You only need to understand a few key concepts to code: variables, conditionals, loops, assignments...

"LLMs are trained on other people's code"

"LLMs are trained on other people's code". Yep. And before LLM's, I used other people's code too. I copied patterns from docs, StackOverflow, forum...

I talk money with my developer friends

I talk money with my developer friends. Here’s why. Years ago I was managing a dev team full-time and contracting on the side. My friend named Lee...

Custom directives are getting out of control

Custom directives are getting out of control. 'use server' 'use client' 'use cache' 'use cache:remote' 'use workflow' 'use streaming' 'use edge' 'u...

A few years ago I led a team of developers creating reusable software...

A few years ago I led a team of developers creating reusable software components for a large company. We had at least one of our developers embedde...

Just visited The Netherlands for the first time to speak at Techorama

Just visited The Netherlands for the first time to speak at Techorama. I explored Amsterdam and Utrecht. As an American, here’s a few things I admi...