38 things we've learned about building AI products
Practical, no-nonsense insights from building AI products.
Library
A personal collection of work that has shaped my professional thinking on building products, engineering systems, and making decisions.
Selected for their impact.Articles, talks, tools, and research.
Worth keeping. Worth sharing.

Practical, no-nonsense insights from building AI products.

Tom Blomfield’s playbook for early B2B sales.

Message queues, directly in Postgres. Also supported by Supabase.

A useful checklist of product details, extending well beyond visual design.

Specific, documented examples of AI misuse and how they were addressed.

Jina AI’s path from a framework to selling models for search.

Leaving room in a defence plan for technology that does not exist yet.

The long-term engineering costs around a machine learning model.

Turn production examples into better evaluations and better applications.

Practical lessons across the technical and organizational sides of LLM delivery.

The memory-management ideas behind vLLM and PagedAttention.

Evidence for choosing between text retrieval and graph-based retrieval.

What model-based evaluation can measure, and where it can mislead.

Trace generated statements back to the context that influenced them.

Build evaluation around the errors that appear in real product use.

A multidimensional view of what “open” means for an AI model.

Document a model’s capabilities, limitations and intended uses.

How to build a search agent that iterates, checks its work and knows when to stop.

A visual explanation of the transformer architecture behind language models.

The foundations of search, from inverted indexes to retrieval evaluation.

Understand the trade-offs behind reliable, scalable data systems.

Measure and improve the latency, throughput and cost of serving LLMs.
How industrial policy and new investment could change semiconductor dependencies.

The industrial and geopolitical history behind today’s computing infrastructure.

A practical introduction to parameter-efficient fine-tuning methods, including LoRA and QLoRA.

University teaching material on foundation models and how to adapt them.

Specifications and architectural context for NVIDIA’s H100 accelerator.

The BERT paper introduces bidirectional pre-training for language understanding.

A worked implementation of reinforcement learning from human feedback using SageMaker.

Historical Google Cloud documentation for tuning PaLM text models with reinforcement learning from human feedback. Covers prompt and human-preference datasets, reward models, tuning jobs, and deployment of tuned models. The original page is no longer available.

A calculator for comparing language-model API costs.

An overview of ELIZA and its place in the history of conversational software.

Background on recurrent networks designed to preserve information across long sequences.

An audio-analysis library with practical examples of open-source signal processing.

A repository for building AI applications with private data and local models.

An introduction to retrieval-augmented generation for enterprise applications.

A multilingual collection of prompted datasets for instruction tuning.

An introduction to agents, their components, and tool use.

Guidance for generating text with the Transformers library.

The model card for Mistral Small 24B Instruct 2501.

The ethical charter created for the BigScience research collaboration.

A calculator for estimating the environmental impacts of generative-AI usage.

Research into how generative AI changes knowledge-work performance.

OpenAI’s explanation of instruction-following models trained using human feedback.

Stanford’s toolkit for annotating and analyzing text with natural-language processing methods.

The announcement of Amazon and Anthropic’s AI collaboration.

Institutional statistics from the Bibliothèque nationale de France.

Reporting on a copyright dispute involving generative-AI training data.

Reporting on objections to commercial uses of the memory of D-Day veteran Léon Gautier.

An introduction to the development and historical context of large language models.

A parallel corpus built from European Parliament proceedings.

Reporting on the Books3 dataset and disputes about books used for AI training.

Andrej Karpathy’s introductory lecture on large language models.

A case study combining knowledge graphs and deep learning for aviation-safety questions.

The remaining engineering work behind apparently near-complete AI-generated code.

Teaching material on AI systems and decisions for technology leaders.

Meta’s introduction to its Llama 3 model family.

Apache Airflow examples for coordinating machine-learning workflows.

Qonto’s account of using AI agents in localization and operational workflows.

The architectural changes introduced with vLLM V1.

A discussion of MLOps and the path from research to production.

An interactive tool for comparing human image classification with ImageNet model predictions.

Lecture slides on inspecting model errors to prioritize machine-learning improvements.

