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

推荐订阅源

N
News | PayPal Newsroom
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
大猫的无限游戏
大猫的无限游戏
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
S
SegmentFault 最新的问题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
V
Vulnerabilities – Threatpost
博客园 - 三生石上(FineUI控件)
Recorded Future
Recorded Future
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
T
The Exploit Database - CXSecurity.com
Schneier on Security
Schneier on Security
H
Help Net Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
M
MIT News - Artificial intelligence
W
WeLiveSecurity
P
Proofpoint News Feed
A
About on SuperTechFans
S
Securelist
I
InfoQ
G
Google Developers Blog
博客园 - 司徒正美
博客园 - 叶小钗
Latest news
Latest news
F
Fortinet All Blogs
G
GRAHAM CLULEY
腾讯CDC
Jina AI
Jina AI
S
Schneier on Security
I
Intezer
V
Visual Studio Blog
美团技术团队
V2EX - 技术
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
罗磊的独立博客
Y
Y Combinator Blog

Nik Ogura

Gambling on Failure | Nik Ogura DDCRI: Declarative, Deterministic, Continuously Reconciling Infrastructure | Nik Ogura Stop Holding Out for a Hero | Nik Ogura Don't Paint Yourself Into a Corner | Nik Ogura Most Infrastructure as Code Is Broken — and Reconciliation Is Only Half the Reason | Nik Ogura Continuous Acceptance Tests | Nik Ogura There's More Than One Way to Get Observability Right | Nik Ogura Put Dex In Front of Google OAuth | Nik Ogura Incident Management | Nik Ogura C-Style Thinking vs Go-Style Thinking | Nik Ogura 'Can' vs 'Does' | Nik Ogura Control Repositories | Nik Ogura Trunk-Based Development | Nik Ogura Web3 Is Just Infrastructure With a Hoodie | Nik Ogura "Design Me a Highly Resilient Database" | Nik Ogura Security Is Infrastructure | Nik Ogura Metrics, Logs, Traces, and Events: What's Actually Different | Nik Ogura Distributed Tracing: A Practical Guide | Nik Ogura Prometheus and OpenTelemetry: How They Fit Together | Nik Ogura Puppets and Octopi: Why Top-Down Orchestration Hits a Wall | Nik Ogura The Best Dog Trainer in the World - Or Why Getting Better Isn't Helping | Nik Ogura FluxCD vs ArgoCD: Architectural Comparison | Nik Ogura GitOps | Nik Ogura GitHub Actions Reference Implementation | Nik Ogura Shell Functions | Nik Ogura Engineering Standards | Nik Ogura Cross-Cloud Kubernetes Clusters with AWS IRSA and Talos Linux | Nik Ogura FITFO - Figure It The (Fun?) Out | Nik Ogura Golang Design Tips | Nik Ogura Auto Updating AMI's on a Rolling Window with Terraform | Nik Ogura The Documentation Problem | Nik Ogura Vault Operator Notes | Nik Ogura Coding Standards (especially in Golang) | Nik Ogura TDD (Test-Driven Development) | Nik Ogura Managed Secrets | Nik Ogura Using CircleCI as if it was a Maven Repo | Nik Ogura Dynamic Binary Toolkit: Tools that automatically keep themselves up to date! | Nik Ogura Access and Identity that Just Works | Nik Ogura LocalEnv | Nik Ogura One Shot OpenStack Liberty Installer | Nik Ogura Python Development on MacOS | Nik Ogura IAM Beyond AWS or Hacking Hacks, and the Hackers who Hack Them | Nik Ogura
Nice People Who Give Us Money | Nik Ogura
2026-07-04 · via Nik Ogura

The Seduction of the Interesting Problem

Engineers love a puzzle. It is most of why we got into this. There is a specific pleasure in a hard, well-formed technical problem — a gnarly race condition, a distributed consensus edge case, a data structure that has to be exactly right — and the pleasure is real. I feel it too. Decades in, and a good problem still lights me up.

But the puzzle is not the job. It has never been the job.

We are not paid to solve interesting engineering problems. We are paid to make products. Products are things that make customers happy enough to hand us money and keep handing us money. The interesting problems are something we sometimes get to solve on the way to doing the actual job — they are the scenery, not the destination. Confusing the two is the single most expensive mistake a technical person can make, and almost all of us make it.

You can tell it is happening when the conversation is about the elegance of the solution and not the state of the customer. When the architecture review spends an hour on the message bus and zero minutes on whether anyone will be happier because it exists. When “this is a really cool use of X” is offered as a justification. Cool is not a business outcome. Cool has never once shown up on a P&L.

The complexity ratchet turns partly because complexity is interesting. A new service is a new toy. A new database is a new toy. The service mesh is a very expensive, very interesting toy. Each one is a bet against reliability, and we place the bet because the puzzle is fun, and then we tell ourselves a story about why the customer needed it. The customer did not need it. The customer needed to be happy.

Who the Customer Actually Is

I have a deliberately unsentimental definition of a customer: a nice person who gives us money.

That is the whole thing. Strip away the personas, the funnels, the segments, the TAM slides. On the other end of everything you build is a person who, if you do your job, decides you are worth paying — and, more importantly, decides you are still worth paying next month. They are nice. They chose you. They are, right now, giving you money, which is an act of trust most people undervalue precisely because it is quiet and continuous. Nobody sends a thank-you card for a renewal.

