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

推荐订阅源

Last Week in AI
Last Week in AI
D
DataBreaches.Net
腾讯CDC
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
月光博客
月光博客
MyScale Blog
MyScale Blog
U
Unit 42
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
G
Google Developers Blog
博客园 - 【当耐特】
D
Docker
I
InfoQ
雷峰网
雷峰网

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
The Best Abstractions Arrive Late
Drew Marshall · 2026-06-14 · via DEV Community

One of the biggest mistakes I see developers make is trying to design the perfect abstraction before they've built anything.

I've done it myself.

You sit down to design a library, framework, API, or system and immediately start thinking about every possible future use case.

What if someone needs this?

What if they need that?

What if they need five different variations?

What if they need something I haven't thought of yet?

Before long, you're designing version five of a product that doesn't even have a version one.

The problem is that most good abstractions aren't discovered through planning.

They're discovered through friction.

The Temptation To Abstract Early

As engineers, we love patterns.

The moment we repeat something twice, we start thinking about abstractions.

Sometimes that's the right instinct.

Other times it's premature.

The challenge is that before you've built enough, you don't actually know what should be abstracted.

You only know what you think should be abstracted.

Those are not always the same thing.

Many abstractions begin as educated guesses.

The best abstractions begin as observed behavior.

Real Problems Reveal Better Solutions

Recently, while working on responsive layouts, I noticed myself thinking less about CSS and more about intent.

Not because I was trying to invent something new.

Because I kept running into the same friction.

The question wasn't:

"How should this element be styled?"

The question was:

"How should this content behave?"

That subtle difference led me toward an idea like:

<div content adapt="grid" mobile="stack">

What interested me wasn't the syntax.

It was the thought process that produced it.

The abstraction didn't come from a planning document.

It came from repeatedly encountering the same problem while building.

The friction exposed the pattern.

The pattern suggested the abstraction.

Most Frameworks Start With Solutions

Many libraries begin with solutions looking for problems.

Someone creates an abstraction because it feels elegant.

Because it looks clever.

Because it theoretically covers many use cases.

Then reality arrives.

Users do things the designer never anticipated.

Requirements shift.

Edge cases appear.

The abstraction grows.

Complexity accumulates.

Eventually the abstraction becomes harder to understand than the original problem.

We've all seen it.

Sometimes we've built it.

Friction Is Honest

The reason I trust friction more than planning is because friction doesn't lie.

Friction reveals what actually hurts.

Friction reveals repetition.

Friction reveals complexity.

Friction reveals awkward workflows.

Friction reveals where developers are spending mental energy.

When the same pain appears repeatedly, that's usually a signal.

Not that a feature is needed.

That a better abstraction may exist.

The Difference Between Discovery And Invention

I've started thinking about abstractions less as inventions and more as discoveries.

The pattern already exists.

The abstraction simply gives it a name.

Good abstractions feel obvious in hindsight.

You see them and think:

"Of course."

The reason they feel obvious is because they were already present in the problem.

Someone finally noticed them.

Libraries Develop Languages

One of the most fascinating parts of building libraries is watching them develop their own vocabulary.

Not because you planned every word.

Because certain ideas keep appearing.

Certain concepts keep returning.

Certain solutions keep proving useful.

Over time, the library starts developing a language.

A language of patterns.

A language of conventions.

A language of intent.

The best parts of that language are rarely designed in isolation.

They're discovered through use.

Let The Work Teach You

I've become increasingly skeptical of designing large systems entirely from diagrams and planning sessions.

Planning matters.

Architecture matters.

Vision matters.

But eventually the work itself becomes the teacher.

You build.

You struggle.

You notice.

You refine.

Then you build again.

Every cycle reveals something new.

The abstractions that survive those cycles are often the ones worth keeping.

Build First, Abstract Second

This doesn't mean avoiding abstractions.

It means earning them.

Build the thing.

Experience the friction.

Identify the pattern.

Then create the abstraction.

Not because it looks elegant.

Not because it feels clever.

Because reality has demonstrated that it deserves to exist.

I've found that the best abstractions rarely arrive at the beginning of a project.

They arrive later.

After enough mistakes.

After enough repetition.

After enough friction.

That's why I've started believing that the best abstractions arrive late.

Not because they're delayed.

Because they've been earned.