There’s a phrase I’ve heard in roughly fifty different conversations across roughly fifteen different teams over the years. The wording varies; the meaning is the same.“Can we just add a compliance checkbox?” The version of the question is usually about a feature that handles regulated data. The team wants to ship. The compliance review hasn’t happened yet, or has happened and produced concerns. Somebody on the team — sometimes a product manager, sometimes an engineer, sometimes a director of engineering — proposes adding language to the privacy notice, or a configuration flag, or a button somewhere in the admin panel, that will satisfy the review. The team can ship. Compliance is, technically, addressed. Everybody moves on. This works almost never. The work that compliance actually requires is not a checkbox. It’s a set of architectural commitments that change how the system handles data, who can access what, what gets logged, how long things are retained, and what happens when somebody asks for their data back. I want to lay out, from real experiences across real engagements, what compliance work actually costs and what the cost of skipping it actually looks like. What “performative compliance” looks like The pattern of performative compliance has a few recognizable shapes: The privacy notice that says “we encrypt data at rest” when the database has unencrypted disk-level access for half the engineering team via direct shell. The data deletion request flow that flips a deleted boolean on the user record, leaves the data fully intact in the database, and lets the user assume their information is gone. The audit log that exists, but whose retention is 7 days because nobody set it, in a system where the retention is supposed to be 6+ years. The access control that’s enforced at the application layer correctly, but whose database has a single shared service account with full read access for every microservice, including the analytics warehouse that doesn’t actually need patient identifiers. The third-party SDK in the mobile app that captures full request payloads to a vendor who isn’t covered by the BAA (Business Associate Agreement, a HIPAA term). In each of these cases, the privacy notice or the admin UI shows compliance. The reality is something else. The team isn’t lying, usually. They’ve added the surface that satisfies the review. They haven’t done the underlying work. Compliance is performative. The example that sticks with me is a shared drive. Policy was unambiguous: any storage holding PHI required the elevated authorization tier — the one with restricted membership, access reviews, the full treatment. And every drive that had been set up to hold PHI had it. The gap was a drive that hadn’t been set up to hold PHI. It started as a convenience — a place for teammates to pass files back and forth — and it was provisioned with basic authorization, because that’s what a scratch share needs. Then, over time, the files being passed back and forth started including regulated data. Extracts for a debugging session. A spreadsheet for a reconciliation. Eventually, files containing PHI, sitting on a drive whose access list was essentially “the team, plus whoever had been added over the years, minus nobody.” No one realized, because no decision had ever been made — every individual file drop was reasonable, and nobody was looking at what the drive had become. What’s telling is how it surfaced. Not an audit. Not an access review. A new server was being stood up, and the legacy structure had to be replicated onto it — which meant somebody finally had to walk the actual drives, one by one, and look at what was on them and how each was secured. The mismatch was obvious the moment anyone looked: regulated data, basic authorization. It had been obvious for years. The compliance surface described the intended data flows, and on paper the organization protected its PHI everywhere PHI was supposed to be. The actual data had wandered somewhere the surface didn’t cover, and the only reason anyone found it was that a migration forced an inventory no process had ever required. The cost of performative compliance is real, and it usually shows up in one of three forms. The first cost: the audit you can’t pass The most direct cost surfaces during a real audit. This can be a regulator audit (rare but consequential), a customer audit (more common, especially for B2B), or an internal review by a privacy officer who’s doing their job. The audit asks specific questions. “Show me the audit log entry for every access to patient X’s record over the last six months, with the user identity and the purpose of access.” If your audit log doesn’t capture purpose, you can’t answer. If your audit log isn’t queryable by patient, you can’t answer. If your audit log is in a system that’s been rotating data after 30 days, you can’t answer. The audit isn’t asking whether you’re compliant in the abstract. It’s asking whether you can actually demonstrate the control in operation. The performative version produces a privacy notice; the audit asks for evidence; the evidence isn’t there. I’ve watched this conversation play out from the engineering side. The privacy officer asks for the data. The engineering team starts looking. The data isn’t where they thought it was. Or it’s there but in a form that requires a custom query to extract. Or the form is workable but the volume is so large that running the query takes hours. The audit doesn’t fail because the team was lying. It fails because the team didn’t build the system to support the question. The second cost: the breach response you can’t execute Most compliance regimes require breach notification within a specific window. HIPAA requires notification to affected individuals and HHS within 60 days of discovery, with shorter windows for breaches affecting more than 500 individuals. GDPR requires notification to the supervisory authority within 72 hours. The notification is supposed to include specifics. What data was affected. Which users were affected. How they were affected. What the response is. A team that hasn’t done the architectural work can’t produce these specifics on a 72-hour timeline. The audit log doesn’t support the queries. The data lineage isn’t tracked. The list of affected users requires a custom analysis that takes a week. Now you’re in a worse position. You’re past the notification deadline. The information you have is approximate. Either you delay the notification (which is a separate compliance violation) or you notify with inadequate specifics (which can compound the original incident). The teams that can respond cleanly are the ones that did the work in advance. Audit logs that support the queries. Data lineage that lets you trace what data flowed where. Inventory of which systems hold what categories of data. The boring work that pays off only in incidents. The drive I described earlier is my reference point for this. Once it was found, the immediate questions were the breach-response questions, even though nobody was yet calling it a breach: what exactly is on this drive, and who has accessed it? The answers were supposed to come from the system. They came instead from a meeting. The whole team, in a room, walking through folder trees that had been accreting for twenty years — because the drive predated most of the people in the room, and no one knew what was in all the folders and subfolders, let alone why. Files from projects nobody remembered. Extracts whose source systems had been decommissioned. Names of former employees in the access list like rings in a tree trunk. Reconstructing contents was slow but tractable: open the folders, look, classify. Reconstructing access was the part that exposed the real gap. A basic-tier share doesn’t keep a meaningful access history — that’s part of what makes it basic — so “who has seen the PHI” had no queryable answer. The honest reconstruction was: everyone on the access list, at any point in twenty years, potentially. That’s not an answer you can put in a 60-day HIPAA notification, and it’s certainly not one you can produce inside GDPR’s 72 hours. We were lucky the exercise was precautionary rather than driven by a known exposure. If a regulator’s clock had been running, the meeting-as-audit-log would have been the finding, independent of whatever the drive held. The third cost: the technical debt that compounds The third cost is the most insidious. Performative compliance doesn’t just leave the system unprotected; it actively builds technical debt that makes real compliance harder. The fake “delete” flag, once it’s been used for a while, becomes load-bearing. Application code starts checking it. Reports filter on it. The actual deletion is harder later because the system has accreted assumptions that the data is still there. The monolithic service account with full database access, once it’s been deployed, becomes a dependency. Every microservice using it. Every analytics query. Splitting into per-service accounts later is months of careful work, with regression risk on every step. The audit log without retention policies grows. The size of the data makes the migration to a proper retention strategy harder. Eventually the team decides it’s too risky to touch and the log just keeps growing, with parts of it that are 8 years old, parts that are 3 days old, and no clean way to enforce a uniform policy. The pattern is the same in each case. The team did the easy thing. The easy thing got entangled with everything else. Doing it correctly, later, is more expensive than doing it correctly the first time would have been. What compliance work actually costs To make the comparison concrete: what does compliance actually cost as engineering work, when done correctly? For a system handling regulated data: Architectural decisions about data deletion (cascading vs. anonymization vs. tombstoning) — usually a week of design work plus weeks of implementation, distributed across the services that hold the data. Audit logging infrastructure — typically a multi-week build for a structured, queryable, retention-protected log, plus integration into every service that touches regulated data. Data minimization in API design — adds time to every API design. The endpoints get more specific. The DTOs get more deliberate. Maybe 10-20% time tax on API work, sustained. Data subject access request orchestration — multi-week build for the orchestrator, plus an export endpoint per service that holds user data. Encryption management — managed KMS integration, key rotation cadence, application-layer encryption for the most sensitive fields. A multi-week project the first time, then ongoing operational work. Third-party SDK review — adds time to every integration decision. SDKs that handle data go through a review. Some get rejected. Compliance training and culture — recurring time investment, not a one-off. The total, over a multi-quarter period for a sufficiently complex system, is real. Probably 15-25% of the engineering effort on a compliance-bearing service goes into compliance-specific work, in a system that’s been designed correctly. Less if you started with the right architecture. More if you’re retrofitting. The cost of performative compliance, by comparison, is roughly zero up front. The cost in incidents, audits, and rework is much higher than the original investment would have been. I’ve watched the multiplier on this, and it’s somewhere between 3x and 10x depending on the specifics. Doing it right the first time isn’t free, but it’s much cheaper than doing it wrong and having to redo it later. What distinguishes the teams that get this right I’ve worked alongside teams that did compliance well and teams that didn’t. The teams that got it right shared a few characteristics. They had a privacy officer or equivalent role embedded with engineering, not isolated in a legal function. The privacy officer attended design reviews. They asked questions during the design phase, not at the audit phase. They treated compliance as a design constraint, not an add-on. Data minimization was part of every API design. Audit requirements were part of every service spec. The architectural decisions were made with the constraints in mind. They built the boring infrastructure. Data catalogs. Lineage tracking. Audit log query layers. Data subject access request orchestration. None of it produced features the customer would see. All of it determined whether the team could respond when the audit or incident came. They were comfortable saying no. Not every feature ships. Not every integration happens. Some are blocked or modified because the compliance cost is higher than the value. The teams that ship everything are the teams that fail audits. The team from the drive story is my favorite example, precisely because they earned it the hard way. After the twenty-year drive was found and untangled, the response wasn’t just to fix that drive — it was to make the category impossible to recreate. Folder structures were streamlined, and creation stopped being casual: a new share now comes into existence with a stated purpose, an owner, and an authorization tier matched to what it’s declared to hold. Access follows the same discipline — granted deliberately, reviewed rather than accreted. And because the original failure was drift — content wandering away from a share’s declared purpose — they added the control that actually addresses drift: regular audits and sweeps of what’s in the folders, not just who can open them. A share declared as scratch space gets checked for regulated data anyway, because “declared” and “actual” are exactly the two things the old drive proved can diverge for twenty years without anyone noticing. None of this is sophisticated. There’s no clever tooling in it. It’s inventory, ownership, tiering, and periodic verification — the boring infrastructure. But it converts data governance from a one-time provisioning decision into an ongoing process, and drift is precisely the failure mode that one-time decisions can’t catch. The old drive wasn’t misconfigured on day one; it was correctly configured for what it was on day one, and then twenty years happened. What I’d say to the team considering the checkbox If I’m in the room when the question comes up — “can we just add a compliance checkbox?” — the response I’ve landed on is usually some version of this: The checkbox isn’t the work. The work is the architectural changes that the checkbox is supposed to be evidence of. Adding the checkbox without the architecture means we ship something that says we’re compliant when we aren’t. When that gets discovered — and it will, in an audit, in an incident, in a customer review — the cost is much higher than the architecture would have been. If we genuinely don’t have time to do the architecture, the right answer is to delay shipping the feature, not to ship with a checkbox. If we can’t delay, the right answer is a smaller feature that we can do correctly, not the full feature with the corners cut. The conversation isn’t always well-received. Product wants to ship. Engineering leadership wants to keep velocity. The compliance work is invisible until something goes wrong, and the people advocating for it are advocating for invisible work that costs visible time. But the alternative is a system that builds up performative compliance debt until something goes wrong, at which point the cost of fixing it is paid all at once, usually under regulatory or customer pressure, usually with engineering teams that don’t have the context to do it cleanly anymore. The hidden cost of the checkbox is real. The visible cost of doing the work is also real. The difference is that the visible cost is bounded and predictable. The hidden cost compounds and surfaces when you can least afford it. I’ll end with where this landed for me personally. I’m the one who pushes releases, and these days I couldn’t ship a checkbox-compliance shortcut even if I were tempted to. Because of the protocols that came out of the drive incident, nothing goes out on my say-so alone: a release needs sign-off from development, from security, and from client management before I can push it. The “can we just add that one thing before the release” conversation still gets started sometimes — that pressure never fully goes away — but it dies at the gate, because “just add it” now means convincing three separate parties with three separate sets of concerns, one of whom is paid specifically to ask what the thing does to the data. The shortcut is no longer cheaper than the work. That’s the honest lesson I’d offer, and it’s slightly different from “have the courage to say no.” Courage is unreliable — it depends on who’s in the room, how tired they are, and how loud the deadline is. The teams that get this right don’t depend on someone heroically stopping the checkbox conversation. They build a release path where the conversation has nowhere to go. It took a twenty-year-old drive full of unnoticed PHI to buy us that path. The teams that figure this out early ship slower for a quarter and faster for years. The teams that don’t ship faster for a quarter and spend the next two years paying for it. After watching this play out across more engagements than I’d like to admit, the math is clear, even when the local incentives push in the wrong direction. Compliance isn’t a checkbox. It’s an architectural commitment. Treat it as one and the work goes well. Treat it as an afterthought and the cost finds
The Hidden Cost of “Just Add a Compliance Checkbox”: A Healthcare Engineer’s Field Notes
Full Article
Original Source
Read the full article at Hackernoon →KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.