Blog & Insights

Technical thoughts, project stories, and lessons learned from years of building software

Tidy, Offload, and the Shape of Personal Infrastructure

Tidy, Offload, and the Shape of Personal Infrastructure

Notes from building a small pair of terminal tools: one that understands what is taking space on a machine, and one that safely moves the things that do not belong there.

aitoolingterminal
Read more
The Padded Room

The Padded Room

What happens when you get gaslighted by your tools?

Read more
Building the Definitive Guide to MCP Servers

Building the Definitive Guide to MCP Servers

Why I'm writing a practical book on building MCP servers, who it's for, and what readers can expect from the draft today.

aimcpengineering
Read more
Vestigial Interview Processes

Vestigial Interview Processes

Explore how outdated tech interview processes fail to predict engineering success, and discover the transformative impact of AI tools in modern software development.

Read more
Marked Spam

Marked Spam

A verified, source-backed guide to diagnosing Google Workspace email deliverability issues with Gmail, focused on authentication, reputation, and sender requirements.

emailgoogle-workspacedeliverability
Read more
Coding is (finally) for Dinosaurs

Coding is (finally) for Dinosaurs

A short follow-up on how the “autocomplete era” quietly evolved into “intent-first” software creation—where shipping is mostly conversation, and touching code starts to look like nostalgia.

aidevelopmentcoding
Read more
Building a Family Electronic Bulletin Board with Next.js

Building a Family Electronic Bulletin Board with Next.js

How I built a full-featured family bulletin board with Next.js, SQLite, and Tailwind CSS - perfect for a mud room kiosk display

Bulletin BoardNext.jsSQLite
Read more
How does this activity love others

How does this activity love others

A meditation on why we do what we do, and how our actions touch others.

Read more
Prefer type over interface

Prefer type over interface

Prefer Type over Interface

Typescript
Read more
Building a Salesforce Sync pipe with Node.js

Building a Salesforce Sync pipe with Node.js

Architecture notes

Architecture
Read more
Config Based Data Layer

Config Based Data Layer

A pattern for building declarative, configuration-driven data layers using Redux Toolkit and Redux Observable that eliminates useEffect hooks and simplifies React components.

reduxredux toolkitredux observable
Read more
I just can't do this anymore, Copilot

I just can't do this anymore, Copilot

After two weeks with GitHub Copilot, I’m convinced it quietly injects subtle bugs and breaks my flow—so I turned it off (maybe for good).

development
Read more
4A Testing - Arrange Act Assert Annul

4A Testing - Arrange Act Assert Annul

A small upgrade to Arrange–Act–Assert: add “Annul” as a reminder to clean up state and make tests independent.

testingqualitydevelopment
Read more
The Lead Developer - London - 2019

The Lead Developer - London - 2019

Conference notes

Conference
Read more
Learning to Ride the Bike

Learning to Ride the Bike

Practice is the difference between doing something and becoming it: you get good when you stop thinking and start repeating the work.

PracticeCraftLearning
Read more
My Favorite JavaScript Unit Testing Resources

My Favorite JavaScript Unit Testing Resources

A short list of tools and references I’ve found useful for JavaScript unit testing (plus a few practical “testing ecosystem” picks).

JavaScriptTestingUnit Testing
Read more
Configure package.json variables with npmrc

Configure package.json variables with npmrc

How to keep credentials out of package.json while still wiring scripts: use npm config variables and per-project .npmrc files.

Node.jsnpmTooling
Read more
Introducing Generator-SFDC

Introducing Generator-SFDC

Why I built a Yeoman generator for Salesforce (Generator-SFDC), what problem it solves, and what it can scaffold for you.

SalesforceYeomanJavaScript
Read more
Understanding Yeoman

Understanding Yeoman

A practical guide to Yeoman: what it is, how to run generators, how to author your own generator, and how to test it.

JavaScriptNode.jsYeoman
Read more
Using Webdriver.io with JSForce, Mocha and Chai for fluent BDD on SFDC

Using Webdriver.io with JSForce, Mocha and Chai for fluent BDD on SFDC

A practical walkthrough of end-to-end testing Salesforce with WebdriverIO + JSForce, using Mocha/Chai and a Selenium server—plus an example BDD workflow with user stories and acceptance criteria.

SalesforceWebdriverIOJSForce
Read more
The modern Salesforce development workflow with Visual Studio Code

The modern Salesforce development workflow with Visual Studio Code

A pragmatic workflow for Salesforce development using modern JavaScript tooling: Node.js, Git, build systems, and Visual Studio Code.

SalesforceVisual Studio CodeJavaScript
Read more
Selenium

Selenium

A practical introduction to Selenium: what it is, why you’d use it, how Selenium IDE works, and how to move from recorded tests to code-driven WebDriver automation.

TestingAutomationSelenium
Read more
Get good with Git guide

Get good with Git guide

A practical, beginner-friendly Git overview: what it is, how to set it up, and the core commands (clone/add/commit/pull/push/branch/merge/rebase).

GitVersion ControlGitHub
Read more
Generators, APEX, and Unix commands, OH MY!

Generators, APEX, and Unix commands, OH MY!

A quick, link-heavy cheat sheet: modern JavaScript scaffolding tools, a handful of Unix commands, and the Salesforce @RemoteAction concept.

SalesforceAPEXJavaScript
Read more
New Force.com Project

New Force.com Project

A step-by-step checklist for starting a new Force.com project with MavensMate and a Gulp/Angular build pipeline.

SalesforceForce.comMavensMate
Read more
Crockford on JS

Crockford on JS

Notes and a link to Douglas Crockford’s talks on JavaScript and pragmatic software design.

JavaScriptSoftware DesignDouglas Crockford
Read more