This article advocates for choosing well-established, "boring" technologies in system design, especially when building AI applications. It argues that leveraging battle-tested tools like PostgreSQL with extensions like pgvector can significantly reduce operational overhead and complexity, allowing teams to reserve their "novelty budget" for the inherent complexities of AI models themselves, rather than infrastructure.
Read original on Dev.to #architectureThe term "boring technology" doesn't imply outdated or inefficient. Instead, it refers to technologies that have been in production long enough for their failure modes to be well-documented, operational characteristics understood, and troubleshooting solutions readily available. Examples include PostgreSQL, Redis, S3, and standard HTTP APIs with JSON. The core idea is to minimize the "surface area of things that can go wrong that nobody has written about" by leveraging mature, proven solutions.
Novelty Budget
In any project, there's a limited "novelty budget" for adopting new technologies. For AI products, a significant portion of this budget is non-negotiably spent on the AI models and their surrounding experimental scaffolding. This makes the argument for choosing boring technology in other parts of the system even stronger, to offset the inherent novelty and unknowns of AI.
Many teams building Retrieval-Augmented Generation (RAG) systems default to dedicated vector databases like Pinecone or Weaviate for storing and querying embeddings. While these offer specialized performance, they introduce significant operational complexity:
The article proposes `pgvector`, a PostgreSQL extension, as a "boring" alternative. It allows storing, querying, and transacting with vectors directly within PostgreSQL, using familiar SQL and existing database management practices. While its performance ceiling might be lower than dedicated vector databases, it is sufficient for most applications and dramatically simplifies infrastructure management and data consistency.
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
content text NOT NULL,
embedding vector(1536),
metadata jsonb,
created_at timestamptz DEFAULT now()
);
CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
SELECT id, content, metadata, 1 - (embedding <=> $1::vector) AS similarity
FROM documents
ORDER BY embedding <=> $1::vector
LIMIT 10;Similar to vector databases, the article extends the "boring technology" principle to AI agent frameworks like LangChain or AutoGen. These frameworks, while powerful, are new and rapidly evolving, meaning users often act as beta testers, dealing with undocumented failure modes and complex dependencies. The alternative proposed is to implement core functionalities, such as tool calling and basic agent loops, with custom, lean code. This reduces external dependencies and provides developers with complete understanding and control over their system's logic, enhancing debuggability and maintainability.