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

推荐订阅源

Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
D
Docker
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Cloudflare Blog
雷峰网
雷峰网
A
About on SuperTechFans
小众软件
小众软件
博客园 - Franky
博客园 - 聂微东
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
量子位
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
罗磊的独立博客
Martin Fowler
Martin Fowler
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
Project Zero
Project Zero
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tailwind CSS Blog
S
Schneier on Security
Blog — PlanetScale
Blog — PlanetScale
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Security Latest
Security Latest
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks

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
Beyond the Code
david2am · 2026-04-28 · via DEV Community

Why communication is the most important skill you're not developing, and what happens when you finally do.

An honest confession from a senior developer ~ 15 min read

I want to start with a confession: this is not a story about how great I am at communication. It is a story about how badly I failed at it, for years, consistently, while being completely convinced I was doing everything right.

And it is a story about what I eventually learned, the hard way, from every collision.

Most developers carry a belief into their careers that goes something like this: my code will speak for me. Learn enough. Ship enough. Be the person with the right technical answer, and the rest follows, promotions, respect, influence, trust. This belief is seductive, and it is not entirely wrong. Technical excellence matters enormously. But it is incomplete. And that incompleteness has a cost that most of us only discover after we've paid it several times over.

"Being right is a technical measurement. The rooms I was standing in weren't measuring technical accuracy. They were measuring something else entirely."


The Collisions

Let me tell you about a situation that still bothers me, not because I handled it badly in an obvious way, but because I was technically correct at every step. And it still cost me.

I had joined a team where a colleague had been the first frontend developer, he had started the project, shaped its early decisions, built its initial structure. When I arrived, I was genuinely impressed by parts of what he'd done. But over time, we started to see things differently. Different approaches to architecture, different instincts about how to solve problems. The kind of friction that's natural when two developers with strong opinions share a codebase.

Collision: CSS, Pipelines, and a Broken Feedback Loop

One day we had a failed deployment. A colleague went to our manager, who was non-technical, and told her it was my fault. I tried to explain that it couldn't have been: I had worked only in CSS that day, and CSS can't break a pipeline. She believed him anyway.

What mattered wasn't the truth. What mattered was that he spoke first, he spoke with authority, and our manager had no way to evaluate the technical claim. The feedback loop between technical reality and the person making decisions was completely broken. There was no mechanism for the truth to reach her.

Soon after, I picked up a ticket that ended up taking nearly two months. I didn't know how long it would take when I started (and I don't think anyone on the team did). It wasn't really a ticket. It was making our entire app accessible, and no one had scoped what that actually meant. Because of the steady stream of delays, my relationship with my manager cooled, not dramatically, but consistently.

Later, the same colleague and I had a genuine technical disagreement about an approach. We both had defensible positions. Our tech lead had to step in to resolve it.

By that point, the manager had already formed a picture of me shaped largely by a dynamic I hadn't fully understood was happening until it was already locked in.

The only thing that saved me to be fired was eating my pride and do consistent work in silent for months! My new approach: "monkey sees, monkey does" because that's the only thing I knew.

I was right about the pipeline. I was right about the technical approach. I was right about the size of the accessibility ticket. None of it mattered. I had been so focused on being technically correct that I had completely failed to manage the perception of the situation. And perception, in a room with a non-technical decision-maker, is the only reality that counts.

Hey it doesn't have to be fair, it's just what it is!


How Focus Shifts Over my Career

Looking back, my evolution as a developer followed a trajectory I suspect is common, though rarely named out loud.

YEARS 1-2
Code
Angular, SQL, TypeScript, CSS. Pure craft. I just wanted to make money writing code, and I did. Nothing wrong with that. Everyone starts here.

YEARS 2-4
Patterns
I noticed some code was easier to live with than others. NgRx, smart vs dumb components, single responsibility. I wasn't just making things work, I was making things last.

YEARS 4-6
Systems
Moving to React exposed what happens when flexibility exists without structure. Design systems, domain separation, testable code, tight coupling avoidance. Architecture began to matter.

YEAR 6-8
Business Rules
No matter how good I am, someone will surpass me by only knowing the business without writing a single line of code (This one really hurt my ego). In fact, coders do whatever the business dictates

YEARS 8 ONWARDS
People
The wall you can't code your way through. The realization that clean architecture, elegant patterns, clear domain and rigorous tests can still fall apart completely because of the human layer you weren't paying attention to.

I spent years making my code more human-readable. It never occurred to me to make myself more human-readable too.


The Lens: Understanding What Was Actually Happening

Once I started looking for frameworks to make sense of my collisions, systems thinking gave me vocabulary I'd been missing. The first model that changed everything was the Iceberg Model.

FRAMEWORK . THE ICEBERG MODEL
Events are the tip. The real problems live below the waterline
When something goes wrong, we see the event, the deployment that failed, the meeting that exploded, the manager who didn't understand. And we react to the event, trying to fix it at the surface.

