# Scott Mallinson > Engineering notes on AI, APIs and system design. Public Ghost content for AI and LLM tooling. Use `/llms-full.txt` for consolidated page and post context. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages - [Hi — I'm Scott, and I make the important parts reliable](https://scottmallinson.com/about.md) - I'm a software engineer living in Barcelona with my wife Tess, and our son. By day I'm a Senior Software Development Engineer. Most of my time goes on backend platform development and the reliability work that keeps it all standing up. Lately a lot of that has meant building AI features into produc… - [The tools I reach for, and why](https://scottmallinson.com/uses.md) - An honest list, updated when something actually changes — not when something new comes out. Software Beeper Claude GitHub Copilot app n8n Obsidian Plexamp Visual Studio Code Hardware Dell Latitude 5420Regulation issued to get the job done. Logitech Brio 500Because integrated webcams largely suck. L… ## Posts - [Codebase health is a lagging indicator](https://scottmallinson.com/codebase-health-is-a-lagging-indicator.md) - A tooling migration, some dependency bumps and a telemetry schema. None of it reaches a roadmap, and all of it decides whether a codebase is pleasant to work in three years from now. - [Designing a logging system for an AI service](https://scottmallinson.com/designing-a-logging-system-for-an-ai-service.md) - Building a standardised logging system for an AI assistant service: making consistent structured logging the path of least resistance, and thinking carefully about what an AI service should and shouldn't persist. - [From merged pull requests to a performance review](https://scottmallinson.com/from-merged-pull-requests-to-a-performance-review.md) - Merged pull requests already record what you did. Turning them into a work log with an LLM is easy; the hard part is the defensive rules that stop it corrupting the vault. - [On console warnings and the things we don't remove](https://scottmallinson.com/on-console-warnings-and-the-things-we-dont-remove.md) - Removing unused documentation tooling and fixing prop type warnings: small changes that don't ship features but make the codebase a bit more honest. - [Two kinds of correctness: currency bugs and ghost feature flags](https://scottmallinson.com/two-kinds-of-correctness-currency-bugs-and-ghost-feature-flags.md) - A currency display bug in the exchange flow and a feature flag referencing something that never existed in production. Two different kinds of silent incorrectness. - [The shape of shared libraries](https://scottmallinson.com/the-shape-of-shared-libraries.md) - A shared library is defined by the shape it presents to its dependents. Two cases make that concrete: an icon component used through an undeclared path, and a one-line logging change that quietly broke a numeric assumption. - [Three quiet bugs hiding in a cross-service feature](https://scottmallinson.com/three-quiet-bugs-cross-service-feature.md) - Shipping a feature across four services meant coordinating an AI backend, a fare search service, and two frontend components. Along the way: a silent configuration bug, a duplicate event contract, and an HTML injection path. - [The scaffolding tax: getting a new service properly bootstrapped](https://scottmallinson.com/the-scaffolding-tax-getting-a-new-service-properly-bootstrapped.md) - Bootstrapping a new service from a template isn't just renaming things; it's wiring it into the deployment pipeline, getting dependency management right, and building the scaffolding that makes all future work faster. - [Shipping a conversational search flow across services](https://scottmallinson.com/shipping-a-conversational-search-flow-across-services.md) - Cross-service work: shipping an end-to-end conversational flight search flow, instrumenting an MCP server with privacy-aware observability, improving AI coding assistant context injection, and cleaning up inconsistent naming across the codebase. - [Release pipelines should be boring](https://scottmallinson.com/release-pipelines-should-be-boring.md) - Time spent fixing a flaky release pipeline sounds like a lot of infrastructure work. Here's why its effects on a team are easy to undercount. - [Granular Dependabot groups and getting error attribution right](https://scottmallinson.com/granular-dependabot-groups-and-getting-error-attribution-right.md) - Repos got granular Dependabot grouping and a shared error library got a missing origin type. Neither is glamorous; both are the kind of thing that keeps a platform manageable. - [The notification that wouldn't leave](https://scottmallinson.com/the-notification-that-wouldnt-leave.md) - A booking interface was showing a queue warning banner after it should have disappeared. The fix was small; the pattern it points to is worth thinking about. - [Designing an API endpoint for an AI consumer](https://scottmallinson.com/designing-an-api-endpoint-for-an-ai-consumer.md) - Adding a conversational search endpoint to a fare search service raised an interesting question: what does a response shape optimised for an AI assistant look like, versus one optimised for UI code? - [Keeping orchestration in your code, not your prompt](https://scottmallinson.com/keeping-orchestration-in-your-code-not-your-prompt.md) - A reflection on where coordination logic should live when building AI assistants into production systems, and why application-layer orchestration beats prompt-driven coordination. - [The quiet work of removing feature flags](https://scottmallinson.com/the-quiet-work-of-removing-feature-flags.md) - On removing feature flags that had outlived their purpose. Not glamorous, but this kind of cleanup is what keeps a codebase navigable over the long run. - [What adding an AI layer taught me about type ownership](https://scottmallinson.com/what-adding-an-ai-layer-taught-me-about-type-ownership.md) - Adding an AI layer to existing services surfaced something I'd been quietly ignoring: schema drift. Here's what fixing it actually looked like. ## Optional - [RSS Feed](https://scottmallinson.com/rss/) - [Sitemap](https://scottmallinson.com/sitemap.xml) - [Full content of pages and posts](https://scottmallinson.com/llms-full.txt)