Software Engineering
Guides on vibe coding, spec-driven development, testing, databases, Git, and building systems that don't fall over.
- Which Code Hosting Platforms Ban AI-Generated Code? Codeberg and SourceHut restrict AI-generated code, Stack Overflow bans ChatGPT answers. What each policy says, when it takes effect, and how enforcement works.
- How to Prevent AI Code Detectors From Flagging Your Code AI code detectors flag style, not origin. Learn what makes code look machine-generated, how to write code that doesn't get flagged, and when hiding it is the wrong move.
- What Watermarks Do LLMs Leave in Generated Code? Text watermarks like SynthID-Text and Claude's watermark exist — but code has no deployed watermark yet. Here's how watermarking works and why code resists it.
- Can AI-Generated Code Be Detected? No reliable way to detect AI-generated code exists. Detectors claim high accuracy but mislabel human code and are easy to evade. What actually works instead.
- What Is an AI Agent? An AI agent is a program that uses a language model to decide and act — calling tools, reading files, and iterating until a task is done. Learn how they differ from chatbots.
- What Is Vibe Coding (and Where Does It Break Down)? Vibe coding is building software by prompting AI and accepting what works, without reading every line. Learn what it is and exactly where it fails.
- What Is Spec-Driven Development? Spec-driven development writes a specification before code, so AI agents build from explicit intent. Learn how it fights intent drift and context decay.
- How to Write a Spec an AI Coding Agent Can Actually Follow Write specs that produce reliable AI-generated code: explicit goals, edge cases, non-goals, and acceptance criteria. A practical, template-driven guide.
- What Is Context Engineering? Context engineering is the skill of curating what an AI model sees so it produces the right output. Learn why it's replacing prompt engineering.
- How to Optimize Token Usage When Coding with AI Every AI coding session burns tokens. Learn the five levers that cut token spend 50-80%: prompt compression, caching, model routing, output control, and context pruning. Practical techniques for vibecoders and teams.
- Monolith vs Microservices: Which Should You Start With? For most projects, start with a monolith and split later. Microservices solve scaling and team problems you likely don't have yet. A direct comparison.
- REST vs GraphQL vs gRPC: Which API Style Should You Use? REST, GraphQL, and gRPC each fit different needs: simple HTTP, flexible queries, or high-performance service-to-service calls. A comparison table.
- Self-Hosted AI Coding Models in 2026: The Practical Review The gap between open-weight and proprietary coding models is closing fast. Compare Kimi K3, GLM-5.2, Qwen3-Coder, Gemma 4, DeepSeek V4, and more. Benchmarks, hardware requirements, and honest recommendations for every budget.
- How to Coordinate Multiple AI Coding Agents on One Codebase Running multiple AI agents in parallel sounds fast, but without coordination they overwrite each other's work. Learn six patterns that keep parallel agents safe: spec-driven decomposition, git worktrees, role splits, model routing, verification gates, and sequential merges.
- What Is Database Indexing (and Why Is My Query Slow)? A database index is a lookup structure that lets queries find rows without scanning the whole table. Learn how indexes work and why queries are slow.
- How to Add an Index to a Slow SQL Query Diagnose a slow query with EXPLAIN, add the right index, and verify the speedup. A practical PostgreSQL tutorial.
- How to Choose the Right AI Coding Tool for Your Workflow Compare the 8 best AI coding tools of 2026: Claude Code, Cursor, GitHub Copilot, OpenAI Codex, Windsurf, Gemini CLI, Lovable, and Bolt. Decision guide for vibecoders of every skill level, budget, and project type.
- What Is the N+1 Query Problem? The N+1 problem fires one query per row instead of one query total, and AI-generated ORM code causes it constantly. Learn it with a code example.
- What Is Technical Debt? Technical debt is the future cost of shortcuts taken today — and AI-generated code creates it faster than ever. Learn to recognize and manage it.
- How to Review AI-Generated Code Like a Senior Engineer A practical checklist for reviewing AI-generated code: correctness, security, edge cases, and intent. Review what the assistant skips, not just what it wrote.
- What Is a Code Smell? A code smell is a surface clue that deeper problems lurk in the code — like duplicated logic or a function doing too much. Learn the common smells.
- What Is Test-Driven Development (TDD)? TDD writes a failing test first, then the minimum code to pass it, then refactors. Learn the red-green-refactor cycle and why it matters.
- How to Write Your First Unit Test Write your first unit test in Python with pytest: a real function, a real test, and the red-green cycle. A first-principles tutorial for beginners.
- Unit vs Integration vs End-to-End Tests: What's the Difference? Unit tests check one piece, integration tests check pieces together, and end-to-end tests check the whole user flow. A comparison table.
- What Is Semantic Versioning (SemVer)? Semantic versioning is the MAJOR.MINOR.PATCH scheme that tells consumers what a version change means. Learn how to read and apply it.
- Monorepo vs Polyrepo: Which Should You Use? A monorepo holds all projects in one repository; a polyrepo splits them. Compare the trade-offs for sharing code, CI, and team autonomy.
- How to Write a Good Git Commit Message A good commit message states what changed and why in an imperative, one-line subject. Learn the format that keeps history useful.
- What Is Git Rebase (and When Should You Use It Instead of Merge)? Merge preserves history with a merge commit; rebase replays your commits on top for a linear history. Learn the difference and when to use each.
- How to Resolve a Git Merge Conflict Resolve a Git merge conflict step by step: read the conflict markers, choose the right change, and finish the merge — without losing work.
- What Is Caching (and the Most Common Ways to Get It Wrong)? A cache stores frequently used data for fast retrieval. Learn how caching works, why it helps, and the classic ways to get it wrong.
- How to Add Redis Caching to Your App Add Redis caching to a Node.js app: cache a slow endpoint, invalidate on writes, and set expiry. A practical, working tutorial.
- What Is Idempotency (and Why Does It Matter for APIs)? An idempotent operation can be retried safely — doing it once or many times has the same effect. Learn why payments and webhooks depend on it.
- What Is Rate Limiting? Rate limiting caps how many requests a client can make, protecting your API from abuse and overload. Learn the strategies and why you need it.
- How to Add Rate Limiting to an API Add rate limiting to a Node.js API with the express-rate-limit middleware: per-user limits, 429 responses, and retry headers. A working example.
- What Is a Race Condition? A race condition happens when the outcome depends on the timing of concurrent operations. Learn it with a concrete code example and the fixes.
- Why Do .env Files Keep Leaking Secrets? .env files leak because they're easy to commit by mistake and AI assistants have no convention against it. Learn the failure and how to stop it.
- How to Manage Secrets and Environment Variables Properly Store secrets outside your code: environment variables for config, a secret manager for sensitive values, and never commit .env files. A practical guide.
- What Is Multi-Agent Coding (and Why Do Agents Conflict With Each Other)? Multi-agent coding runs several AI agents on one codebase in parallel — and they step on each other's changes. Learn the failure modes and how to manage them.
- What Makes a Codebase "AI-Friendly"? An AI-friendly codebase gives agents clear conventions, modular files, and tests so they make fewer mistakes. Learn the traits that make AI coding work.
- What Should You Actually Look For in a Code Review? A code review checks correctness, security, readability, and tests — in that order. Learn the checklist that catches real problems, not just style.
- How to Structure a Python or Node.js Project From Scratch A clean project structure for Python and Node.js: separate source, tests, and config, with a layout that scales and that AI agents can navigate.
- Software Engineering for AI Builders: The Concepts Your Coding Assistant Won't Teach You Your AI writes the code, but it doesn't teach you testing, architecture, databases, or Git. Learn every software engineering concept you need to go from vibecoding to shipping. 45+ linked guides.
- What Is the Twelve-Factor App Methodology? The Twelve-Factor App is a set of principles for building portable, cloud-native software — from config in the environment to stateless processes.
- How to Work With an AI Coding Assistant Without Creating a Mountain of Tech Debt AI assistants generate code fast — and generate tech debt faster. Duplicated logic, dead code, over-engineered abstractions. Here's the system for catching these before they accumulate: review, deduplicate, simplify, delete.
- How to Stop AI Assistants from Duplicating Code Across Your Project AI assistants can't see your entire codebase, so they duplicate validation, formatting, and helper functions everywhere. Here's how to find duplication, extract shared code, and prevent the AI from copying itself again.
- How to Find and Remove Dead Code Your AI Assistant Left Behind AI assistants leave dead functions, unused imports, and abandoned abstractions everywhere. Here's how to find dead code with grep and IDE tools, delete it safely, and stop the AI from generating more.
- How to Simplify Overly Complex AI-Generated Functions (Without Breaking Them) AI assistants over-engineer everything — factory patterns for one implementation, abstract classes for nothing, 5 nested conditionals for a yes/no. Here's how to simplify AI-generated code to match the actual complexity of the problem.
- How to Make Your Codebase AI-Friendly: A Complete Guide Your AI assistant is only as good as the codebase it reads. Structure files for context windows, name things consistently, and write comments the AI actually uses. Complete practical guide for making any codebase AI-friendly.
- How to Structure Files So AI Agents Don't Break Your Architecture AI agents generate code in the wrong files, break module boundaries, and turn your project into a monolith. Here's how to structure directories and files so AI agents generate code that fits your architecture.
- How to Name Things So AI Assistants Generate Better Code AI assistants pattern-match on your existing names. Inconsistent naming produces inconsistent AI-generated code. Here's the naming system — descriptive, searchable, consistent — that makes AI assistants generate code that fits your project.
- How to Write Comments That AI Assistants Actually Read and Use AI assistants read your comments to understand intent and constraints. But they ignore noise and copy bad patterns. Here's what to write — intent over mechanics, constraints over descriptions, and contracts over implementation.
- How to Debug AI-Generated Code: A Complete System for When You Don't Understand What the AI Wrote Your AI wrote 300 lines and you don't know what any of it does — and now it's broken. Here's a repeatable debugging system: isolate, bisect, instrument, explain. No prior understanding required.
- How to Debug an AI-Generated API That Returns Wrong Data Your AI built an API endpoint. It returns 200 OK with wrong data. Here's how to trace request → handler → response when you didn't write the handler — isolate the broken function, instrument it, and get a targeted fix.
- How to Debug AI-Generated Database Queries That Return Wrong Results Your AI wrote a database query. It runs, but returns the wrong data — missing rows, wrong counts, stale results. Here's how to extract the raw SQL, test it directly, and fix it without the AI rewriting your whole data layer.
- How to Find Which AI-Generated Change Broke Your App Using Git Bisect Your AI made 15 commits yesterday and now something's broken. git bisect pinpoints the exact commit in minutes without reading any code — just a yes/no test. Step-by-step for AI builders.
- Eventual Consistency vs Strong Consistency: What's the Difference (and When Does It Matter)? Strong consistency guarantees all readers see the same data immediately. Eventual consistency saves latency and availability but lets reads return stale data. Here's when each is the right call.
- What Is an API Gateway (and When Do You Need One)? An API gateway is a single entry point that routes, authenticates, and rate-limits all your API traffic. Learn what it does and when it's overkill.
- What Is a Database Transaction (ACID)? A transaction groups database operations so they all succeed or all roll back. Learn ACID, why transfers need it, and how to use it in code.
- What Are Database Migrations (and Why Do They Break Deploys)? A migration is a versioned change to your database schema, applied in order. Learn how they work and the failure modes that take down deploys.
- What Is an ORM (and When Should You Use Raw SQL)? An ORM maps database tables to objects so you write queries in your language. Learn what it hides, what it costs, and when raw SQL is the right call.
- What Is Eventual Consistency (and Why Do My Reads Return Stale Data)? Eventual consistency means a write becomes visible everywhere after a delay. Learn why distributed systems use it and when stale reads are a problem.
- What Is Memoization (and When Does It Actually Help)? Memoization caches a function's results by its arguments so repeat calls skip the work. Learn when it's a huge win and when it's wasted effort.
- How to Refactor AI-Generated Code Without Breaking Your App Your AI assistant wrote a 400-line function and you need to clean it up. Here's the step-by-step refactoring loop that keeps tests green — one small change at a time, with the diff you can actually review.
- What Is Linting (and Why Does the AI's Code Keep Failing It)? A linter checks code for bugs, style problems, and dangerous patterns before it runs. Learn how to set one up and why AI-generated code needs it.
- How to Debug AI-Generated Code When You Don't Understand It Debugging code you didn't write is a skill. Learn the method: read the error, reproduce minimally, bisect the change, and interrogate the code.
- What Is Refactoring (and How Do You Do It Without Breaking Everything)? Refactoring restructures code without changing behavior. Learn the rule that makes it safe and how to use AI for it without breaking your app.
- How to Write a README That People (and AI) Can Actually Use A good README tells a stranger how to run your project in two minutes. Learn the six sections that matter and what AI agents read in yours.
- What Is Version Control (and Why Do You Need It)? Version control records every change to your code so you can compare, revert, and collaborate. Learn the core concepts and the habits that matter.
- What Is AI Code Validation? AI code validation is the process of verifying that code generated by an AI assistant is correct, secure, and fit for production. Learn what to check and how.
- What Is a Git Merge Conflict? A merge conflict happens when two branches change the same part of a file. Learn what causes them, how to read the markers, and how to resolve them.
- Why Does the AI's Code Keep Failing Linting (and How to Fix It)? Your AI assistant generates code that fails every lint rule. Here's why, which rules to enforce in CI, and how to auto-fix the AI's output before it merges.
- What Is Continuous Delivery? Continuous delivery means every code change is automatically built, tested, and kept ready to deploy at any moment. Learn how it differs from CI and continuous deployment.