<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Software Engineering on Renato&#39;s Runtime Reflections</title>
        <link>https://r.ena.to/tags/software-engineering/</link>
        <description>Recent content in Software Engineering on Renato&#39;s Runtime Reflections</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 25 Oct 2026 08:02:34 -0300</lastBuildDate><atom:link href="https://r.ena.to/tags/software-engineering/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>In times of uncertainty, focus on principles</title>
        <link>https://r.ena.to/blog/in-times-of-uncertainty-focus-on-principles/</link>
        <pubDate>Sun, 25 Oct 2026 08:02:34 -0300</pubDate>
        
        <guid>https://r.ena.to/blog/in-times-of-uncertainty-focus-on-principles/</guid>
        <description>&lt;img src="https://r.ena.to/blog/in-times-of-uncertainty-focus-on-principles/cover.webp" alt="Featured image of post In times of uncertainty, focus on principles" /&gt;&lt;p&gt;I was faced with an interesting question: what does the future of cybersecurity look like over the next two years, given that AI models are improving exponentially?&lt;/p&gt;
&lt;p&gt;Honestly, we are still figuring out what the present looks like. Just this week we had at least &lt;del&gt;five&lt;/del&gt; six&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; high-profile security incidents and vulnerabilities that made the news. It feels like things are already out of hand today. How can one even begin to prepare for the future?&lt;/p&gt;
&lt;p&gt;How can we secure our software properly when there are swarms of tireless agents with near-infinite knowledge ready to poke around everything until they find a hole?&lt;/p&gt;
&lt;p&gt;To try to answer these questions, I need to draw a parallel with how AI changed software development.&lt;/p&gt;
&lt;h2 id=&#34;everything-is-changing-&#34;&gt;Everything is changing &amp;hellip;
&lt;/h2&gt;&lt;p&gt;Three years ago, it would have been impossible for the average developer to anticipate the changes that the world of software would go through.&lt;/p&gt;
&lt;p&gt;I never imagined my beloved editor would become read-only. I never imagined that most of my daily interactions at work would be with bots. And I certainly never imagined I&amp;rsquo;d be able to build entire features while walking my dogs.&lt;/p&gt;
&lt;p&gt;So what actually changed? New tools. Harnesses. Prompt engineering (gone already?). Context gymnastics (still relevant?). MCPs. An infinite number of bots and assistants.&lt;/p&gt;
&lt;p&gt;Perhaps the most exciting change, though, is the rise of agentic and autonomous behaviors, such as continuously looping on a particular issue until a solution is found. Claude never rests, except when its usage limit is hit.&lt;/p&gt;
&lt;h2 id=&#34;-yet-some-things-havent-changed&#34;&gt;&amp;hellip; yet some things haven&amp;rsquo;t changed
&lt;/h2&gt;&lt;p&gt;Watch one of those loops closely and ask yourself what the agent is doing. It reads some code. It looks up existing documentation and surrounding functions. It makes a change. It runs the tests. If they fail, it reads the output, figures out why they failed and tries again. Once they pass, it opens a PR, and a human (or another bot) reviews it. After the merge, the change goes to production.&lt;/p&gt;
&lt;p&gt;Sounds familiar? It does to me &amp;ndash; it&amp;rsquo;s what I did every day for over a decade. And what made me productive is also what makes AI productive today.&lt;/p&gt;
&lt;p&gt;AI can change a specific part of the code without understanding the whole because the code has boundaries. It knows what it can safely change because there are contracts. It knows when it broke something because there are tests that catch regressions. It can try again in seconds because the feedback loop is fast. It understands business rules because there is documentation. It can deploy a change to production within minutes because the pipeline is efficient.&lt;/p&gt;
&lt;p&gt;Clear boundaries. Explicit contracts. Good test coverage and documentation. Fast feedback loop and deployment pipeline. Behind each of these are &lt;em&gt;principles&lt;/em&gt; that existed long before LLMs, and they are as important in 2026 as they were in 2006. Or maybe even more important today.&lt;/p&gt;
&lt;h2 id=&#34;in-fact-they-matter-more-than-ever&#34;&gt;In fact, they matter more than ever
&lt;/h2&gt;&lt;p&gt;A software project needs the proper building blocks to unlock the full power of agents. Take the feedback loop, for example. I actually wrote about it in a &lt;a class=&#34;link&#34; href=&#34;https://r.ena.to/blog/avoiding-recompilation-hell-in-elixir-with-mix-xref/#why-it-matters&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;previous blog post&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The feedback time, that is, the time it takes for a developer to iterate between making changes and observing the changes is the single, most important individual productivity metric you should monitor.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, in 2026 we should replace &amp;ldquo;developer&amp;rdquo; with &amp;ldquo;agent&amp;rdquo;, but my point is the same.&lt;/p&gt;
&lt;p&gt;Why are these principles &lt;em&gt;more&lt;/em&gt; important today than, say, five years ago? I believe it&amp;rsquo;s mainly due to &lt;em&gt;potential agentic reach&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Before LLMs, the average developer maybe opened a couple of PRs per week. Now that &amp;ldquo;code is cheap&amp;rdquo;, a developer armed with a few agents can open dozens of PRs per day. &lt;a class=&#34;link&#34; href=&#34;https://github.blog/news-insights/company-news/an-update-on-github-availability/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&amp;rsquo;s infrastructure can barely keep up&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s today. Two years from now, it may very well be the case that the vast majority of commits and PRs are fully autonomous, with no human in the loop. Maybe a single project will see hundreds of PRs each day, automatically chasing newly created Jira tickets or any anomaly seen in logs or exceptions.&lt;/p&gt;
&lt;p&gt;And while today it seems like human code review is the bottleneck, a few years from now that step may no longer require a human, and what will matter is how productive and efficient an agent can be at delivering correct, verifiable work on its own.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what I mean by potential agentic reach &amp;ndash; how much useful work an agent can accomplish, and how quickly, without requiring human intervention. And the foundations of the project play a major role in determining both how far that reach can extend and how quickly agents can get there.&lt;/p&gt;
&lt;p&gt;Of course, one could wonder: what prevents a sufficiently intelligent agent from fixing my foundations for me? Nothing, really &amp;ndash; and you should certainly have it improve yours. But how well an agent can fix the foundations depends on how solid they already are. Once the basics are in place, each improvement will make the next one easier.&lt;/p&gt;
&lt;h2 id=&#34;enter-the-agentic-hacker&#34;&gt;Enter the agentic hacker
&lt;/h2&gt;&lt;p&gt;But remember, this post is about cybersecurity, not software development! The reason I drew this long parallel is that the software development world got disrupted by LLMs before security did, so it is the closest thing we have to a preview of what&amp;rsquo;s to come.&lt;/p&gt;
&lt;p&gt;Now watch the agentic hacker loop. An attacker&amp;rsquo;s agent scans and probes your infrastructure or application. It reads the error, adjusts and tries again, endlessly, until it finds something. Mind you, this agentic hacker loop is &lt;a class=&#34;link&#34; href=&#34;https://www.reuters.com/legal/government/how-one-hacker-used-ai-agents-few-thousand-dollars-break-into-scores-sites-2026-10-19/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;already a reality&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Do you see the similarities with the development loop? Except this time the agent is working &lt;em&gt;against&lt;/em&gt; you. Good foundations &lt;em&gt;extend&lt;/em&gt; your agent&amp;rsquo;s reach and &lt;em&gt;shrink&lt;/em&gt; the attacker&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;Once an attacker finds a hole, what happens next depends on your foundations. Does that vulnerability give them access to one isolated service with short-lived credentials, or your entire infrastructure? Can they move laterally? Can you detect and stop them before too much damage is done? And how quickly can you patch the hole?&lt;/p&gt;
&lt;p&gt;That last question is particularly important. Take &lt;a class=&#34;link&#34; href=&#34;https://www.php2shell.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PHP2Shell&lt;/a&gt;, for example. In 2024, the PHP security team had already identified signs of the underlying problem, but couldn&amp;rsquo;t establish a concrete exploit path. Proposed fixes had serious technical trade-offs, and work eventually stalled. Two years later, AI helped researchers develop working exploits, while the PHP team was still struggling to ship a fix.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s only half of the story. Once the fix was released, how long did it take &lt;em&gt;you&lt;/em&gt; to deploy it? Minutes? Days? Or are you still unpatched because you are stuck on an end-of-life PHP version?&lt;/p&gt;
&lt;p&gt;Other fundamentals show up in this week&amp;rsquo;s incidents too. One of &lt;a class=&#34;link&#34; href=&#34;https://emudhra.we-have-a-problem.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eMudhra&lt;/a&gt;&amp;rsquo;s CAs had a private key that was, for more than a year, literally the number 4, exposing many basic and embarrassing process flaws&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. And at &lt;a class=&#34;link&#34; href=&#34;https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LiteLLM&lt;/a&gt;, an exposed key was never revoked, allowing an attacker to take over the release pipeline and push backdoored releases to PyPI.&lt;/p&gt;
&lt;p&gt;These are different incidents with familiar engineering lessons: independent verification, least privilege, defense in depth, the ability to confidently change an existing codebase &amp;ndash; in other words, the importance of getting the fundamentals right.&lt;/p&gt;
&lt;h2 id=&#34;bet-on-what-endures-&#34;&gt;Bet on what endures &amp;hellip;
&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;ve made a few predictions, but I wouldn&amp;rsquo;t bet on what cybersecurity will look like two years from now. Even if LLMs magically plateaued tomorrow, we&amp;rsquo;d spend years catching up with what they can already do today.&lt;/p&gt;
&lt;p&gt;I will bet on principles, though. They have been, they still are, and they will remain the building blocks that determine how far agents can go &amp;ndash; yours and your attacker&amp;rsquo;s. At least for the foreseeable future, whatever that means.&lt;/p&gt;
&lt;p&gt;And while that may sound like an obvious thing &amp;ndash; &lt;em&gt;of course we should focus on best practices!&lt;/em&gt;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; &amp;ndash; let&amp;rsquo;s ask an honest question: how many times have you thought &amp;ldquo;this is not good&amp;rdquo; or &amp;ldquo;this is such a hack&amp;rdquo; at a former or current company? Or even on your own work device?&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been getting away with those hacks for years. So what changed? Certainly not the principles, as we&amp;rsquo;ve seen. But the &lt;em&gt;economics&lt;/em&gt; around security have changed.&lt;/p&gt;
&lt;h2 id=&#34;-and-adapt-to-the-new-reality-&#34;&gt;&amp;hellip; and adapt to the new reality &amp;hellip;
&lt;/h2&gt;&lt;p&gt;Before LLMs, security was priced on the assumption that skilled attackers have limited time and resources. A skilled attacker costs money, gets tired and has to pick their targets carefully. Automated scans were generally not sophisticated enough to find complex vulnerabilities on their own. Most bugs would never get exploited because nobody would pay attention to them. To a certain extent, security by obscurity seemed good enough for most companies.&lt;/p&gt;
&lt;p&gt;Now that&amp;rsquo;s no longer the case. Velocity, persistence and sophistication have changed &lt;em&gt;permanently&lt;/em&gt;. This is the new reality, and either you adapt or you risk being caught off guard. We weren&amp;rsquo;t given much time to prepare for agentic hackers, even though we&amp;rsquo;ve had decades to get the fundamentals right. And with most companies still sitting on mountains of tech debt, we are in for a bumpy ride.&lt;/p&gt;
&lt;p&gt;Adaptation is both bottom-up (starting from you) and top-down (starting from your employer).&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a simple example. Do you have production access to your infrastructure from the same OS in which you run &lt;code&gt;pip install&lt;/code&gt;? Do your agents have access to local files and credentials? Are you logged in to your logging provider in the same browser profile you are using to read this very post? That&amp;rsquo;s an awful lot of trust placed in a single environment &amp;ndash; compartmentalize!&lt;/p&gt;
&lt;h2 id=&#34;-in-which-everyone-is-resourceful&#34;&gt;&amp;hellip; in which everyone is resourceful
&lt;/h2&gt;&lt;p&gt;Of course, companies need to adapt as well. Most companies overlook security. &amp;ldquo;It won&amp;rsquo;t happen to us&amp;rdquo;. &amp;ldquo;No one will look into this obscure bug&amp;rdquo;. &amp;ldquo;We don&amp;rsquo;t have the resources&amp;rdquo;. Management needs to wake up. These excuses don&amp;rsquo;t hold anymore, and the longer companies take to act on &lt;em&gt;both&lt;/em&gt; their (lack of) security &lt;em&gt;and&lt;/em&gt; their pile of tech debt, the worse the outcome for them.&lt;/p&gt;
&lt;p&gt;Ah, &amp;ldquo;we don&amp;rsquo;t have the resources&amp;rdquo;, my favorite excuse in corporate America. Everyone is more resourceful now &amp;ndash; your attacker, your competitor and you. The bar for security has been raised. If you genuinely can&amp;rsquo;t afford to meet it, you need to acknowledge the risk you are accepting, including the possibility of your entire database ending up in some leak from an extortion group.&lt;/p&gt;
&lt;p&gt;Assume your infrastructure is being probed around the clock, so you should probe it from the inside to catch issues before attackers do. Same for your application &amp;ndash; someone is pentesting it constantly, so you should be too.&lt;/p&gt;
&lt;p&gt;Similarly, you need autonomous agents scanning your containers, logs, exceptions, commits and Jira tickets to automatically detect, raise and help fix critical security issues.&lt;/p&gt;
&lt;p&gt;More importantly, you need to clear the way for those agents to be effective. Get rid of the tech debt that makes your software difficult to change. If your agent finds a critical vulnerability but it takes you months to patch it, you&amp;rsquo;ve lost the race. Once again, your agentic reach is limited by the foundations of your systems.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, this all takes place on top of basic, old and well-known principles. The principles haven&amp;rsquo;t changed. The cost of ignoring them has.&lt;/p&gt;
&lt;p&gt;For comments, please see &lt;a class=&#34;link&#34; href=&#34;https://news.ycombinator.com/item?id=50232637&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;discussion on Hacker News&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.php2shell.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PHP2Shell&lt;/a&gt;. &lt;a class=&#34;link&#34; href=&#34;https://www.darkreading.com/cloud-security/tidb-breach-flawed-cloud-security&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;TiDB leak&lt;/a&gt;. &lt;a class=&#34;link&#34; href=&#34;https://emudhra.we-have-a-problem.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;eMudhra incident&lt;/a&gt;. &lt;a class=&#34;link&#34; href=&#34;https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LiteLLM&lt;/a&gt;. &lt;a class=&#34;link&#34; href=&#34;https://www.cve.org/CVERecord?id=CVE-2026-110264&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitLab&lt;/a&gt;. &lt;a class=&#34;link&#34; href=&#34;https://github.com/advisories/GHSA-9v8h-qqgm-4m35&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Brotli&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Worse, in June 2025 there was &lt;a class=&#34;link&#34; href=&#34;https://bugzilla.mozilla.org/show_bug.cgi?id=1970728&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;another eMudhra incident&lt;/a&gt; in which CRLs were signed with an incorrect private key, resulting in invalid ECDSA signatures. Did anyone wonder why there were two private keys for the CRLs? Isn&amp;rsquo;t that a red flag that something was fundamentally wrong with their processes?&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;It&amp;rsquo;s worth distinguishing principles from best practices. My take is that a best practice is an implementation of a principle. Best practices change over the years, whereas principles rarely do. For example, human code review is a best practice today, but it might not be tomorrow. The principle behind it &amp;ndash; independent verification &amp;ndash; will still be relevant if (or when) agents replace humans in code review.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        
    </channel>
</rss>