Documentation on evaluating retrieval applications with TruLens and Pinecone.

Documentation for serving language models through an OpenAI-compatible API with vLLM.

An explanation of mean reciprocal rank as a retrieval metric.

Prompting techniques grounded in how language models respond to instructions and examples.

Apple’s research code for the Ferret multimodal model.

A user interface for working with language models through local or hosted services.

Carrefour’s account of developing a generative-AI studio for marketing teams.

The model card for Mistral Small 3.1 24B Instruct 2503.

Architectural choices and components involved in building a generative-AI platform.

Why retrieval systems need more than a vector search over embeddings.

Why inspecting only a few retrieval results is a weak evaluation method.

Lessons from comparing human image recognition with a convolutional neural network.

A survey of hallucination mechanisms and mitigation approaches in language models.

Software and documentation for working with locally hosted language models.

Sebastian Raschka’s writing on machine learning and AI research.

How Preligens structured the frameworks, teams, and production practices behind its AI factory.

A design perspective on collaboration between humans and generative AI.

Mistral’s announcement of the Small 3.1 model.

A runtime for working with language models locally.

OpenAI’s introduction to GPT-4o and its multimodal capabilities.

The open observability project covering traces, metrics, and logs.

An introduction to language-model evaluation and benchmarking.

Research into how web latency affects user behavior.

A worked example of extracting topics with NMF and latent Dirichlet allocation.

A comparison of language-model price and performance.

Simon Willison’s PyCon keynote on large language models and practical software development.

A technical discussion comparing bidirectional sockets with one-way browser event streams.

Reporting on Intel’s enterprise generative-AI spinout, Articul8.

The US Department of Defense directive on autonomy in weapon systems.

An argument for more precise language about human responsibility in autonomous systems.

A comparison of changes in OpenAI API pricing.

Operational practices for running web systems, from monitoring and deployment to incident analysis.

A public technical explainer on ChatGPT and conversational AI models.

A practical introduction to evaluating language models.

An overview of detecting and responding to model drift.

Reporting on Safran’s acquisition of Preligens and its integration as Safran.AI.

A practical estimate of GPU memory needs from model size and numeric precision.

WIPO’s analysis of the patent landscape around generative AI.

Andrew Ng’s lesson on using error analysis to guide machine-learning work.

A discussion of Carrefour’s experience applying generative AI.

The word2vec paper on efficient learning of distributed word representations.

The CLIP paper on learning visual representations from paired image and text data.

Research on learning representations for text and code using contrastive training.

An evaluation of ChatGPT for detecting factual inconsistencies in summaries.

An empirical study of how language models handle graph-structured information.

Methods for assessing correctness and faithfulness in question answering.

A survey of language-model applications in information retrieval.

The Ragas paper on evaluating retrieval-augmented generation systems.

A quantization method designed to improve language-model inference efficiency.

An indexing approach for approximate nearest-neighbor search.

The GraphRAG paper on graph-based retrieval for broad, query-focused summaries.

A review of text-embedding methods evaluated on MTEB.

A fine-grained approach to evaluating summaries with language models.

A retrieval method that uses vision-language representations of document pages.

A systematic study of language models used as judges in alignment evaluation.

A benchmark for evaluating retrieval across heterogeneous tasks and domains.

A study of detailed, language-model-based summarization evaluation.

A system for automating the preparation and writing of academic surveys.

A method for refining summaries through feedback and reflective reasoning.

Public vector datasets for benchmarking approximate nearest-neighbor search.
Research tracking openness and accountability in instruction-tuned language models.

An open platform for tracing and evaluating language-model applications.

A cost-benefit framework for selecting a language model for a business.

A method that decomposes summaries into atomic claims to evaluate hallucinations.

The original description of ROUGE as a package for evaluating summaries.

Meta’s introduction to learning video representations with V-JEPA.

A study of which developer tools Claude Code selects across different tasks.

The LoRA paper on adapting large models through low-rank parameter updates.

Research into using ChatGPT to evaluate summaries in relation to human judgments.