But underneath: patterns (recurring dynamics), systems (structures producing those patterns), structures (rules, incentives, flows), and at the very bottom, worldviews, the mental models and beliefs that generate everything above them.

Almost every painful professional experience I've had wasn't really about the event. It was about something much deeper: a broken feedback loop, a structural mismatch, a worldview collision. I kept reacting at the surface. The source was always deeper.

The second framework that reframed everything came from Donella Meadows and her work on systems thinking. She wrote about leverage points, places in a system where a small change produces large effects. And in any human system, one of the highest leverage points isn't the technology.

Communication is the mechanism through which information flows in a human system. Which means communication isn't a soft skill adjacent to the real work. Communication is the highest leverage point in almost every system you will ever work in.

Here is when I realize that we form socio-technical systems: both code, and people matters when work needs to be done.

The non-technical manager who believed my colleague about the CSS pipeline, that wasn't incompetence. There was no working feedback loop between technical reality and business decisions. The loop was simply missing. And the colleague who said CSS couldn't break a pipeline, that wasn't malice. It was a worldview so solid it overrode observable fact.

Every one of my collisions had a leverage point I missed. And in every case, it was an information flow problem.


The Identity Trap

There's a reason most developers arrive at this problem unprepared: we collapse our identity into our technical skill.

"I am a developer" becomes "I am someone who writes good code." Full stop. That's the whole identity. And when that's true, every communication failure feels like a personal attack. Every situation where the room doesn't respond to your technical correctness feels like the world is broken because if the code is who you are, being underestimated about the code is being underestimated about yourself.

That's why the instinct is to argue harder. To be more correct. To double down on precision and technical authority.

But the Iceberg tells us that argument is happening at the surface. The real problem lives much deeper. Identity is fractal. You are a developer, yes, and that layer is real and valuable and worth developing. But you are also a colleague, a communicator, a negotiator, a teammate, a human being navigating complex social systems.

THE UNCOMFORTABLE QUESTION
When was the last time you deliberately practiced communication the same way you'd practice a new framework or programming language? With the same intentionality, the same investment, the same willingness to be bad at it before you're good?


What Software Actually IS

These realizations changed not just how I work with people, they changed what software itself means to me.

We tend to think of software systems as technical systems. Inputs, outputs, logic, state. Clean and rational. But every line of code you write connects to a human being, a customer who needs this feature to do their job, a colleague who will read and maintain it in six months, a company whose competitive position depends on whether this works reliably.

Software systems are socio-technical systems. They always were. We just had a convenient story that let us ignore the socio part.

Code carries emotional weight, whether you acknowledge it or not. When you write code that's clear, well-structured, and thoughtful, you're communicating: I care about the people who will work with this after me. When you write code that's clever and opaque and poorly documented, you're also communicating something. Just a different thing.

This extends to architecture itself. Conway's Law states that organizations which design systems will produce systems mirroring their communication structure.

FRAMEWORK . CODE AS CONVERSATION
The words your team uses literally shape the architecture
When your business says "order," your code says "transaction," and your database says "purchase", you have three teams talking about the same thing and never quite understanding each other. That's not a naming problem. It's a communication problem that became an architecture problem.

Having integrity in our thinking generates integrity in the code. The natural conversations we have, or fail to have, will eventually reflect themselves in the codebase. Maintaining the socio part of the system isn't a soft afterthought. It is a systemic design responsibility.


Putting It Into Practice

None of this matters if it doesn't change how you work on Monday morning. So here are the concrete shifts that made the most difference for me.

Move from feature delivery to impact delivery. Most engineering teams are running a hidden operating system: ship tickets, close PRs, measure velocity, repeat. It feels productive because things are always moving. But movement isn't impact. The alternative, impact-driven engineering, changes what counts as valuable work. Discovering a missing feedback loop in how customer requests reach your team? That's engineering. Helping the team self-organize around a clearer shared goal? That's systems thinking. Understanding the business domain well enough to push back on a feature that creates more problems than it solves? That's leverage. Autonomy without vision is just a telephone game.

Communicate constraints explicitly. When everything is a priority, nothing is. Teams operating without clear priorities don't move slower, they move in every direction at once, which is far worse. A compiler needs constraints to optimize. So does a team. When you name the constraint clearly, you give people permission to let go of everything else. You give them clarity of purpose. This isn't a management task. It's an engineering responsibility, and it's one of the highest-leverage things a senior person can do.

Build three mental tools for alignment.

MENTAL TOOLS
Conflict of Interests
Other people's priorities aren't wrong, they're optimizing for different things.

Tradeoffs
Every technical decision is also a human decision. Speed versus quality. Autonomy versus alignment. Robustness versus shipping now. When you name the tradeoff out loud, you stop positioning yourself as the person with the answer and start positioning yourself as the person helping the team think clearly. That's a different, and more powerful, kind of authority.

Incentives
Before reacting to someone's behavior, ask: what system of incentives is producing this? My non-technical manager believed my colleague about the CSS pipeline issue, not because she was gullible, but because her incentive was stability. He gave her a story that preserved stability.


