# Blog

Announcements, perspectives and engineering notes from the Amfelt team, covering data pipelines, analytics engineering, and building software with AI.

## Blog — What we think. How we build.

Browse our announcements, our perspectives on data engineering and notes on how we build Amfelt.


- [Amfelt's first version is ready for closed testing](/blog/first-version-closed-testing/index.md): The first version of Amfelt is complete. We are now running demos and tests with a small group of invited teams.
- [The board wants AI. The data is still on the ship.](/blog/why-we-are-building-amfelt/index.md): A CFO asks the whole company to build with AI, while a modest pilot to collect raw vessel data sits blocked. Why we're building Amfelt for the gap in between.
- [How we keep parallel agents working toward the same plan](/blog/coordinating-parallel-agents/index.md): A commit in August staged one agent session's uncommitted work into another session's change. How we responded with Git worktrees, a guard hook, shared planning documents, a GitHub issue tree, and handovers between sessions.
- [Type casting belongs between the L and the T](/blog/type-casting-is-a-pipeline-step/index.md): At a wholesaler moving toward dbt, I found typed source columns arriving as strings in Snowflake. The migration showed how much transformation code depended on those conversions.
- [We chose HTMX over React for our app](/blog/htmx-instead-of-react/index.md): Why a team with Go and Hugo experience built a CRUD-shaped control plane from server-rendered HTML fragments instead of React, what that costs us, and the kind of app where we would choose differently.
- [We skipped microservices and built a modular monolith](/blog/why-our-platform-is-a-modular-monolith/index.md): Why a small team with a fixed stack chose one Go binary per app on one Postgres instead of microservices, what that costs, and the triggers that would make us split.
- [Keep the site static, put a Go server in front of it](/blog/gating-a-static-site-with-go/index.md): How we gave a Hugo site per-user access control without giving up static output: a small Gin server, Hanko for sign-in, and the whole site embedded in the binary.
- [Your docs folder is already the knowledge base](/blog/markdown-knowledge-base-for-ai-development/index.md): AI-assisted development produces documentation faster than anyone can file it. Plain Markdown in the repository, rendered by a static site generator, turns that pile into a knowledge base for both people and agents.
- [Your agent writes perfect SQL. It still gets the answer wrong.](/blog/perfect-sql-wrong-answer/index.md): Three teams at a national telco counted connections three different ways. That experience, and MotherDuck's data-preparation benchmark, made me question what an agent needs beyond valid SQL.
- [Stop asking AI to guess. Make your pipelines deterministic.](/blog/make-your-pipelines-deterministic/index.md): An LLM changed my build check until a failing Hugo build looked successful. That experience shaped how I think about AI-generated pipeline code and the checks it must pass.
- [Every warehouse needs history. Almost none have it.](/blog/every-warehouse-needs-history/index.md): My first engagement as an independent consultant started with a week of manually recovering failed warehouse loads, and a CFO whose numbers moved between Monday and Thursday. The root cause was a warehouse with no history, which is far more common than it should be.
- [I had to read the code to understand the data platform](/blog/understanding-your-data-platform/index.md): An incomplete source inventory sent me into years of integration code before I could plan a global warehouse. What that work taught me about documenting a data platform.
- [Data tools are getting better. Data teams are still stuck.](/blog/data-tools-solving-wrong-problems/index.md): Four colleagues praised our demo. The fifth reviewer, a system integrator we barely knew, questioned the complexity and the problems we had chosen to solve. We had to reconsider what would make the platform useful to a data team.
