{"id":4702,"date":"2026-08-28T01:15:27","date_gmt":"2026-08-28T04:15:27","guid":{"rendered":"https:\/\/tucumandevelopers.com\/index.php\/2026\/08\/28\/speaker-designing-systems-that-contain-failure-cs-week-peru-2026\/"},"modified":"2026-08-28T01:15:27","modified_gmt":"2026-08-28T04:15:27","slug":"speaker-designing-systems-that-contain-failure-cs-week-peru-2026","status":"publish","type":"post","link":"https:\/\/tucumandevelopers.com\/index.php\/2026\/08\/28\/speaker-designing-systems-that-contain-failure-cs-week-peru-2026\/","title":{"rendered":"Speaker &#8211; Designing Systems That Contain Failure &#8211; CS Week Per\u00fa 2026"},"content":{"rendered":"<div>Designing Systems That Contain Failure \u2014 CS Week Per\u00fa 2026<\/p>\n<p>On August 13, 2026, I had the opportunity to speak at CS Week Per\u00fa 2026, an event organized by IEEE Computer Society student chapters across Peru.<br \/>\nMy session was:<br \/>\n\u201cIsolation and Trust Boundaries in Production: Designing Systems That Contain Failure\u201d<br \/>\nThe talk explored how production systems can be designed to limit the impact of failures through explicit trust boundaries, architectural invariants, and evidence-based validation.<br \/>\nThe central idea was simple:<br \/>\nThe goal isn&#8217;t to prevent every failure. The goal is to control its blast radius.<br \/>\nProduction systems fail. Requests overlap, processes crash, memory is exhausted, credentials can be compromised, and dependencies can become unavailable.<br \/>\nReliable engineering is not about assuming that none of these things will happen.<br \/>\nIt is about deciding what can be affected when they do.<br \/>\nA green unit-test suite demonstrates that the tested units behave correctly under the conditions we defined.<br \/>\nBut it does not necessarily demonstrate that the system as a whole preserves its architectural properties under concurrency, multiple tenants, resource exhaustion, or real deployment conditions.<br \/>\nA function can be correct in isolation while the system still violates an important invariant.<br \/>\nThat led to one of the central questions of the talk:<br \/>\nWhat properties must never be violated?<br \/>\nI used the concept of a Trust Boundary to make architectural assumptions explicit.<br \/>\nFor each boundary, we can ask three questions:<br \/>\nWhat are we protecting?<br \/>\nWhat is allowed to cross the boundary?<br \/>\nWhat happens if the condition is violated?<br \/>\nFrom there, we can define invariants: properties that the system must preserve under the conditions established by its design.<br \/>\nIn the architecture discussed during the session, three dimensions were particularly important:<br \/>\nContext \u2192 Logical isolation<br \/>\nIdentity \u2192 Cryptographic isolation<br \/>\nExecution \u2192 Physical\/process isolation<br \/>\nEach addresses a different class of failure.<br \/>\nIn asynchronous runtimes, multiple executions can share the same process.<br \/>\nUsing global mutable state for request-specific information can therefore create context contamination.<br \/>\nConceptually:<br \/>\nRequest A \u2192 tenant = A<br \/>\nRequest A awaits I\/O<br \/>\nRequest B \u2192 tenant = B<br \/>\nRequest A resumes<br \/>\nWhich tenant does it see?<br \/>\nThe process can be shared.<br \/>\nThe logical context shouldn&#8217;t be.<br \/>\nIn Python, ContextVar provides an execution-context mechanism that can help maintain request-specific state across asynchronous execution.<br \/>\nBut there is an important boundary:<br \/>\nContextVar is logical isolation, not process isolation.<br \/>\nIt does not create a memory sandbox or protect the process from resource exhaustion.<br \/>\nThat distinction becomes important when we move to the next boundary.<br \/>\nThe second question is:<br \/>\nHow do we ensure that an operation belongs to the expected tenant?<br \/>\nA single shared cryptographic secret creates a broad trust domain.<br \/>\nA more constrained architecture can derive tenant-specific cryptographic material from a protected root of trust.<br \/>\nThe important property is not simply \u201cusing HMAC\u201d.<br \/>\nThe important property is reducing the cryptographic blast radius.<br \/>\nIf one derived key is compromised, that compromise should not automatically expose the keys belonging to other tenants or reveal the root key.<br \/>\nThere is another important detail here:<br \/>\nHMAC does not prevent replay by itself.<br \/>\nAuthenticity and integrity are different from freshness.<br \/>\nA robust request-validation scheme can therefore combine mechanisms such as:<br \/>\nHMAC + Timestamp \/ Acceptance Window + Nonce \/ Replay Detection<br \/>\nEach mechanism protects a different property.<br \/>\nEventually, logical isolation reaches its limits.<br \/>\nImagine a tenant submits work that consumes excessive memory.<br \/>\nContextVar cannot protect the rest of the application from an out-of-memory condition.<br \/>\nThis is where a stronger execution boundary becomes useful.<br \/>\nThe control plane can delegate potentially expensive or unreliable work to an independent worker process or container with its own execution lifecycle and explicit resource limits.<br \/>\nIf that worker crashes or is terminated because it exceeds its limits, the control plane can remain available.<br \/>\nThis reduces the blast radius of the failure.<br \/>\nBut again, the boundary has limits.<br \/>\nA process boundary does not automatically protect against:<br \/>\nqueue saturation<br \/>\ndatabase exhaustion<br \/>\nnetwork congestion<br \/>\nshared infrastructure failures<br \/>\nexcessive request rates<br \/>\nA boundary contains specific classes of failure. It does not eliminate failure.<br \/>\nThis is where architecture becomes engineering.<br \/>\nA design isn&#8217;t fully validated because it works on a developer laptop.<br \/>\nThe environment where the system actually runs is part of the system.<br \/>\nFor the system discussed in the session, the architecture is deployed on Azure Functions, so the validation had to account for real execution conditions such as:<br \/>\nconcurrent invocations<br \/>\nprocess reuse<br \/>\nexternal services<br \/>\nephemeral execution<br \/>\nreal authentication and cryptographic material<br \/>\nproduction infrastructure<br \/>\nThe validation process can be summarized as:<br \/>\nInvariant \u2192 Implementation \u2192 Deployment \u2192 End-to-End Validation \u2192 Observable Evidence<br \/>\nThe objective isn&#8217;t to claim that a test suite proves a system is perfect.<br \/>\nThe objective is to obtain observable evidence that the defined properties remain true under the conditions we evaluated.<br \/>\nFor this system, the integration suite runs against the deployed environment rather than only against local mocks.<br \/>\nThe suite currently contains 61 checks covering different integration and execution scenarios, including external services, webhooks, MCP interactions, errors, concurrency, and other production-oriented cases.<br \/>\nThe result:<br \/>\n61 \/ 61 PASSED<br \/>\nThat number doesn&#8217;t mean the system is mathematically proven to be perfect.<br \/>\nIt means that, under the scenarios covered by the suite, the expected properties held in the deployed environment.<br \/>\nThat distinction matters.<br \/>\nTests provide evidence. They don&#8217;t provide absolute certainty.<br \/>\nOne of the ideas I wanted to leave with the audience was this:<br \/>\nA boundary doesn&#8217;t eliminate risk. It defines how we contain it.<br \/>\nInstead of asking only:<br \/>\n\u201cCan this component fail?\u201d<br \/>\nAsk:<br \/>\n\u201cWhat can this component affect when it fails?\u201d<br \/>\nThat question changes how we think about architecture.<br \/>\nIt makes us consider:<br \/>\nwhere state lives<br \/>\nwhere identity is established<br \/>\nwhere resources are bounded<br \/>\nwhere processes begin and end<br \/>\nwhat happens when a boundary is violated<br \/>\nhow we can verify those assumptions in production<br \/>\nThe goal isn&#8217;t to build systems where nothing ever fails.<br \/>\nThe goal is to build systems where failures have defined boundaries.<br \/>\nPrevent what you can. Contain what you can&#8217;t.<br \/>\nI&#8217;m grateful to the CS Week Per\u00fa community and the IEEE Computer Society chapters involved in the event for the opportunity to share these ideas and discuss production systems, security boundaries, and software architecture with other engineers and technology professionals.<br \/>\nThis talk also represents a direction I&#8217;m increasingly interested in: engineering systems at the intersection of software, distributed systems, embedded computing, and Cyber-Physical Systems.<br \/>\nI&#8217;ll continue documenting that work here.<br \/>\nThe original event information and speaker details are available through the official CS Week Per\u00fa 2026 channels.<br \/>\nI also wrote a detailed technical article about the architecture, trust boundaries, invariants, and production validation discussed in this session.<br \/>\n\u2192 Isolation and Trust Boundaries in Production \u2014 Technical Deep Dive<br \/>\nI document my work and ideas on software, systems, embedded engineering, and Cyber-Physical Systems on my personal blog.<br \/>\n\u2192 jafa.dev<\/p><\/div>\n<p>Fuente: <a href=\"https:\/\/dev.to\/frostcore\/designing-systems-that-contain-failure-cs-week-peru-2026-2703\">Art\u00edculo original<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Designing Systems That Contain Failure \u2014 CS Week Per\u00fa 2026 On August 13, 2026, I had the opportunity to speak at CS Week Per\u00fa 2026, an event organized by IEEE Computer Society student chapters across Peru. My session was: \u201cIsolation and Trust Boundaries in Production: Designing Systems That Contain Failure\u201d The talk explored how production [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4701,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"webixso_pending_account_ids":""},"categories":[41],"tags":[],"class_list":["post-4702","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devto"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/4702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/comments?post=4702"}],"version-history":[{"count":0,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/4702\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media\/4701"}],"wp:attachment":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media?parent=4702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/categories?post=4702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/tags?post=4702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}