A method for learning from preferences without a separate reinforcement-learning reward model.

Research showing how the location of information affects its use in long contexts.

A method for representing graph information in a form language models can consume.

A study of how presentation style can bias language-model judges.

An investigation of hallucinations when language models summarize multiple documents.

A study of failures in causal reasoning about narrative information.

Research on bringing structured knowledge graphs into language models.

A survey of autonomous cyberattacks carried out using language-model agents.

Research on sharing foundation-model fine-tuning between devices and edge infrastructure.

The HNSW paper describing graph-based approximate nearest-neighbor search.

The Transformer paper introducing an architecture built around attention.

A worked method for generating synthetic evaluation data for RAG systems.

A development tool combining code formatting and linting.

A guide to the metrics and operational practices used to monitor language-model inference.

The original vLLM announcement and its approach to memory-efficient model serving.

An introduction to managing deployment configuration as code.

An explanation of the bfloat16 number format used in Cloud TPUs.

Google Cloud documentation for supported Mistral models.

The European Commission’s overview of the European Chips Act.
A 2020 overview of Taiwan’s semiconductor industry, its manufacturing clusters, policy initiatives, and investment opportunities.

A technical discussion of slow approximate-nearest-neighbor search in Elasticsearch.

A tutorial for creating and running a first load test with Gatling.

Mistral’s overview of its models and API versions.

NVIDIA’s reference for querying and managing GPU state through nvidia-smi.

Reference documentation for the evaluation metrics implemented in Ragas.

A guide to observing vLLM with Prometheus and Grafana.

An example of serializing and loading vLLM models with Tensorizer.

Documentation for sending multimodal inputs to vLLM.

Reference documentation for offline inference with vLLM.

The usage data collected by vLLM and the options for disabling collection.

Frequently asked questions about operating vLLM.

Documentation for constraining generated outputs to a required structure.

An overview of vector database concepts, use cases, and implementation challenges.

Research on personalizing music-app carousels using contextual bandits.

An explanation of betweenness centrality in graph analysis.

The binary-search algorithm and its computational properties.

A reference on interpreting classification outcomes with a confusion matrix.

An explanation of discounted cumulative gain for ranking evaluation.

Background on coded political messaging and its interpretation.

An explanation of the Gartner hype-cycle model of technology expectations.

A reference on Likert scales for collecting and interpreting judgments.

An explanation of matrix rank in linear algebra.

A reference on rank correlation and how it measures monotonic association.

Meta’s introduction to the Faiss library for vector similarity search.

A keynote on evaluation, retrieval, guardrails, and feedback in LLM systems.

An example of consumer software for generating synthetic video of a public figure.

Background on lithography and its role in producing patterned surfaces.

An explanation of quantiles for understanding distributions.

A library for low-bit model operations and quantization.

A library for training and using embedding and reranking models.

A framework for evaluating language-model applications.

Faiss guidance on choosing an index for similarity search.

The llama.cpp pull request introducing the k-quants quantization methods.

An open-source load-testing tool built around JavaScript and Go.

Hugging Face’s server for text-generation model inference.

Tools for training language models with reinforcement learning and preference data.

The source repository for Langfuse’s tracing and evaluation platform.

A load-testing tool that defines user behavior in Python.

The open protocol connecting AI applications to tools and data sources.

A PostgreSQL extension for storing vectors and searching by similarity.

Research code for the Mamba state-space architecture.

OpenTelemetry-based instrumentation for generative-AI applications.

The Ultralytics computer-vision repository.

Tools for training and running language models with reduced resource requirements.

The source repository for vLLM’s model-serving engine.

The Grafana observability platform and its technical resources.

A framework for evaluating recommender systems that use relational data.

OVHcloud instructions for configuring S3cmd with object storage.

The model card for Nous Research’s Hermes 4 70B.

The model card for Qwen2.5 7B Instruct with a million-token context window.

A GGUF distribution of Code Llama 7B with quantized variants.

A guide to 4-bit model loading and QLoRA with bitsandbytes.

