惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
NISL@THU
NISL@THU
T
Tor Project blog
T
Tenable Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Privacy International News Feed
Cyberwarzone
Cyberwarzone
Project Zero
Project Zero
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
美团技术团队
Hugging Face - Blog
Hugging Face - Blog
V2EX - 技术
V2EX - 技术
H
Help Net Security
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
Forbes - Security
Forbes - Security
人人都是产品经理
人人都是产品经理
U
Unit 42
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
I
InfoQ
Schneier on Security
Schneier on Security
K
Kaspersky official blog
罗磊的独立博客
Cisco Talos Blog
Cisco Talos Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
雷峰网
雷峰网
G
GRAHAM CLULEY
Cloudbric
Cloudbric
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
AI
AI
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
博客园_首页
T
Threat Research - Cisco Blogs
S
Secure Thoughts
有赞技术团队
有赞技术团队

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
ADRs as a Team Habit: The Fastest Path to Better Engineering Decisions
Maxime Sahro · 2026-04-29 · via DEV Community

Lead engineers do not lose time because teams move slowly. They lose time because teams revisit the same decision three times across six months, with no shared memory of why the previous choice was made.

Architecture Decision Records (ADRs) solve that problem.

And if the process is lightweight enough, teams actually use them.

This article shows:

  • why ADRs are a leverage point for engineering leaders,
  • how to remove the friction that kills adoption,
  • and how to bootstrap the practice with create-adr in minutes.

If your goal is better decisions, faster onboarding, and fewer "why are we doing this?" loops, this is for you.

The Real Cost of Missing Decision History

When important technical decisions are undocumented, teams pay hidden tax:

  • repeated debates in refinement and PR reviews,
  • inconsistent implementations across squads,
  • slower onboarding for new engineers,
  • fear of change because intent is unclear.

ADRs create a compact, searchable system of record for architecture and product-technical trade-offs.

What an ADR Is (and Is Not)

An ADR is a short markdown document that captures one meaningful decision:

  • Context: what problem and constraints exist,
  • Decision: what you choose now,
  • Consequences: expected benefits and known downsides,
  • Alternatives: what you considered and why it was rejected.

An ADR is not bureaucracy.

A good ADR should be fast to create, easy to review, and useful 6 months later.

Why ADR Adoption Usually Fails

Most teams fail ADR rollout for one of three reasons:

  1. Too much ceremony: heavyweight templates and long approval chains.
  2. No trigger points: nobody knows when to write one.
  3. Tooling friction: people must create folder/file/number/template manually.

You do not need a bigger process. You need a lower-friction default.

create-adr: Remove Friction, Keep Discipline

create-adr is a small CLI that generates ADR files under docs/adr/ at your repository root.

From any repository root:

npx create-adr "Use URI path versioning for public APIs"

Enter fullscreen mode Exit fullscreen mode

create-adr is compatible with Node (npx) and Bun (bunx).

Examples below use npx only.

You can also pass explicit flags:

npx create-adr --title "Use URI path versioning for public APIs" --path /path/to/repository

Enter fullscreen mode Exit fullscreen mode

What the CLI does for you

It automatically:

  • creates docs/adr/ if it does not exist,
  • picks the next ADR number (0001, 0002, ...),
  • creates a kebab-case filename from the title,
  • writes a markdown template with status/date/sections.

Example generated file:

docs/adr/0001-use-uri-path-versioning-for-public-apis.md

Enter fullscreen mode Exit fullscreen mode

Template sections include:

  • Status: proposed
  • Date: YYYY-MM-DD
  • Context
  • Decision
  • Consequences (expected improvements + identified downsides)
  • Alternatives considered
  • Links

This is exactly the kind of structured speed that drives adoption.

End-to-End Example: A Lead-Engineer Workflow

Let’s say your team needs to decide whether to version APIs in the URL path.

Step 1: Create the ADR shell

npx create-adr "Use URI path versioning for public APIs"

Enter fullscreen mode Exit fullscreen mode

Step 2: Fill only what matters

Focus on the decision quality, not document size:

  • context: client compatibility constraints, timeline, migration risk,
  • decision: adopt /v1/... route strategy for public APIs,
  • consequences: easier backward compatibility, but possible route sprawl,
  • alternatives: header-based versioning rejected for operational complexity.

