<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Vedang.me, posts tagged tigerbeetle</title>
  <link href="https://vedang.me/feeds/tigerbeetle.xml" rel="self"/>
  <link href="https://vedang.me/"/>
  <updated>2025-01-06T15:18:04+05:30</updated>
  <id>https://vedang.me/</id>
  <author>
    <name>Vedang Manerikar</name>
  </author>
  <entry>
    <id>https://vedang.me/tigerstyle-or-how-to-design-safer-systems/</id>
    <link href="https://vedang.me/tigerstyle-or-how-to-design-safer-systems/"/>
    <title>TigerStyle, or how to design safer systems in less time by Joran Dirk Greef</title>
    <updated>2023-06-26T05:30:00+05:30</updated>
    <content type="html"><![CDATA[<h1 id="executive_summary">Executive Summary</h1><ul><li>The three core ideas of Tiger Style:<ul><li>See the whole picture. (always think about design, coding, testing, operator experience)</li><li>Check yourself before you wreck yourself. (assertions)</li><li>Give yourself a time machine. (simulation)</li></ul></li><li>Developing is system is more than just coding.<ul><li>Design</li><li>Coding</li><li>Testing</li><li>Operator experience in Production</li></ul></li><li>Don't be hasty. An hour in design is worth weeks in production.</li><li>Testing is what dominates the development of complex systems.</li><li>How you paint your software from scratch is all about 4 colors and 2 textures:<ul><li>Network, Disk, Memory and CPU</li><li>Latency and Bandwidth</li></ul></li><li>Use assertions everywhere!<ul><li>The slightest logic bugs should shut everything down.</li></ul></li><li>Limit your loops with minumum and maximum bound assertions<ul><li>Everything has a limit and you must make the limits explicit.</li></ul></li><li>Design for simulation from day 1<ul><li>Simulation lets you test in days what you'd take years to find in the real world.</li></ul></li></ul><h1 id="the_video">The video</h1><p><div class="video-container"> <iframe src="https://www.youtube.com/embed/w3WYdYyjek4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> </iframe> </div></p><h1 id="notes_on_the_video">Notes on the video</h1><ul><li><em>(Pg 4:59)</em> "Tigerstyle sees the whole picture, checks yourself before you wreck yourself, gives you a time-machine!"</li><li><em>(Pg 6:25)</em> "Decide your tools on quality, not quantity" <strong>[tools]</strong></li><li><em>(Pg 7:25)</em> "Developing a system is not just about coding &#x2026; the design phase before and after, the coding, the testing phase after coding <span class="underline">and</span> the operator experience in production" <strong>[coding]</strong></li><li><em>(Pg 7:55)</em> "Total time of ownership = Design + Coding + Testing + Incidents" <strong>[shipping]</strong></li><li><em>(Pg 10:10)</em> "An hour in design is worth weeks in production" <strong>[quotes]</strong><ul><li>by Joran Dirk Greef</li></ul></li><li><em>(Pg 10:40)</em> "Simple and Elegant Systems tend to be easier and faster to design and get right, more efficient in execution and much more reliable" <strong>[quotes]</strong><ul><li>by Edsger Dijkstra</li></ul></li><li><em>(Pg 13:10)</em> "Testing is what dominates the development of complex systems." <strong>[testing]</strong></li><li><em>(Pg 13:15)</em> "Callout to Jepsen as a great tool for testing distributed systems!" <strong>[jepsen, clojure]</strong></li><li><em>(Pg 15:25)</em> "There is more to software than just engineering. It is at least the intersection of engineering and art." <strong>[building]</strong></li><li><em>(Pg 18:40)</em> "Four colors of systems programming: Network, Disk, Memory, CPU" <strong>[distributedsystems]</strong></li><li><em>(Pg 18:56)</em> "The two textures that all these colors share are: latency and bandwidth" <strong>[distributedsystems]</strong></li><li><em>(Pg 19:10)</em> "In the design phase &#x2026; 1) Back of the envelope calculations" <strong>[design]</strong></li><li><em>(Pg 19:30)</em> "Sketch as many solutions as you can using &#x2026; (colors, textures) .. because sketches are cheap and rewrites are expensive" <strong>[design]</strong></li><li><em>(Pg 19:40)</em> "Find great names for your components &#x2026; TigerStyle doc in our repo gives you tips on naming" <strong>[design]</strong></li><li><em>(Pg 20:35)</em> "Define your mechanical fault models" <strong>[design]</strong><ul><li>Think through your fault models and see if your system is designed accordingly.</li></ul></li><li><em>(Pg 21:10)</em> "Be explicit up front about the fault models your system can tolerate" <strong>[design]</strong></li><li><em>(Pg 21:40)</em> "Stateless is always better than stateful" <strong>[design,state]</strong><ul><li>State is very hard! :D</li></ul></li><li><em>(Pg 22:00)</em> "It pays to reduce surface area that you commit to. The more surface area, the more unexpected interactions." <strong>[design]</strong></li><li><em>(Pg 23:00)</em> "Zero Technical Debt policy &#x2026; do the best that you currently can &#x2026; do it right the first time" <strong>[design]</strong><ul><li>Knowing that your work is solid motivates your team</li></ul></li><li><em>(Pg 24:00)</em> "Walk and Talk when you are discussing hard problems" <strong>[design]</strong><ul><li>Walking and discussing is really simulating for the brain.</li><li>Design tricks put you in good place for coding.</li></ul></li><li><em>(Pg 26:30)</em> "Assertions: NASA's power of ten rules for safety critical code" <strong>[reference]</strong><ul><li>Your system should run safely or not at all .. shut down in the face of a bug.</li></ul></li><li><em>(Pg 27:30)</em> "Write assertions checking your function arguments" <strong>[correctness]</strong><ul><li>that they are as you expect, and also assert that they are correct in relation to each other.</li><li>and you do the same for the return value</li><li>now your functions are contributing to correctness</li></ul></li><li><em>(Pg 27:42)</em> "The ultimate purpose of abstraction is for correctness" <strong>[quotes]</strong><ul><li>By Joran</li></ul></li><li><em>(Pg 29:00)</em> "If it compiles, you've just begun!" <strong>[correctness]</strong></li><li><em>(Pg 30:20)</em> "Start to think like a hacker: what don't you expect? What would be unusual in this case?" <strong>[hackers]</strong></li><li><em>(Pg 32:40)</em> "Everything has a limit &#x2026; systems have limits .. make them explicit so that your design can handle edge-cases" <strong>[limits, distributedsystems]</strong></li><li><em>(Pg 34:09)</em> "Static memory allocation is just one example of everything having a limit." <strong>[limits]</strong><ul><li>Memory, Network, CPU, Disk all have limits and need to apply back-pressure.</li></ul></li><li><em>(Pg 36:10)</em> "Assertions are a force-multiplier for testing" <strong>[testing]</strong><ul><li>Do not let your programming language turn them off in production!</li></ul></li><li><em>(Pg 45:30)</em> "Assertions document invariants" <strong>[testing]</strong><ul><li>Now people can see the positive space (your logic) as well as the negative space (what shouldn't happen)</li><li>That is what teachers do, they want to teach you the right way and also the wrong way.</li></ul></li><li><em>(Pg 47:30)</em> "(our fuzzy simulator) .. push the faults to the very theoretical limit .. at rapid time" <strong>[fuzzying, testing, distributedsystems]</strong></li></ul>]]></content>
  </entry>
</feed>