A method for efficiently training static text embeddings.

Guidance for training and adapting Sentence Transformers embedding models.

An instruction-tuning dataset hosted by Hugging Face H4.

A ShareGPT-format creative-writing dataset used as an example of fine-tuning data.

The GooAQ question-answering dataset in Sentence Transformers format.

A Sentence Transformers training dataset derived from MS MARCO.

Instructions for downloading model files from Hugging Face.

Reference documentation for the Hugging Face command-line interface.

Documentation for the PEFT parameter-efficient fine-tuning library.

Documentation for Hugging Face Text Generation Inference.

The model architectures supported by Text Generation Inference.

Documentation for the TRL reinforcement-learning and preference-training library.

Reference documentation for the direct preference optimization trainer.

A guide to using open models through TGI’s Messages API.

The model card for Meta’s Llama 2 7B chat model.

The model card for Meta’s Llama 3.2 1B model.

The base-model card for Mistral Small 3.1 24B.

A discussion about inconsistencies in the documented languages supported by Mistral Small 3.1.

A leaderboard for comparing text-embedding models across MTEB evaluations.

The model card for Stable Diffusion XL 1.0.

Research on compact vector representations for approximate nearest-neighbor search.

An overview of the factors that determine the cost of developing AI applications.

A graph database and its technical documentation.

A tool for finding unused files, dependencies, and exports in JavaScript projects.

The data model used to represent traces and observations in Langfuse.

The Apache Lucene search library and its documentation.

A topic-modeling library that combines embeddings with class-based TF-IDF.

Practical observations from fine-tuning experiments with LoRA.

An example-driven introduction to Makefiles.

An introduction to vector storage, semantic search, and criteria for selecting a vector database.
An introduction to chip-industry history, manufacturing models, and supply-chain dependencies.

An illustrated explanation of reusing attention states to speed up autoregressive generation.

An analysis of OpenAI’s text-embedding models and their evaluation.

A Python-based guide to identifying graph communities with the Leiden algorithm.

An introduction to Milvus and its architecture for storing and searching vector data.

A worked guide to fine-tuning Mistral 7B with direct preference optimization.

A guide to quantizing models for use with llama.cpp.

NetworkX documentation for Louvain community detection.

NetworkX documentation for computing PageRank.

An observability integration for monitoring OpenLLM.

OpenAI’s introduction to its research-oriented agent.

An index assessing the openness of AI systems.

A method for billion-point approximate nearest-neighbor search on one machine.

A framework for managing and sharing pre-commit hooks.

An open monitoring system and time-series database.

An explanation of filtered vector search using HNSW.

Qdrant documentation for constraining search results with filters.

An explanation of layered defenses through the Swiss cheese model.

A guide to choosing loss functions for Sentence Transformers.

Scikit-learn’s reference for scoring functions and evaluation metrics.

Reference documentation for latent Dirichlet allocation in scikit-learn.

A dataset of multimodal annotations generated with GPT-4o.

A presentation about the research and systems behind music recommendations at Spotify.

A deployment pattern for reducing the cost of serving fine-tuned models.

A discussion of the metrics and frameworks available for evaluating retrieval-augmented generation.

Inference costs and open models.

An account of TSMC’s rise in advanced chip manufacturing.

The White House fact sheet introducing the CHIPS and Science Act.

A textbook chapter explaining recurrent neural networks and long short-term memory models.

Course slides introducing methods that adapt language models with relatively few trainable parameters.

ASML’s explanation of extreme-ultraviolet lithography systems.

An introduction to FinOps and the management of cloud expenditure.

A pricing framework connecting customer value, differentiation, and the changing costs of generative AI.

A comparison of approaches to deploying language models.

Reporting on the infrastructure costs behind generative AI.

France’s diplomatic priorities and regional partnerships in the Indo-Pacific.

A technical presentation on BM25 relevance scoring in Elasticsearch.

A study of AI-model performance beyond conventional benchmark scores.

Product-interface decisions that affect the usefulness and adoption of generative AI.

A comparison of cost factors in selecting and deploying language models.

