Blog & Insights

Technical articles from the ARG Software team on architecture, TypeScript, .NET, DevOps, AI tooling, and the engineering decisions behind reliable software.

The ARG Software blog covers practical software engineering: architecture, TypeScript, .NET, DevOps, AI tooling, and the tradeoffs behind reliable production systems.

We write practical guides on topics like enforcing clean architecture in TypeScript, CQRS without MediatR in .NET, dependency injection patterns in ASP.NET Core, and functional error handling with the Result pattern.

Our DevOps blog posts cover running Docker natively on Windows with WSL2, local Kubernetes clusters with NestJS and PostgreSQL, and debugging microservices with Prometheus and OpenTelemetry.

We also write about software engineering culture, including the art of pull requests, building scalable monorepos with Nx and NestJS, and the real impact of AI on software development teams.

Home Services Our Work Blog Partners Use Cases Careers AI Skills Patterns About Us Working with Us Audit Contact Free Website Audit Browser Extension: Arg Architect Do LLMs Have Memory? How AI Chat Memory Works The AI Code Review Crisis & How to Survive Software Fundamentals Matter More in the AI Era C# DateTime vs DateTimeOffset: 10 Common Mistakes Node.js Logging: Request IDs and AsyncLocalStorage Protect an AI Chatbot: Rate Limits, ALTCHA and Costs LLM Guardrails as Architecture for AI Chatbots RAG Knowledge Base Design: Chunking and Metadata RAG Pipeline Design: 3 LLM Calls Per Question RAG Chatbot Architecture: How We Built Gaspar .NET vs Node.js, Java, Python and Go for CTOs JWT vs Session: The JWT Logout Problem Explained Anemic Domain Model to Rich Aggregates in TypeScript Vector Search in TypeScript for RAG: TurboVec Sidecar Vector Search RAM: TurboQuant and TurboVec Explained The Hidden Tax of Clean Code TypeScript any vs unknown: Migrate Legacy Code On-Chain vs Off-Chain Data: Web3 Architecture Guide ASP.NET Core API Versioning in .NET 10 Minimal APIs Idempotent Consumers: Why Exactly-Once Is Not Enough MikroORM DDD in TypeScript: Persistence Ignorance TypeScript 7 Native Go Port: What to Do Architecture Tests in TypeScript with ArchUnitTS Claude Usage Limits: How to Stretch Your Plan Testcontainers in NestJS: Integration Testing Guide TypeScript Dependency Injection Without a Framework MediatR Alternative: .NET CQRS Without MediatR Clinejection: Prompt Injection Supply Chain Attack Stop Worrying, Embrace the Chaos Prometheus + OpenTelemetry: Debug Node.js Microservices AI Architectural Changes Nobody Wants Ollama vs LM Studio: Run AI Locally (Complete Guide) REST vs GraphQL vs gRPC: API Architecture Styles Polly Circuit Breaker Pattern in ASP.NET Core Pull Request Best Practices: Small and Stacked PRs TypeScript Error Handling with the Result Pattern Scoped vs Transient vs Singleton: DI Anti-Patterns Will AI Take Your Job? Why AI Exposes Talent Chrome Extension with React, Vite and Manifest V3 The Word Sabotaging Your Engineering Team k3d vs Minikube vs Kind: Local Kubernetes for NestJS Docker Desktop Alternative: Docker Engine in WSL 2 Clean Architecture in ASP.NET Core: A Pragmatic Guide Nx NestJS Monorepo Boilerplate: Nx vs Turborepo Angular Upgrade Guide: Migrating Angular 5 to 19