Everything an engineering organization exists to do collapses back to that person. Revenue is nice people giving you money. Growth is more nice people giving you money. Retention is the same nice people continuing to give you money instead of stopping. Every metric on the board is a proxy for the mood of a person you will probably never meet.

Once you hold that definition steady, a lot of arguments end quickly. “Should we spend a sprint on reliability or on features?” is not a real dilemma once you ask which one keeps more nice people giving you money. “Is security worth the friction?” answers itself the moment you remember what a breach does to a nice person’s willingness to keep trusting you with their money and their data. The customer is not an abstraction to be optimized around. The customer is a person whose happiness is the only score that counts.

”Working” Is Not a Property of Your Code

Here is where the vocabulary betrays us, the same way “can” betrays us.

An engineer says a thing “works.” What they almost always mean is: it produced the correct output, once, in an environment they controlled, at a moment they were watching. It worked on their laptop. It worked in the demo. It passed CI. The deploy went green. Every one of those is a statement about the code at a single instant, and not one of them is a statement about a customer being happy.

“Working” is not a property of your code. It is a property of your customer’s experience, sustained over time. The code is an input. The customer’s happiness is the output, and the output is the only thing anyone is paying for.

This is exactly why a 200 OK with a broken body is a failed deployment, not a successful one. The status code is a fact about your server. The empty catalog behind it is a fact about your customer staring at a blank screen, deciding whether you are still worth the money. The server “worked.” The product did not. Those are different claims, and only one of them pays the bills. “Working” has to be measured at the customer, continuously, or it is not measuring anything that matters — because acceptance is a condition, not an event, and so is happiness.

Somewhere along the line the industry decided that reliability, performance, security, observability, and deployability were “non-functional requirements.” The phrase is a catastrophe. It is three words that quietly demote everything that actually keeps customers paying you into an optional garnish on top of the “real” work.

Read it literally. Non-functional. As in: not the function. As in: nice to have, once the important stuff is done. The naming tells engineers, product managers, and executives alike that these are the things you cut when the deadline gets close. They are the first to be descoped precisely because we labeled them as not-the-point.

So let me relabel them, because the label is wrong.

If the system is down, the customer is not happy. That is a functional failure. The function of the product is to make the customer happy, and right now it is doing the opposite. It does not matter that the code is correct — the customer cannot reach the correct code, so from where they sit there is no product at all. Reliability is not non-functional. Reliability is the function, expressed as uptime.

If you cannot ship a fix quickly, the customer stays unhappy longer. A bug you can fix in an hour and a bug you can fix in three weeks are the same bug to your engineers and completely different products to your customer. Deployability — trunk-based flow, fast safe releases, reconciled and self-healing infrastructure — is not operational hygiene you get to someday. It is the speed at which you are allowed to stop disappointing people. That is about as functional as a requirement gets.

If the system is breached, you have taken the one thing the nice person trusted you with — their money, their data, their confidence — and lost it. There is no more functional failure than that. Security is not a bolt-on; it is the ongoing promise that keeps the “nice” in “nice people who give us money.” Break it and the money leaves with the niceness.

And if you cannot see what the customer is experiencing, you are flying blind over the only terrain that matters. Observability — metrics, logs, traces, and events — is not telemetry for its own sake. It is the only way you find out a customer is unhappy before they find out first and leave. Every one of these is functional. Every one of them is the product doing, or failing to do, its actual job. The word “non-functional” should be retired with prejudice.

Delight Does Not Ship. It Persists.

There is a companion lie to “non-functional,” and it is the word “done.”

“Done” sounds like a milestone. A date. A ticket that moves to the last column and stops. But customer happiness is not a milestone — it is a live value that decays the moment you stop feeding it. The feature you shipped last quarter is not “done” delighting anyone; it is either still delighting them right now, this second, or it has quietly rotted while you were looking at the next thing. Data rots. Dependencies drift. Latency creeps. A competitor raises the floor. The customer’s happiness is not a thing you achieved. It is a thing you are either sustaining or losing, continuously, forever.

This is why I bet on failure rather than success. If the definition of “working” is “the customer is happy right now, and will still be happy at 3 AM on a Sunday when an upstream I don’t control ships a breaking change,” then I cannot build for the happy path and call it done. I have to build for the day it breaks — because that day is coming, and on that day the customer does not care how interesting my architecture was. They care whether they are still getting what they paid for.

So there is no “done.” There is only “still working,” which is a claim you have to keep re-earning every minute the service is up. The moment you treat delight as a finished artifact instead of a running condition, it starts to decay, and the customer feels it long before your dashboards do — unless you built the dashboards to watch the customer instead of the server.

The Point

We are not here to solve interesting engineering problems. We get to solve interesting engineering problems, sometimes, as a perk of the actual work. The actual work is nice people who give us money, and keeping them nice, and keeping them paying, by making a product that makes them measurably happier tomorrow than it did today.

Every time you are tempted to call something “done” or “working,” run it through the only test that means anything: is there a nice person, right now, who is happier because of it — and will they still be happy the next time I am not watching? If you cannot answer yes, it is not done and it is not working, no matter how green the pipeline is or how elegant the code.

Reliability, security, observability, deployability — these were never non-functional. They are the difference between a product and a demo. A demo makes a person happy once, on your day, while you are standing there. A product makes nice people happy over and over, on their worst day, while you are asleep. Only one of those gets you the money. Only one of those was ever the job.