An account of the financial and operational costs of building and running language models.

An explanation of context windows and their constraints in language models.

An overview of pricing approaches for language-model services.

An explanation of corporate spin-offs and their financial structure.

A vector-search method that refines nearest-neighbor results using compact quantization codes.

An analysis of diminishing returns in deploying language models locally.

A cost comparison between hosted commercial models and self-hosted open models.

Guidance on choosing an embedding model for an application that uses language models.

An explanation of explicit and implicit user feedback for AI products.

An analysis of the cost of training large language models.

NVIDIA’s technical datasheet for the A100 Tensor Core GPU.

NVIDIA’s technical datasheet for the L40 GPU.

An illustrated explanation of HNSW vector-search indexes.

Examples of business applications for large language models.

A guide to configuring s3cmd for Scaleway Object Storage. Covers regional credentials and configuration files, bucket and object operations, and CORS configuration.

A discussion of open models and competitive defensibility in AI.

An analysis of the inference economics of language-model-based search.

A map of the US semiconductor ecosystem.

A guide to adapting large language models through fine-tuning.

An analysis of costs and tradeoffs in running large language models.

Documentation and examples for tracing and evaluating AI applications with TruLens.

Introduces programmatic feedback functions for evaluating LLM application runs. Compares expert judgments, user feedback, traditional NLP metrics, and model-based evaluations by scalability and usefulness.

An explanation of groundedness, relevance, and context quality in RAG evaluation.

Reporting on Mistral AI’s early fundraising and plans to develop generative-AI models.

Reporting on Intel’s cancelled German fabrication plant and the implications for industrial policy.

A worked explanation of percentiles in a normal distribution.

The W3C primer introducing the RDF 1.1 data model.

A visual explanation of the journey from NVIDIA’s Blackwell chips to a data center.

An explanation of the factors behind the cost of large language models.

An introduction to the manufacturing steps used to produce microchips.

A discussion of vector databases with practical deployment experience.

A technical thread explaining how SurveyX organizes references and generates research surveys.

A reminder that reasoning models need different usage patterns from conventional chat models.

A comparison figure updated to include DeepSeek-V2 and Mistral Large 2.

A technical talk introducing neural-network quantization.

A presentation by vLLM contributors on accelerating language-model inference.

A survey of environmental, economic, and computational challenges in sustainable language models.

A policy primer on the resources and emissions involved across the lifecycle of AI systems.

The governance charter defining the mission and operation of the Open Container Initiative.

The bylaws governing membership, leadership, and decision-making at the Linux Foundation.

Apple’s announcement that Swift became an open-source programming language.

Practical expectations for becoming an effective contributor to an open-source project.

A keynote on collaboration, coordination, and visibility in open-source ecosystems.

A reflection on how the incentives and culture of open source have changed.

An argument for building public accountability through open data and open-source software.

Guidance for developing trust and leadership within open-source communities.

Reporting on open-source voting infrastructure and public confidence in elections.

Ways to support open-source projects beyond writing code.

An examination of age-related barriers in software-development careers.

A discussion of the decisions behind commercial open-source business models.

An examination of how open-source projects disclose their governance and decision-making.

Research on how open-source developers balance visible collaboration with protected working spaces.

An account of how transparency helped engineers at Buffer collaborate.

An explanation of the distinction between sharing source code and operating transparently.

The Apache Software Foundation’s corporate governance structure and procedures.

A discussion of incentives, openness, and accountability in software communities.

A checklist for evaluating ownership and decision-making in open-source governance.

A discussion of the security implications of transparent software development.

An examination of software transparency as a defense against hidden vulnerabilities.

Adjust explains the reasoning behind its open-source software and SDK practices.

The European Commission’s survey of semiconductor demand and supply-chain constraints.

France’s strategic priorities in the Indo-Pacific, including security, regional cooperation, and economic dependencies.
Try a broader idea, another source, or fewer filters.
Every entry links to the original work and a citation you can reuse. Notes explain what stood out to me; related references help connect ideas across formats.