Step 3: Attach ADR in your PR

In PR description:

  • add a link to the ADR file,
  • require one reviewer to challenge consequences and alternatives,
  • merge decision + implementation together when possible.

Step 4: Use ADR in onboarding

When a new engineer asks "why this pattern?", send the ADR link before scheduling another alignment call.

Anti-Patterns to Avoid

  • Writing ADRs for trivial choices ("rename variable")
  • Treating status as permanently proposed (update as decisions mature)
  • Copy-pasting alternatives without real rejection rationale
  • Creating ADRs without connecting them to implementation PRs

The point is not producing more markdown. The point is producing fewer bad or repeated decisions.

Start Today (Copy/Paste)

Run this in your repository root:

npx create-adr "Choose one high-impact architecture decision title"

Enter fullscreen mode Exit fullscreen mode

Then set a simple team rule: no major technical decision merges without an ADR link.

You will quickly notice:

  • faster alignment in reviews,
  • better context transfer across teams,
  • and stronger engineering leadership through transparent decision-making.

If you want this to stick, make ADRs the easiest possible path.

That is exactly what create-adr is designed to do.

https://npmjs.com/package/create-adr

Looking for a .skill?

If you want to share this approach across teams, share that skill file in your repo so everyone can use the same ADR workflow with a single, consistent prompt.

---
name: create-adr
description: Generates an ADR markdown file and guides stronger Context, Decision, and Consequences writing. Use when the user asks to create an ADR, document a technical decision, or standardize architecture decision workflow.
version: 1.0.0
---

# create-adr Skill

## Purpose

Create a high-quality ADR quickly, with minimal ceremony and strong decision clarity.

## Trigger

Use this skill when the user asks to:
- create an ADR,
- document an architecture/technical decision,
- add decision rationale to a repo,
- standardize decision records across a team.

## Inputs

Collect these inputs before generating:
1. Decision title (required)
2. Repository root path (optional, default: current directory)
3. Key constraints (optional but recommended)
4. At least one rejected alternative (recommended)

## Execution Workflow

### Step 1: Generate ADR shell via CLI

Use `npx` for examples.  
The command is compatible with Node (`npx`) and Bun (`bunx`).

```
{% endraw %}
sh
npx create-adr "Short decision title"
{% raw %}

```

Optional explicit path:

```
{% endraw %}
sh
npx create-adr --title "Short decision title" --path /path/to/repository
{% raw %}

```

The file is generated in:
- `docs/adr/`
- with incremented numbering (`0001`, `0002`, ...)
- and kebab-case naming.

### Step 2: Coach for strong content quality

Guide the user to complete the template with concise, concrete content:

- **Context**: What problem, constraints, and timeline pressure exist?
- **Decision**: What exactly is chosen now?
- **Consequences**:
  - Expected improvements (2+ practical benefits)
  - Identified downsides (at least 1 real trade-off)
- **Alternatives considered**: What was rejected and why?

### Step 3: Enforce practical quality gates

Before marking done, verify:
- Decision is specific and testable in implementation.
- At least one downside is explicit.
- At least one alternative is documented with rejection rationale.
- Links section references issue/PR when available.

## Output Format

Respond with:
1. Generated ADR path
2. A short "quality check" list
3. Optional suggested improvements for missing sections

Use this response template:

```
{% endraw %}
markdown
ADR created: {% raw %}`docs/adr/XXXX-your-title.md`

Quality check:
- Context is clear: [yes/no]
- Decision is explicit: [yes/no]
- Consequences include downsides: [yes/no]
- Alternatives include rejection rationale: [yes/no]

Suggested improvements:
- ...
{% raw %}

```

## Example Usage

User:
"Create an ADR for adopting URI path versioning for public APIs."

Assistant behavior:
1. Run:
```
{% endraw %}
sh
npx create-adr "Use URI path versioning for public APIs"
{% raw %}

```
2. Provide writing guidance for Context/Decision/Consequences.
3. Return ADR path and quality checklist.

## Notes

- Keep ADRs short; optimize for future readability.
- Prefer decision quality over document length.
- This skill complements team review habits; it does not replace architectural discussion.
```
{% endraw %}
`

Enter fullscreen mode Exit fullscreen mode