Free preview

Protecting User Privacy

In one line: the fields that would best explain a client-side failure — traceroute hops, resolver identity, round-trip time — are precisely the fields that locate and fingerprint a person. This constraint shapes the design rather than decorating it.

What to exclude, and why

ExcludeReasonWhat you give up
TracerouteTraceroute hops can reveal geographic locationKnowing exactly where in the path the failure occurred
DNS detailsResolver information leaks locationDistinguishing a DNS failure from a routing failure
RTT and packet lossMay risk identifying the userDistinguishing 'slow' from 'unreachable'

Notice the shape of that table

Every excluded field is excluded because it is diagnostic. Traceroute is useful because it reveals the path — which is the same property that reveals where someone is. Resolver identity narrows down the failure and narrows down the person.

There is no version of this where you get the diagnostic value without the privacy cost, because they are the same information. That is what makes this a genuine constraint rather than a compliance checkbox, and why the answer is minimization rather than anonymization.

The principle worth memorizing

Ideally, web-based clients should only report information that would already appear in the server's weblogs during a successful request.

That is an unusually clean test. If a successful request would have put the field in your logs anyway, reporting it on failure reveals nothing new. If it would not, you are collecting something you would not otherwise have — and the failure is not a licence to collect it.

Custom applications have more latitude

Custom client applications offer flexibility in diagnostic data, while browser-based clients require strict minimization.

The difference is the consent relationship. Someone who installed your application has agreed to a specific, visible privacy policy. A browser visiting a website has not agreed to anything comparable, and browsers deliberately restrict what a page can learn about its environment precisely to prevent fingerprinting.

This is the same "do we control the client?" question from Lesson 5, appearing again — and it cuts the same way. Owning the client buys you both capability and the standing to ask for more data.

Two further constraints

ConstraintDetail
No active probing beyond normal functionAvoid active probing beyond standard service functionality — the agent reports on requests the user was already making; it does not generate extra network activity to investigate
End-to-end encryptionEnsures that intermediaries — ISPs or middleboxes — cannot tamper with the error reporting mechanism

Encryption here protects integrity, not just confidentiality

The stated reason is that intermediaries cannot tamper with the reporting mechanism — not merely that they cannot read it.

That matters more than it first appears. The failures this chapter is about are frequently caused by intermediaries: a misrouting ISP, a misbehaving middlebox, a CDN in the path. An intermediary that can modify error reports could suppress evidence of its own failure.

So encryption is not a general good-practice note here. It protects the reports from the very parties whose faults they describe.

The governing rule

Collect the minimum amount of information necessary, and use it only for the specific purpose consented to by the user.

Two clauses, and the second is the one teams forget. Data collected for outage detection is for outage detection — not for analytics, not for product decisions, not for a model. Repurposing it breaks the consent it was gathered under, even though the data was collected legitimately.

Conclusion

TakeawayDetail
It's difficult but essentialDetecting client-side errors in distributed systems is difficult but essential to maintaining a good user experience
The mechanismAn embedded agent reports failures to a collector — deployed on infrastructure independent of the primary service to ensure reliability during outages

Key takeaway

The most diagnostic fields are the most identifying ones, so minimize rather than anonymize. The test: would this appear in our weblogs on a successful request? If not, do not collect it — and encrypt what you do send, because the intermediaries in the path may be the fault you are reporting.

Interview signal by level

LevelWhat a strong answer sounds like
L4"We'd let users opt out of error reporting."
L5Minimizes deliberately: "no traceroute or DNS resolver details, because they leak location — collect the minimum needed to spot a spike."
Staff+Gives the test and the integrity argument: "the rule I'd apply is whether the field would already be in our weblogs on a successful request — if not, the failure isn't a licence to collect it. And encryption here is about tamper-resistance, not secrecy: the intermediaries that cause these failures shouldn't be able to suppress reports about themselves."

Next: the whole design under interview conditions.

Enjoying the preview?

Create a free account to unlock the rest of this course, the in-browser judge, and live AI mock interviews.

Sign up free to continue