Engineering
Engineering field notes
Production problems and how they were fixed, architecture decisions, and experiments with AI in the engineering workflow.
2026
- Don't build business logic on an expiry notificationArchitecture4 min read
A background process that was going to be triggered by a cache telling us a key had expired. Why that's fragile, the queue-and-scheduler design we chose instead, and why we deliberately stopped short of a full event-driven rebuild.
- Moving my blog off WordPress with an AI agent: what I delegated, and what I didn'tAI4 min read
I migrated this site from WordPress to a static site in one afternoon, working with an AI agent. The speed was impressive. The more useful lessons were about where the agent stopped and I had to decide.
2023
- Sitecore Headless: a listing component using placeholdersSitecore1 min read
We need two JSON Rendering components: one for the list items and one for the container that holds the list. For example: MessageListItem,…
- Sitecore Headless with Next.js: convert a string into a Sitecore data typeSitecore1 min read
In Next.js, we can convert a string into a Sitecore data type. Sitecore typically stores data in fields with specific data types such as Single Line…
- Sitecore EXM: Couldn't lock the itemEXM1 min read
Recently we encountered a warning message "Couldn't lock the item LHSImage RHSCopy 2" when we changed an image in a custom email and clicked Save. We…
- Facebook Conversions API3 min read
Introduction In January 2020, Google made clear its intention to stop supporting third party cookies in Chrome. Third party cookies have been the…
2021
- PowerShell scripts to get Sitecore User informationSitecore1 min read
Sometimes we might need to get Sitecore user information in detail. The information isn’t always in the same place, so different scripts are handy for…
- Email dispatch issue in Sitecore EXMEXM2 min read
Recently we faced an interesting Sitecore EXM issue. We can create an email with a name up to 100 characters long. The default maxLength is 100 . Once…
- Dialogflow Custom Payload for Facebook MessengerDialogflow1 min read
We are developing a chatbot for one of our clients. The chatbot is for Facebook Messenger, and in the back end we are using Google Cloud Dialogflow.…
- On Sitecore item publish, update a single record in the indexSitecore1 min read
Recently we faced an interesting problem. We were updating a Sitecore item field, but after publishing, the change was not reflected in the search…
- Send alert when Sitecore running jobs get stuckSitecore2 min read
Recently we faced an issue in production where a Sitecore job hung. It blocked other jobs, and all our search index rebuild jobs were stuck in the…
- Programmatically resume paused emails in Sitecore EXMSitecore1 min read
When an email campaign is dispatched, it moves through a number of states (Draft, Queuing, Sending, and Sent). If an error occurs during dispatch and…
- A common Sitecore 9 Experience Profile errorSitecore1 min read
Recently I set up Sitecore 9.1 (scaled) for our UAT environment. When I opened the Experience Profile from the Launchpad, I got an error and no data…
- Remove Sitecore users in bulkSitecore1 min read
Sometimes we need to clear out old users, or all users in a specific domain. We can do this from the Sitecore User Manager by removing them one by…
- Filter users by domain in Sitecore User ManagerSitecore1 min read
Recently we ran into an issue with the Sitecore User Manager. We have more than 500k users, so finding a specific user was troublesome. We thought…
- Dependency Inversion Principle and the Dependency Injection PatternCommon4 min read
Introduction Every day we write lots of code that is tightly coupled, and as complexity grows that code eventually deteriorates into spaghetti code,…
- Unsubscribe email in Sitecore EXMSitecore2 min read
Sometimes you need to unsubscribe a contact programmatically. For example, you have a legacy third party email management system and whenever a user…