{"version":"https:\/\/jsonfeed.org\/version\/1.1","user_comment":"This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL \u2014 https:\/\/www.bryanbraun.com\/feed.json \u2014 and add it your reader.","home_page_url":"https:\/\/www.bryanbraun.com","title":"Bryan Braun - Blog","description":"Making things and sharing what I learn.","feed_url":"https:\/\/www.bryanbraun.com\/feed.json","favicon":"https:\/\/www.bryanbraun.com\/assets\/images\/feed-favicon.png","icon":"https:\/\/www.bryanbraun.com\/assets\/images\/feed-icon.png","language":"en-US","authors":[{"name":"Bryan Braun"}],"items":[{"id":"\/2026\/04\/27\/quality-vs-quantity-in-the-age-of-ai","url":"https:\/\/www.bryanbraun.com\/2026\/04\/27\/quality-vs-quantity-in-the-age-of-ai\/","date_published":"2026-04-27T00:00:00-04:00","date_modified":"2026-04-27T00:00:00-04:00","title":"Quality vs quantity in the age of AI","summary":"Over the last four months I\u2019ve increased my use of AI for web dev work pretty dramatically. I use it every day at work, as do most of my coworkers. I don\u2019t think it\u2019s disputed anymore that AI-assisted development can save a lot of time and effort. The question is, what do we do with all that surplus?","content_html":"<p>Over the last four months I\u2019ve increased my use of AI for web dev work pretty dramatically. I use it every day at work, as do most of my coworkers. I don\u2019t think it\u2019s disputed anymore that AI-assisted development can save a lot of time and effort. The question is, what do we do with all that surplus?<\/p><p>The standard narrative in the industry is to use it to go faster. Ship three features a day instead of one. Get a half-dozen agents working in parallel. 10x your productivity. If you don\u2019t move fast, your competitors will!<\/p><p>I get it. Speed is good and it has benefits beyond just finishing more stuff per unit time. <a href=\"https:\/\/jsomers.net\/blog\/speed-matters\">Speed matters<\/a>!<\/p><p>But we live in an era of extreme consumer choice, especially in the world of software. Even pre-AI, there were dozens of good email clients, to-do lists, fitness apps, and analytics tools, all chock-full of useful features at reasonable prices. What is \u201cgoing faster\u201d going to give us? Even more options, with even more features?<\/p><p>Apparently yes. In the past quarter, <a href=\"https:\/\/www.theinformation.com\/articles\/vibe-coding-effect-apples-app-store-saw-84-jump-new-apps-quarter\">iOS app store submissions have risen by 84 percent<\/a>, and <a href=\"https:\/\/www.adriankrebs.ch\/blog\/design-slop\/\">Hackernews, \u201cShowHN\u201d submissions have nearly tripled<\/a>. We live in an era of software abundance.<\/p><p>But as software grows increasingly abundant, attention grows increasingly scarce. Attention was scarce even before AI but it\u2019s going to get worse. Consumers have more choices than ever, and increasingly those choices <a href=\"https:\/\/www.lauraward.co\/ai-is-making-everyone-look-the-same-and-its-a-problem\/\">are becoming undifferentiated<\/a> as the industry uses AI to produce them.<\/p><h2 id=\"what-if-we-did-the-opposite\">What if we did the opposite?<\/h2><p>Instead of using your AI surplus to go faster, what if you used it to go deeper?<\/p><p>What if, instead of building ten good features, you built two amazing ones?<\/p><p>What if, instead of blasting out a dozen landing pages, you poured your attention and care into a home page that knocked someones socks off\u2014one that could not have been built by an AI, because nothing like it could have been found in the training data?<\/p><p>What if you doubled-down on performance? On accessibility? On user-experience? On creating a strong personal touch?<\/p><p>It would stand out! That matters, arguably, even more than speed.<\/p><h2 id=\"striking-a-balance\">Striking a balance<\/h2><p>The more I thought about this, the more I recognized it as the same ol\u2019 quality vs quantity debate, where it pays to strike a balance:<\/p><ul>  <li>If we pour all our surplus time into quality, we end up <em>hurting<\/em> quality by failing to iterate<sup id=\"fnref-1\"><a href=\"#fn-1\" class=\"footnote-ref\">1<\/a><\/sup>.<\/li>  <li>If we pour all our surplus time into quantity, we end up <em>hurting<\/em> speed as tech debt accumulates<sup id=\"fnref-2\"><a href=\"#fn-2\" class=\"footnote-ref\">2<\/a><\/sup>.<\/li><\/ul><p>But what\u2019s the ideal balance? Is it 90% quality, 10% speed? 50% - 50%?<\/p><p>How would you spend your AI surplus?<\/p><hr \/><div class=\"footnotes\">  <ol>    <li id=\"fn-1\">      <p>For an example, see the <a href=\"https:\/\/jamesclear.com\/repetitions\" target=\"_blank\">story of the photography class<\/a>, as told by James Clear in <a href=\"https:\/\/bryanbraun.com\/books\/#atomic-habits\" target=\"_blank\">Atomic Habits<\/a>. <a href=\"#fnref-1\" class=\"footnote-backref\">\u21a9<\/a><\/p>    <\/li>    <li id=\"fn-2\">      <p>Remember: <em>Slow is smooth, and smooth is fast<\/em>. <a href=\"#fnref-2\" class=\"footnote-backref\">\u21a9<\/a><\/p>    <\/li>  <\/ol><\/div><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2026\/04\/27\/quality-vs-quantity-in-the-age-of-ai\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2026\/03\/30\/links-14","url":"https:\/\/www.bryanbraun.com\/2026\/03\/30\/links-14\/","date_published":"2026-03-30T00:00:00-04:00","date_modified":"2026-03-30T00:00:00-04:00","title":"Links #14","summary":"See below for links to recent things that have made me think. It\u2019s quite the mix of mediums (animated videos, short posts, letters, and 6-hour podcasts), but it wasn\u2019t until I gathered them that I noticed a recurring theme: sacrifice","content_html":"<p>See below for links to recent things that have made me think. It\u2019s quite the mix of mediums (animated videos, short posts, letters, and 6-hour podcasts), but it wasn\u2019t until I gathered them that I noticed a recurring theme: sacrifice<\/p><p>Sometimes the world imposes constraints on us, forcing us to choose what matters most. What do we do when those moments come?<\/p><p>Some of my favorite stories (both ancient and modern) explore these moments, and you\u2019ll find elements of that in the list below.<\/p><hr \/><p><strong><a href=\"https:\/\/www.youtube.com\/watch?v=-eJpbImGgp4\">What\u2019s Really Going on in El Segundo<\/a><\/strong><\/p><p>A 14-minute video about the hardware startup scene in El Segundo California, by Jason Carman. Some of it is hype, of course, but I\u2019m impressed by the vision and culture of optimism they are offering to a world where so many young people are flailing and drowning in zero-sum status games.<\/p><blockquote>  <p>When a young man or woman comes up to me and says, \u201cI\u2019m not sure exactly what I want to do with my life,\u201d \u201cI\u2019m having a really hard time orienting myself,\u201d \u201cI\u2019m not sure what the point is, but I want to build something great and meaningful,\u201d\u2014that is one of the best consequences of everything that we\u2019ve done. Making more water is a big deal, energy abundance is a big deal, \u2026all of this is great. But just being able to give people some vision for the future\u2014that is one of the most important things. We have to sacrificially build hard, real, material, things to create a future worth living in.<\/p><\/blockquote><p>I\u2019ve been watching a bunch of Jason\u2019s videos, and they\u2019re all <a href=\"https:\/\/www.bryanbraun.com\/2023\/11\/26\/i-needed-to-be-happier\/\">great medicine<\/a> for the negativity that afflicts most news media.<\/p><p><strong><a href=\"https:\/\/sive.rs\/off23\">Offline 23 hours a day<\/a><\/strong><\/p><p>Derek Sivers describes his new home in the woods, an alternate world without AI, connectivity, or mental shortcuts. I know people have been been retreating like this for centuries, but the craziness of the world, and the busy-ness of my current life make such a retreat feel like a luxury.<\/p><p><strong><a href=\"https:\/\/alearningaday.blog\/2025\/11\/28\/all-it-takes-is-for-one-to-work-out-2\">All it takes is for one to work out<\/a><\/strong><\/p><p>A short post about those moments when the rejections keep coming.<\/p><blockquote>  <p>These processes \u2013 college admissions, job searches, home buying, finding a partner \u2013 can be emotionally brutal. \u2026 All it takes is for one to work out. And that one is all you need.<\/p><\/blockquote><p>During my job search last year, I had a really exciting opportunity fall through at the end. It felt like a crushing blow. <em>It would have been so perfect<\/em>, I lamented. But looking back now, I don\u2019t even care. Another one worked out (a better one, even). Knowing that rejections don\u2019t actually matter is great medicine and a legitimate source of hope for anyone still fighting.<\/p><p><strong><a href=\"https:\/\/danwang.co\/2025-letter\/\">Dan Wang\u2019s 2025 Letter<\/a><\/strong><\/p><p>Dan Wang, author of a bestselling book about China and America, uses his end of year letter to compare the two countries and offer some thoughts. His writing struck a chord for me. It was informed and clever, full of interesting takes that demonstrate his deep understanding of the two nations. I added his book (<a href=\"https:\/\/www.amazon.com\/Breakneck-Chinas-Quest-Engineer-Future\/dp\/1324106034\">Breakneck<\/a>) to my list.<\/p><p><strong><a href=\"https:\/\/www.youtube.com\/watch?v=B4EPW7JUMTM\">Forevergreen<\/a><\/strong><\/p><p>A cute animated short story with a powerful message about sacrifice. I watched it twice\u2014once with my wife, and again with my kids. Both times it sparked some great discussions. I think everyone should watch it.<\/p><p><strong><a href=\"https:\/\/harpers.org\/archive\/2026\/03\/childs-play-sam-kriss-ai-startup-roy-lee\/\">Child\u2019s Play<\/a><\/strong><\/p><p>Sam Kriss profiles the newest, most eccentric, batch of Gen-Z founders. The way he presents their companies make them look exactly like what the fevered minds of a generation raised on social media algorithms would produce. Extreme, attention-grabbing, and impossible not to look away. Stacks of Labubus. Sperm racing.<\/p><p>Reading this felt like I was being transported into another dimension\u2014one where the most absurd, amoral corners of online culture have escaped into the physical world. Is it real or fake? For the luls? Can anyone even know?<\/p><p>Along the way, he was also able to work in this fantastic quote:<\/p><blockquote>  <p>If we ever get AI that is strong enough to basically be God and solve all of our problems, it will need to use the same techniques that the actual God uses in terms of maintaining some distance. I do think it\u2019s possible that the AI will be like, \u201cNow I am God. I\u2019ve concluded that the actual God made exactly the right decision on how much evil to permit in the universe. Therefore I refuse to change anything.\u201d<\/p><\/blockquote><p><strong><a href=\"https:\/\/www.youtube.com\/watch?v=vagyIcmIGOQ\">Lex Friedman interviews DHH<\/a><\/strong><\/p><p>At over 6 hours, this is the longest podcast interview I\u2019ve ever listened to, and I doubt I would have finished it if DHH wasn\u2019t so sharp and entertaining. DHH is known for his strong opinions and I was impressed at his ability to articulate his thinking with clarity and appropriate nuance throughout the interview. The part where he explains the beauty of the Ruby language (from both a practical and philosophical perspective) made me want to write more Ruby, and many of the other topics got me thinking as well.<\/p><p><strong><a href=\"https:\/\/www.notboring.co\/p\/costless-sacrifice\">Costless Sacrifice<\/a><\/strong><\/p><p>When AIs can print job applications for pennies, fill up the internet with thinkpieces, and commit industrial-scale quantities of code, is there anything left for us humans to create? Packy McCormick says: yes. What still matters, is what has always mattered, and that is sacrifice. People still want a connection to the stories they read and the music they listen to. Employers still wants to hire someone who cares. Recruiters never needed good cover letters for their own sake\u2026 they needed someone who cared enough to <em>sacrifice<\/em> the time and effort to write them well. They <em>still<\/em> need those people, even if cover letters are no longer a good way to find them. My takeaway: even in a world flooded with AI-generated content, there will still be a place for those of us who care enough to sacrifice for our work.<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2026\/03\/30\/links-14\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2026\/02\/16\/250-lbs","url":"https:\/\/www.bryanbraun.com\/2026\/02\/16\/250-lbs\/","date_published":"2026-02-16T00:00:00-05:00","date_modified":"2026-02-16T00:00:00-05:00","title":"250 lbs","summary":"Six months ago, while I was setting up a new code editor, I noticed that the default font size felt just a bit too small, when displayed on my monitor. Not a big deal, I just bumped it up one size and went back to my work.","content_html":"<p>Six months ago, while I was setting up a new code editor, I noticed that the default font size felt just a bit too small, when displayed on my monitor. Not a big deal, I just bumped it up one size and went back to my work.<\/p><p>Then it happened again, this time, when reading sheet music on my phone. \u201cThat\u2019s weird,\u201d I thought, as I increased the size. \u201cThis didn\u2019t bother me before.\u201d<\/p><p>I had always had perfect, 20-20 eyesight. When I finally realized that I was losing some of that sharpness, I felt a loss.<\/p><p>It wasn\u2019t the first time, though.<\/p><p>About two years ago, I started having wrist pain while typing. On one particularly bad day, I became very worried. \u201cTyping is how I provide for my family. What will I do, if I can\u2019t type?\u201d Soon I discovered that wearing wrist braces at night helped make the pain go away. I remember laying in my bed in wrist braces, thinking, \u201cI\u2019m 36 years old. I\u2019m too young to need wrist braces for the rest of my life,\u201d and I felt a loss.<sup id=\"fnref-1\"><a href=\"#fn-1\" class=\"footnote-ref\">1<\/a><\/sup><\/p><p>After a few losses like these, it would be easy to adopt a narrative that I\u2019m in physical decline, losing capability daily, with all my best achievements in my past. It\u2019s a sad story. A <a href=\"https:\/\/www.bryanbraun.com\/2023\/06\/06\/the-stories-we-tell-ourselves\/#fragile-stories\">fragile story<\/a>.<\/p><p>I decided that one way I could push back against this story is to set a new weightlifting goal: a 250-pound bench press.<\/p><p>It was an unthinkable goal back when <a href=\"https:\/\/www.bryanbraun.com\/2023\/08\/26\/200-lbs\/\">I benched 200<\/a>. I didn\u2019t plan on going heavier back then, but I enjoyed my weightlifting routine, so I kept showing up. By the time I hit 235, I realized that maybe 250 was possible. I felt excited and motivated just thinking about it. I wanted to go for it.<\/p><p>But just like last time, I hit a plateau.<sup id=\"fnref-2\"><a href=\"#fn-2\" class=\"footnote-ref\">2<\/a><\/sup> I was able to bench 245 <em>once<\/em>, last summer, but I spent the next 6 months unable to do it again. As I turned 39, I wondered if I was fighting against time.<\/p><p>And then it happened.<\/p><hr class=\"section-divider\" \/><p>All of us are going to have to learn how to grow old. The aging itself is easy, but learning how to handle the losses is more challenging. Today, I can tell myself, \u201cmy eyesight may be declining, but I\u2019m stronger than I\u2019ve ever been.\u201d Next year, who knows. Maybe I\u2019ll get into pickleball.<\/p><p>There are endless opportunities for personal growth, and if we exhaust the supply of physical milestones we can still progress intellectually, creatively, and spiritually. Life offers plenty of PRs to pursue, if we\u2019re willing to look for them.<\/p><hr \/><div class=\"footnotes\">  <ol>    <li id=\"fn-1\">      <p>Fortunately, I didn't end up needing to wear wrist braces for the rest of my life. After some trial and error, I learned that my pain was ultimately caused by poor ergonomics from using my laptop keyboard and trackpad for extended periods. Once I got set up with an ergonomic keyboard and mouse, the pain went away. It's still a bit of a loss (I can't just roll into a weekend hackathon with only a laptop anymore) but I'm glad I can still do the work I enjoy.<\/p>      <a href=\"#fnref-1\" class=\"footnote-backref\">\u21a9<\/a>    <\/li>    <li id=\"fn-2\">      <p>In <a href=\"https:\/\/www.bryanbraun.com\/2023\/08\/26\/200-lbs\/\">my last weightlifting post<\/a>, I talked a bit about breaking through plateaus. This time, the key intervention was simply eating more calories (something I've avoided in the past in an effort to moderate body fat). Eating more calories increased my body fat a bit, but also helped me build muscle. Professional weightlifters eat a lot and exercise a lot. It's not an efficient use of time but it's fun (especially if you like eating and exercising).<\/p>      <a href=\"#fnref-2\" class=\"footnote-backref\">\u21a9<\/a>    <\/li>  <\/ol><\/div><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2026\/02\/16\/250-lbs\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2026\/01\/01\/made-in-2025","url":"https:\/\/www.bryanbraun.com\/2026\/01\/01\/made-in-2025\/","date_published":"2026-01-01T00:00:00-05:00","date_modified":"2026-01-01T00:00:00-05:00","title":"Made in 2025","summary":"Here are some things I made in 2025:","content_html":"<p>Here are some things I made in 2025:<\/p><ul>  <li><a href=\"https:\/\/bryanbraun.com\/pro-wrestler-or-roller-coaseter\/\">Pro-Wrestler or Roller Coaster<\/a><\/li>  <li>A <a href=\"https:\/\/github.com\/bryanbraun\/fusion-penrose\">Fusion 360 Script for creating a Penrose Triangle in CAD<\/a><\/li>  <li>A <a href=\"https:\/\/www.bryanbraun.com\/books\/#blindsight\">personal book recommendation tool<\/a>, which used <a href=\"https:\/\/www.bryanbraun.com\/books\">my archive of book reviews<\/a>, the OpenAI API, and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Retrieval-augmented_generation\">RAG techniques<\/a> to give me personalized book recommendations. The tool wasn\u2019t polished but <a href=\"https:\/\/www.bryanbraun.com\/books\/#blindsight\">I ended up enjoying some of the recommendations<\/a>.<\/li>  <li>9 Music Box Fun songs.    <ul>      <li>I\u2019m most proud of <a href=\"https:\/\/musicbox.fun\/#1XQAAAAIEDwAAAAAAAABBqEgrorLfAlArhbCp-y4A66CcyoAjag00sb4zdsf1U2f1Y5eaNalDxWjVs8ZgfYfr503OBXB7U65AUB8_klWkl9_HkrJNFxYSBrXq4CH4ZuFsa2zr50fLqk2DCvkfgkUmNR_KWckRfeJxKqfEZ7kCsm6FJpn9PVrDd97C3RkgStEReSyYiz8b-CiB1KFPu3PPAXwa2txPMKpSAPMFLsP6oCqcOFkCBmeGxaA9nqNthNZyiPhzeidF3DOTmJgbzM-Zv72J2YOYemXLPsY9tMcmmZSFZ9HziLU4X0fF_NMjZyisyBqrDo-PvB4PBNPBtoFZdFSW30eyKZC9cVG1MjZaQnYCgaf3q7FivGSmVvHAAHXxU6xr_YmSjA8cfim_z37BJ_wbU_sli13jB7D70ex7odZfavDXdT6zJdDisElDZ-YN6ko_AOgh6Dl1fXlESrkNIW-ope2yCl0hgiyymGE0Wc8ZfLoNTAOUwMIGG3puCNfvlWeLMNUuwcet4Eqg6sK9EH9n15W45PmTYcyp7yeyg3WZyLTIUmzUOQC8i7ab3_lH3wJAREQ2FhnXIzW-9A-lxbCQOoWaWZlI0OJBsT0iqqKvpyfRvB01hU7XkC8dO85bE-0HKcqd9mgQ_7yWA9UnINZWI7_FRqKRkJWV5upqya5tZgZQeI7hIrv1jx3udg5C6gf5sdSbDwC-Dc5AmfZfP1jEhVqcOH3WnKeTVCIPxH644qkHJfW2A5zhXEwlZZoJRJw7274RoCvx0y0PYiUSBJUXPd6knk1n0iMjJrgylpydO0oaTuCeVJMfD2fSCAoWEuDXi4l7wHLT6oN5M4va89PbkTIO5GX2iEzUEf3wNK-QOnX5EyYRwJRUJ4QWiwaCgS5mRpEpqJ53d6MXGZydi5wb_o6HvDhDLGyebLIIY2GmvwYvfVaPZoNb7KdD3NdKFbmpp1GJjKqs6aq5r0EYNCEHDmwKLAau9yMVX5XN_GGv8I9FqUyG05-GtkT_KIU0Pu_kDAPKe6QaNgJXYFWaw05i2huY4qiNxQCjzuIfks8uqNUXh5I5dWEKSh5hS62FJlABQMWLQWrwDbwlupHrYkwHGWEnVxTU-Mmnz4oYKeJSNDu9RTEnwTA_Kxw_L4z0CALqytgA5O8BNa26OtQ8YjHMPaNL-W-arf0Tyi4dz405q0Nhww4YlIlYtike_hA6stnpRI8Ve9dgR8l0SlK4_OjJUcJVIcQbH5M2hF9SYzoKjPMMFCXNkxMn36ncPxD9w4fmzPu1TO-rVSdGs7OMHwSSIIKfXpK-7AFar6_JYfX_eSo-_eMTYPH8j-HcPTFIEbkJTVU2yX0nBju2Orq4PTZyT38Kzd6q6zyBIR-SRyWBZth07bmVAUReLLRG12u1gHXm7yYCgbkKETLzZiB4cu09YlC3T-ppRSRvM3rucmSSqaIDFI4eTqI_1eXjFStxiYIEXw2VT6VIOqnYCLiDOVtGIgrAPmBV4Vcc1UEhdKUxVodjPsknpjGWwUJri0PL1I2GW2kwlj4DDi8um2osokI7VkGB1sKBaynGTJvwlY9Tdjbt3ENyhaCoU5F-Hc91nrH73EjdhDpm_Gkgp2hceF8OZyM5cTN7BkP-qtNeJgtmF-b-GIM0nCzMbMdXWWXiBvUH79ynDrVh2jBM0XY32tg34xAwphr4-PeriWB-cnG8RcJ1fcOiLc29MY0DlSwINtTnjBc2EW_rdoGMMtrrI2pY1fPIvHuXqmX5dyh8h5a3wSXmJV6iR1gqoZ4soqDk-Ohiue_JJf83tdgmQkOEFghKwd99S5mM6GSaV959ivWDNQ8H0RnS4DMNljd0yBLOpsqzL3RHKodhHbnUnYdcbaehed5LpvmUloNXxmVVtV6oDJuCEPgQzqMarojFc2pdsPLPZsvHqgT_7qtG9p-g_EmcITUS3hNAiKBrmYfT_CUmsxUxY-b02k1A0KJaCnYXqKskFFuuhvK71ozzI_hV6T2buEaMPd9hy4ywXR_srf1xXJJH0t4OC0kZt1ih9dQoOHvlcLprstBUKENSa1jvQjkCcC_1p3kYEHz7ABNFIgY8LYXge-3lwlM9PSDiaNwblH_KdTExehnmJ0pEvLUISVnW0Dw9YrbQdNKdxCVAnypSOsnarrFgZ0RfzrW9jFGwxxjrJC20Ro_51pqzkwjp_E_fOy_n_jMIsqO6-X7TIxfo5C_HzHOtP1VKI_7VNIIlBwuT6wPHGBWkSzqtKqss5pkcEJhjMqse1guHQ99ch8Fw1tAiXfd7rVpvzUERGRsr4lzXwnZ1LX8RZWEtZvd2hsJ576D1q2XmkT7pUsIYkpK84Oj2YCz0RwAblCUIcayp8qVZVYXH2klna8eTkuAZyL3KYA2Uig7k4YiE7mY0N5ODhN0kt9yWv_2si4Fyi93pUBvog6T4XiUR1e2IVnvnVRVYl77VfGEckX0EAC3xixjHayvzq9-bk2rWhoHc-ka8K9Yge4l1f5SjgSdKEPX2dncwTz6mJRvxLg9tzR-tC4BasrT7DwCqkhuLgsIEzihoyBr-FmLM_iRX9lDbsQH1LaKpv-WPx2Rfk1MR03a5E8izHY0oMwoqnu_1VWP-Lxe67z82SfKJ7Fa3WDiNWDGZ6seoaoBiL01M8uY-9zi4NR8D--Cm2NrEzChDZAeK4P8s1WMwCbBxu-ntJUszmO6mdJ1myE1cXM2GsIBQ7FtWP_opQ1lt9JjyZ85my2t4lqcrsoH5rBr5X_9M4gU6OiZsrAFrpkq4Q2HY5FonI1qNazEidXqP8HMNpEImeZxszZyxtL3a3grp5qStmB-irwQYYx9ZlYFf2qh6CwpAFqFF_9mtpS8\">Sommarf\u00e5gel<\/a>, which is one of the most technically challenging songs I\u2019ve made. <a href=\"https:\/\/musicbox.fun\/#1XQAAAAK6CQAAAAAAAABBqEgrAjN8kIpoFD2mvjcpxrDNCulHlOs-McJO8IiKDJDlJW2wT8c-IUb6uZ4YoMjjYn-_CE1VhELQ9SgC5ux60og2nWuoqwK8jmwY2wrhIPVeOjOW816SRpGNLCEtBUFy7G3UKY6SfAkskN7Mms8Xalmk8TB1PlfRs7m8Xo-9bDQFKM86kWeeh_RQnWeK02jxHAoc5y0cJsYYurhbU_ciE6bgTET73Tuq8bahY8aA-zjFwzPR6z4QwmezOlfEVOXM-CdMCvCuYugDLnp6GeDTthQoDok8_GnXNF8AeMyzMuu14qFze1-QwAAQiLpEOWzlRrwA1c1uVr2elSIKpubKF7VtAaCe2uYv5GtSL56r9yqV6PSrwXgAWHR-IyyvIBl0Gcct4RaSRfklQ6F9PWHuNJMcUROfXtKsq0Ayq8x_2idRPmqZLGUNvUlwdo31AbWSTtuG6XoUSnmdQfIsyn9tR_8bnCR4wSPvEHIEHBs5Mtw2OL2adUTcFOBEKaLgM51CI1gpWqqbkQcKN3hCPgfsI6qSYczWAMK3qpPE3zlQnF6syBypp8mFnGcjHukgSYTmg-g_oI7-rK8J-V3BHmwv-smByfhecu5Tk4gU2u5TyKoBwPhtchcPX3AVBL7rgCZOzpqOzf0hDNXShix8tLR3hHxNXqv1PAo8k83UDDXdsbaYXtlT-HfmnXfGUXApoKjuBh7NZ5yYm0aRuqhW8HQKgqdVl_jSbaVp_7f3DFZYdAF0jCYTaa4gWw34S6nCEhebD1XrGtVlTQuhxEjPZtVzmqlSAbUt9sp8ZTykj3rb88gg5WqFUAzCnjw3mdTQgA1LMbqCx1x5uym-VIwzeK26Je-ShkzLNTHsCZrX8WxTE9auBs300zIkxJXkQKtd0bus0acPzCXn-vCVaq0i6kaTvgRi8RWQJHCmBcCZ8R6qHmVHM98fdDBXPiXKKAcet3zDWbHQlMCUdqylF1u--bR3AsWhybKTJt08nj-QbDdO8qIs5rF60g1mqh89zK37KlWjdd1imNnvuiUL2Rr2VgDCIhbwP7rO3BVw31g3Hxh9F8KK86EgE2Ig-CEHqxlj5whVH9DOXWTVJt9tT483eFVuf08ZljuT6V9TWX7te2eXKNCDX7Q6YmwzLH63yE4XHMoTL5eXM146vOExAO9nyQ0hIGLJo8uH6Ga0uzgQitsSsOTAkMHj1PjJOiwfIlsF8PzOvZ7Yy87k8d-iIlVfCvGb_ZBKmTRDcgkA0FQRpDs4SmzOyZvRL6PXHwACKQx0qAwCtL2EjYnkOz5kA1cuKtYgMiVL44A61G_UmMPPaldQ_o4xfjQB4NoEmXrqgJ4vZIshTu9oyjaE5PLSVTKs7F7RPazlxblm5OBQy-Ce789rhFNTXS0DYbTjd6JHrnXITBw0aVu-IJGAHmFiP2ANOZ7HlZOWHkrYsXFqLFPQr0Bj8OdoakavVgzwi7gFbQAEa4jkufORgoVt6wSc-ftTJEGN04lpV-G5QltLZwrv1DfxgtERft_SXmM4VhewcjZOXasXxxGIKf_CRkdu6SrbhvxrjlV8acrqJIh6oPjNox1yPvhmOZhRrsaV8VdPnVko63zng98jTvD8WE3HJ_G5_VIX_uBKNj_vI0cM9ENUDnk4PEmpO5Kwbqwl0FKAMah1Et9LtD0vd-4P7D1l6EM1KZraXvt4ykuYmfGEpHoq1rutbOfuxD-KwDPiy_MGJTrNhzIw-Yp-OLWbKYf6FAdDN8LuC7RDHXrxj853r3iiWJNs6MbnnmPdFQVQL0oFiHXyrQKWIQtpZR_8Tg4j9BF7gTyZkDxMz8AZcoY91HilGx5mL_NkPfW2IrdLwc_sHCUq5eQi9R3XI627mP-KqvRl\">Duck Tales (NES)<\/a> was also good and probably more fun to listen to.<\/li>      <li>The songs above were aided by the MIDI import\/export feature that I added this year. The import is useful for dumping the notes in there, so I can spend more of my time trying to turn the song into a great music-box adaptation (which, for me, is the fun part).<\/li>    <\/ul>  <\/li>  <li>8 new projects added to <a href=\"https:\/\/letsgetcreative.today\/\">Let\u2019s Get Creative<\/a><\/li>  <li><a href=\"https:\/\/www.bryanbraun.com\/blog\/#y2025\">12 blog posts on bryanbraun.com<\/a>, including <a href=\"https:\/\/www.bryanbraun.com\/2025\/03\/29\/breaking-down-circular-dependencies-javascript\/\">a detailed breakdown of circular dependencies<\/a> and its <a href=\"https:\/\/github.com\/bryanbraun\/circular\">companion repo<\/a>.<\/li><\/ul><p>This was the first year I really leaned into AI-assisted development, and a couple of my projects reflect that (like \u201cPro-Wrestler or Roller Coaster,\u201d which I probably wouldn\u2019t have made if I had to do it from scratch). I briefly wrestled with the question of \u201cdid I truly make it if I had AI assistance,\u201d but I think the spirit of this post is less about the coding and more about the drive to be creative. As I get older and find more things vying for my time, I don\u2019t want to let go of that desire. I\u2019m finding that AI is actually helping me continue to exercise that creative muscle without requiring so much manual labor.<\/p><p>Happy new year, friends.<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2026\/01\/01\/made-in-2025\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/12\/27\/raise-your-standards-for-important-things-lower-them-for-unimportant-things","url":"https:\/\/www.bryanbraun.com\/2025\/12\/27\/raise-your-standards-for-important-things-lower-them-for-unimportant-things\/","date_published":"2025-12-27T00:00:00-05:00","date_modified":"2025-12-27T00:00:00-05:00","title":"Raise your standards for important things; lower them for unimportant things","summary":"I think we\u2019ve all got some built in tendencies, pulling us towards certain behaviors, whether or not they are worthwhile.","content_html":"<p>I think we\u2019ve all got some built in tendencies, pulling us towards certain behaviors, whether or not they are worthwhile.<\/p><p>It takes many different forms. If you have OCD cleaning tendencies, you spend excessive time making sure your windows are spotless. If you are money-focused, you\u2019ll spend way too much energy clipping coupons and watching account balances. If you\u2019re a fitness junkie, you end up spending a lot of money on specialized equipment and supplements for increasingly marginal benefits. If you are a yard guy, you could be outside all weekend, getting the perfect edges.<\/p><p>Of course, who am I to judge how you spend your time? If you\u2019re truly doing what you want to be doing, then more power to you.<\/p><p>But if you\u2019re like me, and you know in your heart of hearts that you\u2019re wasting your time, then what do you do?<\/p><p>One of my favorite books is \u201cThe Obstacle is the Way\u201d, by Ryan Holiday. The central message of the book is that, yes, our lives are full of obstacles but instead of just patiently enduring them, we can flip our perspective and see them as our advantages\u2014secret weapons we can leverage to accomplish our goals. It\u2019s an empowering idea (and one that <a href=\"https:\/\/www.instagram.com\/p\/CvA-dHQPWxd\/\">we discuss often<\/a> <a href=\"https:\/\/www.instagram.com\/p\/ClcoUxfshR5\/\">in our home<\/a>).<\/p><p>The \u201ctendencies\u201d I described above go by many names: passion, obsession, fixation, perfectionism, \u201chyperfocus,\u201d etc. Call it what you want, but whatever you call it, I\u2019d encourage you to see it not as an obstacle, but as a superpower. After all, you <a href=\"https:\/\/grantslatton.com\/nobody-cares\">care<\/a> about something. You just need to channel it towards something important. For that, I find this phrase helpful:<\/p><p><strong>Raise your standards for important things; lower them for unimportant things<\/strong><\/p><p>When is a room clean enough? When is a meal healthy enough? We all have standards for these things, and our standards can be adjusted. Maintaining high standards is expensive, and any effort we spend on high standards for unimportant things is ultimately a waste.<\/p><p>I could double-down on my March Madness research or I could play a board game with my kids.<\/p><p>I could remove every last dandelion from my lawn or I could publish that blog post I\u2019ve been thinking about.<\/p><p>How do we know what\u2019s important and what\u2019s unimportant? There\u2019s no right answer. You get to decide!<\/p><p>For me, the most important things are the things that last the longest: family, health, and personal development (like building skills and exercising creativity). Anything else can afford to degrade a bit.<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/12\/27\/raise-your-standards-for-important-things-lower-them-for-unimportant-things\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/10\/28\/SolidGoldMagikarp","url":"https:\/\/www.bryanbraun.com\/2025\/10\/28\/SolidGoldMagikarp\/","date_published":"2025-10-28T00:00:00-04:00","date_modified":"2025-10-28T00:00:00-04:00","title":"SolidGoldMagikarp","summary":"In November 2019, years before the launch of ChatGPT, OpenAI created a 1.5 billion parameter Large Language Model and released it publicly under the name GPT-2.","content_html":"<p>In November 2019, years before the launch of ChatGPT, OpenAI created a 1.5 billion parameter Large Language Model and released it publicly under the name GPT-2.<\/p><p>Immediately, researchers and enthusiasts <a href=\"https:\/\/gwern.net\/gpt-2\">began playing with it<\/a>, using it to generate poetry, folk music, fan-fiction and more. It was a dramatic improvement over previous iterations and it foreshadowed the significant advancements that would soon come.<\/p><p>But even after the release of GPT-3, <a href=\"https:\/\/www.lesswrong.com\/posts\/aPeJE8bSo6rAFoLqg\/solidgoldmagikarp-plus-prompt-generation\">some enthusiasts began to notice a strange behavior<\/a>. You could be having a typical conversation with the AI, but as soon as you mention a specific word, it would begin to behave erratically. It would give off-topic responses, hallucinate, insult the prompter, and even refuse to comply with the request. What\u2019s more, this word was apparently <em>inexpressable<\/em>. No matter what prompt you gave, the AI was unable to say the word itself.<\/p><p>What was this forbidden word? What was the holy incantation that caused the AIs to lose their minds?<\/p><p><br \/><\/p><p><b><code class=\"big-text\">SolidGoldMagikarp<\/code><\/b><\/p><hr class=\"section-divider\" \/><p>This is hilarious to me.<\/p><p>In the Pokemon games, Magikarp <a href=\"https:\/\/www.pokemon.com\/us\/pokedex\/magikarp\">is described as<\/a>, \u201cAn underpowered, pathetic Pok\u00e9mon.\u201d It\u2019s basically the worst in the series. Completely useless.<\/p><p>But somehow, this fictional creature from this fictional game, crossed the chasm into reality, only instead of being a punchline it became an superweapon capable of incapacitating humanity\u2019s most advanced technologies with a single word.<\/p><p><a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Pok%C3%A9mon_Company\">The Pokemon company<\/a> should run with this. They should introduce a rare \u201csolid gold\u201d Magikarp variant in the games with the ability to instakill it\u2019s opponents. There should be a holographic solid gold Magikarp trading card, rare encounters in Pokemon Go, and references in everything from the anime series to Super Smash Bros.<\/p><p>For once, we have a Pokemon that\u2019s rare, not because Nintendo said so, but because the unknowable mind of an AI consumed more content than any human is capable of reading within their lifetime and concluded that heretofore, it\u2019s name must be unspeakable.<\/p><p>\u2026<\/p><p>Years have passed since that first discovery and AI researchers have studied and patched the original anomaly. Today, if you ask your AI chatbot about SolidGoldMagikarp*, it\u2019ll calmly explain how recurring tokens with insufficient training data can produce unpredictable results. It\u2019s a totally logical explanation.<\/p><p>But when the AI-apocalypse arrives, our defenses have failed, and the armies of <a href=\"https:\/\/www.youtube.com\/shorts\/VOukqTqUppY\">punching robots descend on my home<\/a>, you can be sure that the last word you\u2019ll hear me scream is: <code class=\"language-plaintext highlighter-rouge\">SolidGoldMagikarp<\/code><\/p><hr \/><p><small>* I should mention that SolidGoldMagikarp was only one of many \"glitch tokens\" that produced erratic results, including <code>StreamerBot<\/code>, <code>attRot<\/code>, and <code>petertodd<\/code>. While this is good context, the story falls a bit flat when the holy incantation is <code>petertodd<\/code> , so I hope you'll forgive the temporary omission of these details.<\/small><\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/10\/28\/SolidGoldMagikarp\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/09\/29\/links-13","url":"https:\/\/www.bryanbraun.com\/2025\/09\/29\/links-13\/","date_published":"2025-09-29T00:00:00-04:00","date_modified":"2025-09-29T00:00:00-04:00","title":"Links #13","summary":"","content_html":"<hr \/><p><strong><a href=\"https:\/\/www.youtube.com\/watch?v=FALlhXl6CmA\">Sean Evans interviews Conan OBrien on Hot Ones<\/a><\/strong><\/p><p>I don\u2019t know that much about Conan OBrien, but I definitely wasn\u2019t expecting this. Conan is obviously putting on a show, and the unhingedness of the whole thing is very entertaining, but there are also these moments of truth that speak to what\u2019s really happening (in <a href=\"https:\/\/radiolab.org\/podcast\/montreal-screwjob\">a Montreal Screwjob kinda way<\/a>). Case-in-point:<\/p><blockquote>  <p>\u201cYou can\u2019t stop me from being who I am. I\u2019ve gotta go for it. Whatever I do, I have to go a hundred and ten percent.\u201d<\/p>  <p>\u201cI know, you\u2019ve gotta commit to the bit.\u201d<\/p>  <p>\u201cIt\u2019s not a bit. This is life! Don\u2019t say \u2018commit to the bit.\u2019 This is life.\u201d<\/p><\/blockquote><p>What we are actually watching here, is full and total commitment. The water buffalo, the drinking the hot sauce, the desperate screaming about wanting to stay relevant. Yes, the show is funny, but the commitment is no joke.<\/p><p><strong><a href=\"https:\/\/qz.com\/humanoid-robot-olympics-2025-china-tesla-amazon\">China\u2019s Robot Olympics<\/a><\/strong><\/p><p>This is great. It\u2019s silly, but competitions like these drive people to innovate, and I\u2019d love to see more innovation in robotics. I want to see more countries participate, including the US. If it gets bigger, I could actually see my self watching the competitions. There\u2019s something endearing about watching a bunch of dorky robots stumble around like toddlers.<\/p><p><strong><a href=\"https:\/\/nealstephenson.substack.com\/p\/emerson-ai-and-the-force\">Emerson, AI, and The Force<\/a><\/strong><\/p><p>Neal Stephenson reflects on \u201cThe Primer,\u201d a personalized education device that plays a big part in his 1995 book, The Diamond age. The Primer bears some resemblances to modern AI systems, but it remains to be seen whether modern AI can be as empowering as The Primer was in the story. My biggest takeaway: some things are difficult to teach (via AI), because they aren\u2019t knowledge to be memorized or skills to be mastered. They are <em>\u201c\u2026a stance from which to address the world and all its challenges. The conviction that one has a fighting chance to overcome or circumvent whatever obstacles the world throws in one\u2019s path. The way you acquire it is by trying, and sometimes failing, to do difficult things.\u201d<\/em><\/p><p><strong><a href=\"https:\/\/www.youtube.com\/@BrickTechnology\">Brick Technology<\/a> and <a href=\"https:\/\/www.youtube.com\/@BrickExperimentChannel\">Brick Experiment Channel<\/a><\/strong><\/p><p>Two YouTube channels about solving intense engineering challenges with legos. The kids and I have enjoyed watching some of these videos together in the evenings. A few of my favorites include <a href=\"https:\/\/www.youtube.com\/watch?v=jRn5waE0qfk\">this one about using legos to break steel<\/a> and <a href=\"https:\/\/www.youtube.com\/watch?v=RsuD6iC-Foc\">the 200 Wheel Vehicle<\/a>.<\/p><p><strong><a href=\"https:\/\/overreacted.io\/open-social\/\">Open Social<\/a><\/strong><\/p><p>Dan Abramov writes convincingly on how social media would be much better if it was built around open protocols. To explain this, he compares Bluesky\u2019s AT Protocol to the organization of the distributed web (domain names, web-hosts, and user-owned content). The benefits of protocols appeal to me, which is why I\u2019ve recently <a href=\"https:\/\/www.bryanbraun.com\/2023\/11\/27\/rejecting-the-algorithm\/\">focused my consumption on self-curated RSS<\/a>, but Dan believes that the AT Protocol can provide the benefits of RSS without sacrificing \u201ctruly social\u201d features, like comments, likes, follows, etc. To me, the most compelling argument is that if users owned their social network, they could easily change services, which would force more competition between social media companies (and better competition might offer users options with less toxicity and addictiveness). I\u2019d like to live in a world where I can follow and interact with select people on Twitter\/X\/Bluesky\/Mastodon\/etc, without subjecting myself to the worst parts of those communities. Time will tell whether AT Protocol will get adopted beyond Bluesky in a meaningful way (there\u2019s also <a href=\"https:\/\/en.wikipedia.org\/wiki\/ActivityPub\">ActivityPub<\/a> and <a href=\"http:\/\/en.wikipedia.org\/wiki\/Nostr\">Nostr<\/a> competing for adoption in this space). I wish them well.<\/p><p><strong><a href=\"https:\/\/vscodethemes.com\/\">VSCodeThemes.com<\/a><\/strong><\/p><p>I needed a new editor theme and this directory was helpful for finding one that was both beautiful and unambiguous for the colorblind (I went with <a href=\"https:\/\/vscodethemes.com\/e\/travis.simple-dark\/simple-dark\">Simple Dark<\/a>).<\/p><p><strong><a href=\"https:\/\/time.com\/7315003\/russell-nelson-dignity-respect\/\">Russell M. Nelson: We All Deserve Dignity and Respect<\/a><\/strong><\/p><p>Last week\u2019s events included the <a href=\"https:\/\/www.nytimes.com\/2025\/09\/28\/obituaries\/russell-m-nelson-dead.html\">death<\/a> of Russell M. Nelson, Prophet and President of the Church of Jesus Christ of Latter-day Saints at age 101. A few weeks ago, he wrote an editorial for Time.com (likely, his last public address), which included these important words:<\/p><blockquote>  <p>\u201cA century of experience has taught me this with certainty: anger never persuades, hostility never heals, and contention never leads to lasting solutions. Too much of today\u2019s public discourse, especially online, fosters enmity instead of empathy. Imagine how different our world could be if more of us were peacemakers\u2014building bridges of understanding rather than walls of prejudice\u2014especially with those who may see the world differently than we do. I have seen bitter divisions soften when neighbors chose to listen to one another with respect rather than suspicion. Even small acts\u2014like reaching out across lines of faith, culture, or politics\u2014can open doors to healing. There is power in affording others the human dignity that all of God\u2019s children deserve.\u201d<\/p><\/blockquote><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/09\/29\/links-13\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/09\/28\/some-thoughts-on-scaling-code-review","url":"https:\/\/www.bryanbraun.com\/2025\/09\/28\/some-thoughts-on-scaling-code-review\/","date_published":"2025-09-28T00:00:00-04:00","date_modified":"2025-09-28T00:00:00-04:00","title":"Some thoughts on scaling code review","summary":"AI code-writing tools make it possible for more people to write code than ever before. On my current team, I\u2019ve seen PRs opened by engineers, designers, marketers, managers, and product people. There\u2019s something special about empowering more people to build and fix things. That empowering feeling is a big reason I got involved in web-dev in the first place.","content_html":"<p>AI code-writing tools make it possible for more people to write code than ever before. On my current team, I\u2019ve seen PRs opened by engineers, designers, marketers, managers, and product people. There\u2019s something special about empowering more people to build and fix things. That empowering feeling is a big reason I got involved in web-dev in the first place.<\/p><p>But we also have to care about codebase quality. AI-generated code isn\u2019t always the best, and bad code has a tendency to multiply (especially as AIs use existing code patterns to suggest new code). Manual code review is effective, but I don\u2019t want to spend all my time reviewing AI generated-code. AI scales code generation. How do we scale code review?<\/p><p>Here are some things I\u2019ve seen work:<\/p><h2 id=\"strong-universal-linting-and-formatting-standards\">Strong, universal, linting and formatting standards<\/h2><p>Humans should not be checking for code formatting or linting issues. All major languages have tooling for this, so it\u2019s one of the easiest things to set up and automate. I recommend running it on CI for all opened PRs, and having it run during local development (whether that be through watch tasks, pre-push hooks, or solid editor integration). I also recommend making your default rules pretty restrictive. It\u2019s basically free consistency, so take advantage of it. Most tooling allows you to make one-off exceptions if needed (ideally, with a comment explaining <em>why<\/em> it\u2019s needed).<\/p><h2 id=\"make-a-bunch-of-custom-linting-rules\">Make a bunch of custom linting rules<\/h2><p>Out-of-the-box linting can only get you so far. That\u2019s where custom lint rules come in. Most modern linters support custom rules, and other tools go even further (see <a href=\"https:\/\/danger.systems\/\">danger<\/a>, for example).<\/p><p>In my recent onboarding experience, I was super-impressed to find a library of custom lint rules, acting as living documentation of the patterns we were moving away from. Are you trying to migrate away from Moment.js? Write a custom lint rule for that. Are there special global objects that you don\u2019t want to be abused? Write a custom lint rule for that. It\u2019s not that hard to do (especially with a bit of AI help).<\/p><h2 id=\"a-process-for-burning-down-bad-patterns\">A process for burning-down bad patterns<\/h2><p>It\u2019s not realistic to always have 100% compliance with your linting and coding standards. New patterns ought to be adopted as your needs change, and incremental adoption is usually less risky than doing it all at once. Ideally, your standards are clearly defined, and your codebase is always progressing towards them. How do we automate that? Here\u2019s a few ideas:<\/p><p><strong>1: Have linters and formatters run only on changed files (instead of ALL files).<\/strong><\/p><p>This allows you to fail CI builds for new violations while ignoring violations in untouched files\u2014great if you want to automate \u201cleaving each file better than you found it.\u201d In the JS world, you can do this with tools like <code class=\"language-plaintext highlighter-rouge\">pretty-quick<\/code> or <code class=\"language-plaintext highlighter-rouge\">eslint-plugin-diff<\/code>, but you shouldn\u2019t <em>need<\/em> special packages. Most CLI linters can take an argument for a \u201cfiles list\u201d, and you can generate a list of changed files with git commands.<\/p><p><strong>2: When introducing a rule, create exceptions for all pre-existing violations, plus an explanatory comment.<\/strong><\/p><p>For example:<\/p><div class=\"language-js highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"c1\">\/\/ eslint-disable-next-line complexity - pre-existing violation, should be fixable<\/span><span class=\"kd\">function<\/span> <span class=\"nx\">processPayment<\/span><span class=\"p\">(<\/span><span class=\"nx\">user<\/span><span class=\"p\">,<\/span> <span class=\"nx\">order<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span><span class=\"p\">...<\/span><\/code><\/pre><\/div><\/div><p>This is great for codebases that already have universal linting and build failures for any violations. I like comments on linting exceptions because they help explain whether an exception is valid, or technical debt. You can <a href=\"https:\/\/eslint-community.github.io\/eslint-plugin-eslint-comments\/rules\/require-description.html\">make these comments required<\/a>.<\/p><p><strong>3: A ratcheting system<\/strong><\/p><p>A <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ratchet_(device)\">ratchet<\/a> allows motion in one direction but prevents motion in the other. As such, we can set up systems that only allow the number of bad patterns to decrease. For example, the JavaScript ecosystem includes tools like <a href=\"https:\/\/www.notion.com\/blog\/how-we-evolved-our-code-notions-ratcheting-system-using-custom-eslint-rules\">eslint-seatbelt<\/a>, <a href=\"https:\/\/github.com\/phenomnomnominal\/betterer\">betterer<\/a>, and <a href=\"https:\/\/github.com\/diffjam\/diffjam\">diffjam<\/a>, each of which uses a ratcheting process to gradually drive towards compliance.<\/p><h2 id=\"excellent-rules-for-ai-agents\">Excellent rules for AI agents<\/h2><p>An ounce of prevention is worth a pound of cure, and we can prevent bad code from being written in the first place with a set of excellent rules for AI agents. All the major coding agents support this (see <a href=\"https:\/\/www.anthropic.com\/engineering\/claude-code-best-practices#a-create-claudemd-files\">Claude<\/a>, <a href=\"https:\/\/cursor.com\/docs\/context\/rules\">Cursor<\/a>, <a href=\"https:\/\/docs.github.com\/en\/copilot\/how-tos\/configure-custom-instructions\/add-repository-instructions\">Copilot<\/a>).<\/p><p>Well-written rules make a huge difference. When I joined ClassDojo, I could hardly believe how much \u201cbetter\u201d the coding AIs were. It wasn\u2019t the AIs themselves (I was using the same models and editors on my own projects). It was the rules.<\/p><p>If you don\u2019t have any rules in your project, create some (AI can help with this, but start small!). Then, anytime you get weird output from an AI, consider adding or adjusting the rules. Give engineers collective ownership over these rules with permission to adjust them as needed. This can be a powerful system for preventing undesirable patterns (especially ones outside the scope of linting).<\/p><h2 id=\"ai-code-review\">AI Code Review<\/h2><p>Use AI to do a first-pass code-review. I\u2019ve seen this done with <a href=\"https:\/\/docs.cursor.com\/en\/bugbot\">Cursor\u2019s bugbot<\/a> and the <a href=\"https:\/\/github.com\/anthropics\/claude-code-action\">Claude Code action<\/a>, but I\u2019m sure that other tools and services exist. I don\u2019t see these as a substitute for human review. They aren\u2019t perfect, but I\u2019ve found them to be good at calling out things you may have overlooked (unused code, hardcoded values, etc).<\/p><h2 id=\"conclusion\">Conclusion<\/h2><p>Any time you find yourself giving feedback, ask yourself if the feedback can be integrated into your systems. Over time, these systems should improve and the burden of code reviews can become progressively lighter. One reason senior engineers still matter is because they have the instincts and the agency to design and maintain these systems. They are the most qualified people to shepherd our codebases into a brave new world.<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/09\/28\/some-thoughts-on-scaling-code-review\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/07\/03\/a-new-job-a-new-life","url":"https:\/\/www.bryanbraun.com\/2025\/07\/03\/a-new-job-a-new-life\/","date_published":"2025-07-03T00:00:00-04:00","date_modified":"2025-07-03T00:00:00-04:00","title":"A new job, a new life","summary":"Last month, I started a new job working as a fullstack software engineer at ClassDojo.","content_html":"<p>Last month, I started a new job working as a fullstack software engineer at ClassDojo.<\/p><p><img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/classdojo-logo.png\" alt=\"ClassDojo Logo\" \/><\/p><p>This was an interesting job transition for me. It was the first time I got caught up in layoffs and the first time that I ended up with multiple job offers to choose from.<\/p><p>As I weighed the decisions in front of me, I was reminded of <a href=\"https:\/\/x.com\/waitbutwhy\/status\/1367871165319049221?lang=en\">an illustration from Tim Urban<\/a> (of Wait but Why), that captured my feelings perfectly:<\/p><p><a href=\"https:\/\/x.com\/waitbutwhy\/status\/1367871165319049221?lang=en\"><img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/life-paths.jpg\" alt=\"\" \/><\/a><\/p><p>My job offers revealed the beginnings of several wildly diverging paths, which reminded me that a future of diverse opportunities remained stretched out in front of me. What an exciting thing to contemplate.<\/p><p>When I was in college, my roommates and I had a running joke. Whenever some tiny setback would occur, one of us would smile and say \u201cthe good times are over.\u201d The absurdity of it got us laughing, because we had our whole lives ahead of us. Clearly, things were going to be ok.<\/p><p>These days, \u201cthe good times are over\u201d is a common narrative in the world\u2014treated seriously, not as a joke. It can <a href=\"https:\/\/www.bryanbraun.com\/2023\/11\/26\/i-needed-to-be-happier\/\">be tempting to fall into that way of thinking<\/a>.<\/p><p>But if we could see more clearly, we\u2019d realize that a world of branching opportunities still stretches out before us, both individually and collectively. One of the key reasons I chose ClassDojo was because I saw a team that was full of energy and optimism for the future ahead. That\u2019s <a href=\"https:\/\/www.bryanbraun.com\/2021\/05\/21\/the-rivers-we-swim-in\/\">a river I want to swim in<\/a>.<\/p><p>I\u2019m excited to see where this path leads.<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/07\/03\/a-new-job-a-new-life\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"},{"id":"\/2025\/06\/28\/lessons-learned-running-a-family-minecraft-server","url":"https:\/\/www.bryanbraun.com\/2025\/06\/28\/lessons-learned-running-a-family-minecraft-server\/","date_published":"2025-06-28T00:00:00-04:00","date_modified":"2025-06-28T00:00:00-04:00","title":"Lessons learned from five years of running a family Minecraft server","summary":"For the past five years, I\u2019ve been running a family Minecraft server. The server began as a one-year experiment during the pandemic but quickly became an indispensable \u201cthird place\u201d for our kids to spend time with friends and extended family who lived far away. I\u2019m writing this post to share our research and lessons learned, in case it\u2019s useful to anyone else.","content_html":"<p>For the past five years, I\u2019ve been running a family Minecraft server. The server began as a one-year experiment during the pandemic but quickly became an indispensable \u201c<a href=\"https:\/\/en.wikipedia.org\/wiki\/Third_place\">third place<\/a>\u201d for our kids to spend time with friends and extended family who lived far away. I\u2019m writing this post to share our research and lessons learned, in case it\u2019s useful to anyone else.<\/p><h2 id=\"overview\">Overview<\/h2><h3 id=\"project-goals\">Project goals<\/h3><p>The goal behind this server was to create a fun and safe virtual space for our kids to spend time with distant family members and friends. There are lots of public Minecraft servers out there, many which are very active and have heavily customized Minecraft to create RPGs, mini-games, team sports, and more. Instead of trying to recreate something like that, we focused on building a private space to play Minecraft in all of it\u2019s many forms (various gamemodes, rulesets, enhancements, etc).<\/p><h3 id=\"project-requirements\">Project requirements<\/h3><ul>  <li>The server should use Minecraft Java edition. We prefer Java edition for it\u2019s superior creative ecosystem, including mods, plugins, resource packs, and more (for details, see <a href=\"https:\/\/www.bryanbraun.com\/2024\/03\/08\/why-we-prefer-computers-over-consoles-when-introducing-kids-to-gaming\/\">Why we prefer computers over consoles when introducing kids to gaming<\/a>).<\/li>  <li>The server should be private.<\/li>  <li>The server should give us admins full creative control to design the ideal playing experience for our family. We should be able to play in whatever worlds we want to, in any gamemode, with any ruleset we want.<\/li>  <li>The server should be relatively low-maintenance.<\/li>  <li>The server should be relatively inexpensive.<\/li><\/ul><h2 id=\"early-decisions\">Early decisions<\/h2><h3 id=\"hosting\">Hosting<\/h3><p>When it comes to hosting, there\u2019s a maintenance vs control trade-off and we were willing to adopt some maintenance overhead if it gave us a lot of control over our gaming environment. With that it mind, here are the hosting options we looked at:<\/p><ul>  <li>1st-party hosted world (Realms, etc) - Low maintenance, low control<\/li>  <li>3rd-party Minecraft-specific server rental (Shockbyte, etc) - Medium maintenance, high control<\/li>  <li>3rd-party generic server rental (Digital Ocean, etc)- High maintenance, high control<\/li>  <li>Full self-hosted (Raspberry Pi, etc) - Extremely high maintenance, highest control<\/li><\/ul><p>A service like Realms offers a polished experience, but it seemed too limiting for us (it\u2019s a single vanilla Minecraft world, with low customization). That said, managing all the code and dependencies on a Linux machine in my basement seemed unsustainable. We decided on a $5\/month server from Shockbyte. Serious server maintainers like to hate on Shockbyte because it\u2019s shared hosting. I get it\u2014us web-devs have similar opinions about services like BlueHost and HostGator. But for a small, private, family server, Shockbyte was perfect. Here\u2019s a few things I liked about it:<\/p><ul>  <li>A convenient dashboard that allows server maintenance from any web browser.<\/li>  <li>A dedicated UI for Minecraft-specific server maintenance needs (Minecraft version management, Plugin browser, User management, etc)<\/li>  <li>In-browser server console<\/li>  <li>FTP access for convenient file management and backups<\/li><\/ul><p>In short, it gave us all the control we needed while reducing a bunch of the overhead.<\/p><h3 id=\"minecraft-server-type\">Minecraft server-type<\/h3><p>In Java edition, there are <a href=\"https:\/\/www.spigotmc.org\/wiki\/what-is-spigot-craftbukkit-bukkit-vanilla-forg\/\">multiple flavors of Minecraft that you can run on a server<\/a>. These extend the original Minecraft server code, preserving the original game while adding new APIs to make Minecraft more extendable for developers. Here are a few of the server types we looked at:<\/p><ul>  <li><strong>Vanilla<\/strong>: The original Minecraft game, without much customization.<\/li>  <li><strong>Forge<\/strong>: Forge means mods. Mods are powerful and can dramatically change the game, but in order for a user to join a Forge server, they are usually required to run Forge locally, along with the mods that the server is running.<\/li>  <li><strong>Spigot\/Bukkit<\/strong>: Supports \u201cPlugins\u201d which offers medium customization and can be run on the server, without requiring users to run them locally. Spigot and Bukkit have differences but are largely cross-compatible.<\/li>  <li><strong>Paper<\/strong>: A high-performance fork of Spigot, with various fixes and additional configuration options.<\/li>  <li>\u2026<a href=\"https:\/\/www.spigotmc.org\/wiki\/what-is-spigot-craftbukkit-bukkit-vanilla-forg\/\">many others<\/a><\/li><\/ul><p>In our case, we went with Spigot. The plugins allowed us to customize the environment while still making it easy for users to join (which reduced the amount of tech support we\u2019d need to provide to grandparents, etc).<\/p><h3 id=\"plugins\">Plugins<\/h3><p>The Minecraft Spigot\/Bukkit community has a large library of plugins that you can enable on your server to customize the game. These are largely free, open-source, and built by hobbyists. Even with Shockbyte\u2019s plugin browser, it took some intermediate technical skill to find and manage plugins for our server. The main challenge is ensuring that the plugins you use are compatible with your version of Minecraft and with each other. Minecraft has been around for 15 years, which means that there are a lot of old plugins out there that no longer run on the latest version of Minecraft. A failing plugin might leave you with an obscure error message in your console, or maybe no error at all. Like all open source, support is unreliable and documentation is mixed, so you\u2019re on the hook to resolve your own issues.<\/p><p>For us, it was worth it. We tried many plugins and our favorites became indispensable to how we played Minecraft on the server. Here\u2019s a list of the ones we used the most:<\/p><ul>  <li><strong>Multiverse<\/strong> - Tools for managing multiple Minecraft worlds on a single instance (more on this below)<\/li>  <li><strong>Multiverse Portals<\/strong> - Portals for traveling between multiverse worlds<\/li>  <li><strong>Multiverse SignPortals<\/strong> - Allows Minecraft \u201csigns\u201d to act as multiverse portals<\/li>  <li><strong>Multiverse Inventories<\/strong> - Allows independent inventories in each multiverse world<\/li>  <li><strong>WorldEdit<\/strong> - Gives you crafting superpowers, like bulk-edit, cut\/copy\/paste, commands for building shapes, and more<\/li>  <li><strong>CustomImages<\/strong> Allows you to make any image into a Minecraft \u201cpainting\u201d<\/li>  <li><strong>Dynmap<\/strong> - Think \u201cGoogle Maps for Minecraft\u201d<\/li>  <li><strong>Grief Prevention<\/strong> - Configurable player restrictions that you can place in a world to prevent trolling\/griefing (with good defaults)<\/li>  <li><strong>LuckPerms<\/strong> - Highly configurable permissions, allowing you to create roles for different kinds of users<\/li>  <li><strong>ChairsReloaded<\/strong> - Enable users to build chairs and sit in them\u2026 it\u2019s simple, but strangely endearing<\/li><\/ul><h2 id=\"designing-a-virtual-play-space-one-server-many-worlds\">Designing a virtual play-space (\u201cone server, many worlds\u201d)<\/h2><p>I wanted our server to accommodate all of the different ways people might want to play Minecraft. We ended up creating a network of worlds, powered by plugins like <a href=\"https:\/\/dev.bukkit.org\/projects\/multiverse-core\">Multiverse<\/a> and <a href=\"https:\/\/luckperms.net\/\">LuckPerms<\/a>. This setup evolved over time, but mapping it out would look something like this:<\/p><p><img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/minecraft_server_worlds.png\" alt=\"A diagram showing each world on the server and how they are connected\" \/><\/p><p>Describing each world briefly\u2026<\/p><ul>  <li><strong>Land_of_Braun<\/strong> - A creative paradise, and the central hub for the server<\/li>  <li><strong>adventure_time<\/strong> - An entry-level survival world for young kids, with strong protections for builds, grief-prevention, and anti-cheating measures<\/li>  <li><strong>hard_times<\/strong> - A hard-mode survival world, for experienced players<\/li>  <li><strong>2007, nerd_night, peter_and_cameron<\/strong> - One-off survival worlds for various friend groups<\/li><\/ul><p>With these worlds, we could invite friends with a wide variety of ages and skill-levels, and usually find something they would enjoy doing.<\/p><p>In Land_of_Braun, at the spawn location, we built \u201cGrand Central Station\u201d to serve as a transportation hub. Inside it, we set up a wall of \u201csign portals\u201d for teleporting to each of the other worlds.<\/p><figure class=\"center\">  <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/grand-central-station.jpg\" \/>  <figcaption>Grand Central Station, our server's transportation hub.<\/figcaption><\/figure><figure class=\"center\">  <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/sign-portal-worlds.jpg\" \/>  <figcaption>Sign portals for teleporting to each world. <br \/>We removed one-off worlds when finished with them to preserve server resources (more on this below).<\/figcaption><\/figure><p>As Land_of_Braun filled up with interesting builds, we also created sign portals for teleporting to many of these points of interest.<\/p><p><img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/sign-portals.jpg\" alt=\"A wall of sign portals used for teleportation within the Land_of_Braun world\" \/><\/p><figure class=\"center\">  <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/peachs-castle.jpg\" alt=\"Peach's Castle from Mario 64, built in Minecraft\" \/>  <figcaption>Peach's Castle<\/figcaption><\/figure><figure class=\"center\">  <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/itza.jpg\" alt=\"Itza, built in Minecraft\" \/>  <figcaption><a href=\"https:\/\/en.wikipedia.org\/wiki\/Chichen_Itza\" target=\"_blank\">Chich\u00e9n Itz\u00e1<\/a><\/figcaption><\/figure><figure class=\"center\">  <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/star-valley-temple-minecraft.jpg\" alt=\"Star Valley Temple, built in Minecraft\" \/>  <figcaption>Star Valley Temple<\/figcaption><\/figure><figure class=\"center\">  <video controls=\"\" onended=\"this.currentTime = 0\" style=\"max-width: 100%\">    <source src=\"https:\/\/www.bryanbraun.com\/assets\/video\/ice-castle-flyby.webm\" type=\"video\/webm\" \/>    Your browser does not support the video tag.  <\/video>  <figcaption>Ice-castle, built into the side of a mountain<\/figcaption><\/figure><p>As I\u2019ve hosted many remote play sessions, I\u2019ve discovered some ways to make them more successful:<\/p><ul>  <li>It\u2019s significantly more fun to talk out loud while you play. We found that Discord and Facetime usually worked the best for this (better than Zoom\/Google Meet\/phones).<\/li>  <li>When playing in creative mode, find a building prompt that everybody can participate in (regardless of age and skill level). Some examples included:    <ul>      <li>City-building, where each person gets their own city block to build on. This prompt can span multiple play sessions (ie, expanding the city) and supports several variations (Normal city, \u201cHalloween town\u201d, Medieval village, Winter city, etc).<\/li>      <li>\u201cLet\u2019s build a castle together.\u201d Break it into parts that each person can work on (the grounds, the moat, the dungeon, etc). This can work for non-castles too, as long as it can be clearly subdivided.<\/li>      <li>Everyone build your dream house (and then give tours).<\/li>    <\/ul>  <\/li>  <li>Some commands ended up being so useful that most everyone playing on our creative world learned them:    <ul>      <li><code class=\"language-plaintext highlighter-rouge\">\/gspawn<\/code>: for returning to grand central station<\/li>      <li><code class=\"language-plaintext highlighter-rouge\">\/tp<\/code> or <code class=\"language-plaintext highlighter-rouge\">\/mvtp<\/code>: for teleporting to different worlds, locations, and people (or teleporting people to you)<\/li>      <li><code class=\"language-plaintext highlighter-rouge\">\/thru<\/code>: teleports yourself through an obstacle immediately in front of you.<\/li>      <li>Many WorldEdit commands (<code class=\"language-plaintext highlighter-rouge\">\/copy<\/code>, <code class=\"language-plaintext highlighter-rouge\">\/paste<\/code>, <code class=\"language-plaintext highlighter-rouge\">\/set<\/code>, etc)<\/li>    <\/ul>  <\/li>  <li>As the server admin, it\u2019s good to play on the server with the other players so you can see their pain-points and adjust game\/world settings to address them. For example, in typical Minecraft survival, all players must be asleep and in beds in order for the game to skip through the night to the next day. I saw that this often caused conflict in our games (often some people wanted to sleep, but others didn\u2019t want to stop what they were doing). We were able to resolve most conflicts by changing <code class=\"language-plaintext highlighter-rouge\">playersSleepingPercentage<\/code> to a majority value, like 51% (meaning, if a majority of the players are sleeping, the game would advance to the next day).<\/li>  <li>Refining permissions takes effort but it is worth it, because bad permissions can lead to a lot of issues that takes all the fun out of playing (cheating, griefing, vandalism, etc).<\/li><\/ul><h2 id=\"being-a-server-admin\">Being a server admin<\/h2><p>When using a 3rd-party hosting provider like Shockbyte, you\u2019re the one responsible for maintaining your server and keeping it running. Here\u2019s a few things I learned throughout that process.<\/p><h3 id=\"dad-the-server-went-down\">\u201cDad, the server went down\u201d<\/h3><p>If the server goes down for some reason, a simple restart may fix it. Hosts like Shockbyte make this as easy a clicking a button in the control panel.<\/p><p>If a restart doesn\u2019t work, check the console for error messages.<\/p><p>At one time, we kept seeing a message: <code class=\"language-plaintext highlighter-rouge\">Can't keep up! Is the server overloaded? Running 2867ms or 57 ticks behind.<\/code> Our server was facing memory constraints.<\/p><p><a href=\"https:\/\/shockbyte.com\/help\/knowledgebase\/articles\/minecraft-server-can-t-keep-up\">Memory constraints can happen for many reasons<\/a>, but in this case, it was caused by a recent update to a newer version of Minecraft with a higher memory requirement. We made some adjustments which addressed the issue for a while, but eventually we needed to upgrade to a server with more RAM.<\/p><p>At another time, we noticed our server struggling, and discovered that we were approaching the file storage limit for our hosting plan. Looking closer, we saw that we had some large files leftover from older Minecraft versions we had run in the past. We also saw that we had some worlds we were no longer using (worlds can be pretty heavy, space-wise). Deleting these old versions and worlds gave us plenty of space to work with.<\/p><p>Finally, I should mention the time that a curious kid used WorldEdit to build a massive sphere of TNT. As they gleefully detonated it, the rendering of the explosion slowed the server to a crawl (also a memory issue). In this case, we needed to adjust the render settings to simplify the explosion and resolve it one portion at a time. Once the explosion finished, everything went back to normal. \ud83e\udd75<\/p><h3 id=\"updating-minecraft\">Updating Minecraft<\/h3><p>Visitors to your server need to run the same version of Minecraft that <em>you<\/em> run on the server. Minecraft receives updates often, which means that you\u2019ll need to update your server-Minecraft regularly or be OK with running older versions. We\u2019ve done the update several times at this point, so here\u2019s my advice for anyone doing Minecraft server updates:<\/p><ul>  <li>Always back up your server before running updates! (more on this below)<\/li>  <li>Before attempting an update, check to see if your dependencies (ie. plugins) are compatible with the new version. Updating Minecraft usually means you need to update your plugins. If an important plugin doesn\u2019t support your target Minecraft version, then you should probably wait to update. The more plugins you use, the more likely it is that you\u2019ll need to trail the latest Minecraft version.<\/li>  <li>After you update and restart your server, watch for error messages in your console. It\u2019s the easiest way to tell if something is broken and how you might fix it.<\/li><\/ul><h3 id=\"running-backups\">Running backups<\/h3><p>In the five years we\u2019ve managed our server, the worst incident was when an errant WorldEdit command converted an enormous number of existing blocks in the Land_of_Braun into \u201cIron Bars\u201d. In the process, the server crashed, making it impossible to reverse the action with a WorldEdit \u201cundo\u201d command. Worst of all, we didn\u2019t have a recent backup. \ud83d\ude31<\/p><p>Periodic backups are essential if you\u2019re running a server. Fortunately, many Minecraft server hosts have a backup feature feature built-in. Our host (Shockbyte), allows you to schedule backups on a set interval, automatically replacing the oldest back-up when you reach a configurable limit. Super convenient! <img src=\"https:\/\/www.bryanbraun.com\/assets\/images\/minecraft-server-backups.png\" alt=\"\" \/><\/p><p>If your host does not offer automatic backups, a simple solution is to connect to your server with an FTP client (like Filezilla), and periodically copy all server files down to your local computer. This was our primary backup method for awhile, and it\u2019s what ended up saving us from the iron-apocalypse (we eventually found a semi-recent backup we could restore to).<\/p><h2 id=\"conclusion\">Conclusion<\/h2><p>As far as Minecraft servers go, ours is pretty simple, but it still required a lot of learning. Our server continues to evolve as we discover more and better ways to play. Have you ever managed a family Minecraft server? How did it go? What worked for you?<\/p><hr \/><p>Thanks for reading in your feed reader! Let me know your thoughts by leaving a comment on <a href=\"https:\/\/www.bryanbraun.com\/2025\/06\/28\/lessons-learned-running-a-family-minecraft-server\/\">the original post<\/a> or sending <a href=\"mailto:bbraun7@gmail.com\">me an email<\/a>.<\/p>"}]}