Speaking the Language of Each Level

There is one more dimension to effective communication that took me a long time to name clearly: the same message needs to be told differently depending on who is receiving it, not because people are different in personality, but because they occupy fundamentally different positions in the system, with different timescales, different pressures, and different definitions of what matters.

Ecology gave us a useful model for this. Panarchy theory, developed by C.S. Holling and Lance Gunderson, describes how complex systems are organized in nested cycles across multiple scales, each level operating at its own pace, with its own adaptive logic. A forest, for instance, operates at the scale of individual trees (fast, immediate), stands (medium), landscapes (slow), and biomes (very slow). Each level has its own rhythm and its own concerns. What's urgent at one level may be invisible at another.

Organizations work the same way. And so does the problem of communication inside them.

Framework · Panarchy and Organizational Levels
Every level in a system runs on a different clock, and speaks a different language.
A developer lives and works at the fastest cycle: immediate, concrete, technical. A manager operates one level up, slower, more concerned with timelines and team capacity. A product or business leader slower still, thinking in quarters and user value. And at the slowest cycle of all, executives and CEOs think in years, market positions, and direct impact on users and revenue.

Each level is valid. Each is necessary. And each one makes decisions using a completely different vocabulary. The problem isn't that they don't understand each other, it's that most developers never learn to translate.

Think about a concrete situation: you've identified that a core module needs significant refactoring. It has accumulated technical debt that is slowing down every new feature. Left alone, it will keep getting worse. You need to communicate this, but to whom, and how?

The underlying technical reality is identical across all four conversations. What changes is the frame, the set of concerns, timescales, and vocabulary that makes the message land at that level of the system.

This is not manipulation. It is translation. And it is one of the most undervalued engineering skills in existence.

Most developers default to speaking in their own level's language regardless of the audience. They explain the refactoring to the CEO using the same words they'd use with a colleague, and then feel frustrated when the CEO doesn't engage with the technical argument. The CEO isn't being obtuse. They're operating at a different cycle, with different information needs, and the message simply didn't land in a form they could use.

"The question isn't "how do I explain this technical problem?" It's "what does this problem look like from where they're standing?"


The Urgency of Now

Everything I've described above has always mattered. But it has never mattered more than it does right now, because AI is actively reshaping what developers do.

Think of software engineering as a three-level pyramid. At the top: high-level work, vision, strategy, communication, human judgment. In the middle: what most of us do most of the time, systems thinking, architecture, patterns, the bread-and-butter of senior engineering. At the bottom: specialized, low-level work, performance engineering, compilers, embedded systems, requiring deep, narrow expertise.

AI is eating the middle. And that's where most developers live right now. The people who thrive in that shift are the ones who move deliberately, either up, toward vision and communication and domain mastery, or down, toward specialization that AI can't easily replicate.

What AI will never do: build trust with a nervous stakeholder. Detect the political subtext in a meeting. Know when not to say something. Translate a business panic into a technical reality and back again. Make people feel genuinely heard.

"AI will write the code. The question is whether you can do what comes before and after the code. That has always been the job. We just didn't know it yet."


The Ending I Didn't Expect

A few months ago, my contract with a client ended. It wasn't my choice. And by every conventional measure, that's a hard moment, the uncertainty, the bench time, the open question of what comes next.

But here's what happened.

People inside that client company reached out to say they missed working with me. My manager at the consultancy, who had no contractual reason to go out of her way, started fighting to keep me. She had me interviewing new candidates. She kept presenting me to new clients. She was genuinely worried about what would happen and doing everything she could to ensure I landed somewhere good. Colleagues who knew I might leave at any moment still trusted me not naively, but maturely. They understood the situation. They showed up anyway.

What did I actually do to earn that?

No grand technical triumph. No revolutionary architecture. No brilliant performance in a high-stakes meeting. Just: silent, consistent work. Small, visible improvements. Clear and honest communication, even when uncomfortable. And a genuine effort, every day, to make the people around me feel seen and understood.

That's what trust looks like when it's fully built. Not a promotion. Not a title. People who genuinely care what happens to you, even when the contract is over.


Where to Start

Your technical skills get you in the room. Communication decides what happens to your career once you're there. That's not an argument against technical excellence, go deep on your craft, be the person who understands the system at every level. That foundation is real and it matters.

But build on top of it deliberately. Here are three places to start this week:

  1. Pick one relationship at work and invest in it intentionally. Not strategically genuinely. Ask questions. Try to understand their incentives. See what shifts.

  2. The next time you're in conflict, ask what incentives are producing the behavior you're seeing. Before you react. Before you push back. Just ask.

  3. The next time you have something important to communicate, think about your audience first. Who is in the room? What do they optimize for? How do you make your thinking legible to them?

The most sophisticated thing a senior developer can do is make complexity legible, in code, in systems, and in conversation.

That's the skill nobody teaches. And the one that changes everything.