<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bug Driven Development</title>
    <description>Bug Driven Development - where bugs lead the way to better code and more efficient development, one glitch at a time.</description>
    
    <link>https://www.bugdrivendevelopment.com/</link>
    <atom:link href="https://rss.beehiiv.com/feeds/e8op8fM2Ow.xml" rel="self"/>
    
    <lastBuildDate>Wed, 8 Apr 2026 22:41:59 +0000</lastBuildDate>
    <pubDate>Mon, 20 Jan 2025 19:07:39 +0000</pubDate>
    <atom:published>2025-01-20T19:07:39Z</atom:published>
    <atom:updated>2026-04-08T22:41:59Z</atom:updated>
    
      <category>Startups</category>
      <category>Software Engineering</category>
      <category>Technology</category>
    <copyright>Copyright 2026, Bug Driven Development</copyright>
    
    <image>
      <url>https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/c17643dd-fb77-48fc-bf3d-bbab96a6b576/JustinT_a_cartoon_bug_running_amuck_inside_of_a_software_applic_4b3ee0eb-7f34-4244-9273-932d44bafbc8.png</url>
      <title>Bug Driven Development</title>
      <link>https://www.bugdrivendevelopment.com/</link>
    </image>
    
    <docs>https://www.rssboard.org/rss-specification</docs>
    <generator>beehiiv</generator>
    <language>en-us</language>
    <webMaster>support@beehiiv.com (Beehiiv Support)</webMaster>

      <item>
  <title>Coding As Fast As You Think</title>
  <description>How I Currently Use AI To Augment My Development Workflow</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/00e7aa1a-c744-4fc7-845c-60071c946b18/image__10_.jpg" length="168767" type="image/jpeg"/>
  <link>https://www.bugdrivendevelopment.com/p/coding-as-fast-as-you-think</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/coding-as-fast-as-you-think</guid>
  <pubDate>Mon, 20 Jan 2025 19:07:39 +0000</pubDate>
  <atom:published>2025-01-20T19:07:39Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">In today’s rapidly evolving development landscape, harnessing the power of AI can feel like a superpower—giving you instant feedback, brainstorming partners, and even automated testing. This guide is a deep dive into how I <b>currently</b> integrate AI into my workflow to write, test, and deploy code faster than ever before. If you’re an experienced developer who’s already comfortable slinging code but wants to take advantage of AI’s productivity boosts, you’re in the right place.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="who-this-guide-is-for">👨‍💻 <b>Who This Guide Is For</b></h2><p class="paragraph" style="text-align:left;">This isn’t a beginner’s guide to programming. Rather, it’s for seasoned engineers looking to optimize their existing workflow. You’ll see how AI can act as a brainstorming buddy, a design consultant, and a coding partner all rolled into one. The key is figuring out how to best orchestrate these tools so they complement your developer intuition without taking it over.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="my-toolkit">🛠️ <b>My Toolkit</b></h2><p class="paragraph" style="text-align:left;">I use three main models, each with a distinct role:</p><p class="paragraph" style="text-align:left;">• <a class="link" href="https://openai.com/o1/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>GPT-o1</b></a>: My brainstorming collaborator, helping shape project requirements and architecture discussions.</p><p class="paragraph" style="text-align:left;">• <a class="link" href="https://www.anthropic.com/claude/sonnet?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>Claude 3.5 Sonnet</b></a>: My go-to implementation partner for actual coding tasks.</p><p class="paragraph" style="text-align:left;">• <a class="link" href="https://openai.com/index/hello-gpt-4o/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>GPT-4o</b></a>: Handling multimodality, such as converting my whiteboard sketches to <a class="link" href="https://mermaid.js.org/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">Mermaid.js</a> diagrams.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">I access these models primarily through two tools:</p><p class="paragraph" style="text-align:left;">1. <a class="link" href="https://openai.com/chatgpt/desktop/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>macOS ChatGPT client</b></a>: Great for voice-enabled Q&A and chatting with models.</p><p class="paragraph" style="text-align:left;">2. <a class="link" href="https://www.cursor.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>Cursor</b></a>: Perfect for feeding in specific instructions, generating code, and handling version control details like pull requests and commit messages.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Other tools I use:</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://claude.a?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">Claude Chat</a>: Access Anthropic models via chat client</p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://tabby.sh/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">Tabby</a> & <a class="link" href="https://ghostty.org/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">Ghostty</a>: Tabby is my daily driver terminal, slowly starting to use Ghostty.</p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">Amazon Q (Formerly Fig)</a>: Terminal Autocomplete, if anyone knows of more modern open source alternatives to this — please let me know! </p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://github.com/jtrugman/DeployMate?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">DeployMate</a>: Autogenerate my CI/CD Pipelines</p></li></ul><p class="paragraph" style="text-align:left;"><i>I will cover my terminal and Cursor extension set up in another post if there interest — let me know! </i></p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-youll-learn">📚️ <b>What You’ll Learn</b></h2><p class="paragraph" style="text-align:left;">Over the course of this guide, I’ll walk you step by step through:</p><p class="paragraph" style="text-align:left;">• <b>Brainstorming & Requirements Gathering</b>: Forming a clear project scope with GPT-o1.</p><p class="paragraph" style="text-align:left;">• <b>Design & Architecture</b>: AI Augmented Whiteboard sessions to design and refine refine architectures.</p><p class="paragraph" style="text-align:left;">• <b>Instructions Documents</b>: Creating detailed Markdown instruction files for Cursor to create amazing code.</p><p class="paragraph" style="text-align:left;">• <b>Cursor Integration</b>: How to give Cursor precise prompts and structure your debugging workflow.</p><p class="paragraph" style="text-align:left;">• <b>Code Generation & Testing</b>: Getting the most out of AI Augmented Coding while maintaining full control and oversight.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">By the end, you’ll see how all these pieces come together, creating a seamless pipeline that transforms your ideas into working code—almost as quickly as you can think it up.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Let’s jump right in and explore how AI can supercharge your development process, starting with how I translate raw ideas into actionable requirements.</p><hr class="content_break"><h1 class="heading" style="text-align:left;" id="brainstorming-requirements-gatherin">🧠 Brainstorming & Requirements Gathering</h1><p class="paragraph" style="text-align:left;">When I’m starting a new project, my first step is <b>brainstorming</b> and gathering <b>high-level requirements</b>. Here’s where <b>GPT-o1</b> shines as a <i>thoughtful brainstorming buddy</i>—someone (or, well, something) that can push me to ask the right questions about the problem I’m trying to solve and the people I’m solving it for.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="understanding-the-problem-audience">🤔 Understanding the Problem & Audience</h2><p class="paragraph" style="text-align:left;">I often begin with very open-ended questions about the domain, target users, and the core issues they face. For instance:</p><ul><li><p class="paragraph" style="text-align:left;"><b>“I want to build a product that helps construction workers create quotes faster. What problems do they typically face in that process?”</b></p></li><li><p class="paragraph" style="text-align:left;"><b>“Which types of construction workers struggle most with quote generation—large companies or smaller contractors?”</b></p></li><li><p class="paragraph" style="text-align:left;"><b>“How do these construction workers currently create quotes, and what are some pain points in that workflow?”</b></p></li></ul><p class="paragraph" style="text-align:left;">GPT-o1 will respond with ideas about inefficiencies, potential user personas, or overlooked challenges—often prompting me to think about features or angles I hadn’t considered.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="zeroing-in-on-features-requirements">🎯 Zeroing in on Features & Requirements</h2><p class="paragraph" style="text-align:left;">Once I have a clearer picture of the problem space, I use GPT-o1 to brainstorm <b>features</b> that could alleviate the identified pain points. This conversation might look like:</p><ul><li><p class="paragraph" style="text-align:left;"><b>“Given these challenges, what key features would help streamline quote creation?”</b></p></li><li><p class="paragraph" style="text-align:left;"><b>“How might we integrate real-time price lookups or cost estimation tools?”</b></p></li><li><p class="paragraph" style="text-align:left;"><b>“What kind of reports, dashboards, or analytics might these users need?”</b></p></li></ul><p class="paragraph" style="text-align:left;">GPT-o1’s suggestions here help shape a <b>high-level feature set</b>. For the quote creation example, it might propose:</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Automated Cost Calculation</b> based on materials, labor rates, and regional factors.</p></li><li><p class="paragraph" style="text-align:left;"><b>Template Library</b> for common project types (e.g., roofing, foundation work, renovations).</p></li><li><p class="paragraph" style="text-align:left;"><b>Collaboration Tools</b> to share or edit quotes with team members.</p></li><li><p class="paragraph" style="text-align:left;"><b>Version History</b> to track changes and maintain transparency with clients.</p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="from-brainstorm-to-high-level-requi">📝 From Brainstorm to High-Level Requirements</h2><p class="paragraph" style="text-align:left;">Once these potential features are on the table, I’ll ask GPT-o1 to <b>consolidate</b> them into a list of initial requirements. These requirements usually include:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Feature Name</b>: A concise title (e.g., “Automated Quote Templates”).</p></li><li><p class="paragraph" style="text-align:left;"><b>Short Description</b>: One or two lines about the user need it addresses.</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes/Questions</b>: Outstanding unknowns or assumptions (e.g., “Should we offer different templates by state or region?”).</p></li></ul><p class="paragraph" style="text-align:left;">This final list serves as my <b>starting framework</b> for the entire project. I save it as a reference in a simple text file or an early draft of my <code>instructions.md</code>—the same file I’ll later refine with more detailed specs.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="whats-next">🏁 What’s Next?</h2><p class="paragraph" style="text-align:left;">With a high-level outline of <b>who we’re building for</b> and <b>what problems we want to solve</b>, I’m ready to start thinking about <b>how</b> to implement these features. That’s where the AI-augmented design process comes in. In the next step, I’ll grab a whiteboard and <a class="link" href="https://help.openai.com/en/articles/8400625-voice-mode-faq?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>ChatGPT Voice Mode</b></a> to begin turning these raw ideas into tangible architecture and workflow diagrams.</p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">📌 <b>Tip:</b> Keep your brainstorming chats organized. They not only document your initial thoughts but can also serve as inspiration or reference later if you need to pivot or expand your feature set.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h1 class="heading" style="text-align:left;" id="designing-with-a-whiteboard-chat-gp">🎤 Designing with a Whiteboard & ChatGPT Voice Mode</h1><p class="paragraph" style="text-align:left;">Designing the system architecture is where those raw ideas and high-level requirements start to take shape. Here’s how I use a good old-fashioned whiteboard—plus <b>ChatGPT Voice Mode</b>—to refine and validate my design concepts in real time.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="whiteboard-for-big-picture-design">✍️ Whiteboard for Big-Picture Design</h2><p class="paragraph" style="text-align:left;">I like to begin by <b>sketching out the overall flow</b> of the system on a whiteboard. This is the moment to visualize:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Core Components</b> (e.g., front end, back end, database).</p></li><li><p class="paragraph" style="text-align:left;"><b>User Flows</b> (In this example: creating a quote, editing a quote, approving a quote).</p></li><li><p class="paragraph" style="text-align:left;"><b>Key Integrations</b> (e.g., payment gateways, third-party APIs for cost lookups, etc.).</p></li></ul><h3 class="heading" style="text-align:left;" id="why-a-whiteboard">Why a Whiteboard?</h3><ul><li><p class="paragraph" style="text-align:left;"><b>Tactile Feedback</b>: Drawing arrows, erasing things, and physically standing in front of the design helps me think through problems in a spatial way.</p></li><li><p class="paragraph" style="text-align:left;"><b>Iterative</b>: Quick to adjust or pivot—just erase and redraw.</p></li><li><p class="paragraph" style="text-align:left;"><b>Shared View</b>: When collaborating with others on-site, it’s easy for everyone to gather around and point at specific parts of the diagram.</p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="real-time-conversations-with-chat-g">🎤 Real-Time Conversations with ChatGPT Voice Mode</h2><p class="paragraph" style="text-align:left;">While I’m sketching, I’ll have <b>ChatGPT Voice Mode</b> running on my Mac. This lets me <b>ask questions out loud</b> as I go:</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">By speaking these questions, I can get quick insights without breaking my flow to type them out. ChatGPT might point out performance considerations, remind me of best practices, or even suggest alternative approaches I hadn’t thought of.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-voice-mode">💡 Why Voice Mode?</h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Speed of Thought</b>: It keeps the brainstorming momentum going.</p></li><li><p class="paragraph" style="text-align:left;"><b>Less Context Switching</b>: No need to stop drawing just to type; I can keep my hands on the markers.</p></li><li><p class="paragraph" style="text-align:left;"><b>Immediate Feedback</b>: Helpful for sanity checks like, “Is this layer too coupled?” or “Are there libraries that handle this pattern well?”</p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="evolving-the-architecture">🏗️ Evolving the Architecture</h2><p class="paragraph" style="text-align:left;">As my sketch becomes more concrete, I’ll often revise it in real time:</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Identify Bottlenecks</b>: ChatGPT might highlight areas that could become performance hotspots.</p></li><li><p class="paragraph" style="text-align:left;"><b>Validate Dependencies</b>: If the design includes external APIs, I’ll confirm with ChatGPT that they can handle the expected load or provide the necessary data.</p></li><li><p class="paragraph" style="text-align:left;"><b>Tackle Unknowns</b>: Questions like, “How should I layer multiple user roles within an organization?” can spawn deeper design discussions.</p></li></ol><p class="paragraph" style="text-align:left;">I’ll keep refining until the major building blocks feel logically sound.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="converting-whiteboard-sketches-to-m">📸 Converting Whiteboard Sketches to Mermaid.js</h2><p class="paragraph" style="text-align:left;">Once the main design is settled, I <b>snap a photo</b> of the whiteboard and feed it to <b>GPT-4o</b> through ChatGPT to convert the rough diagram into <b>Mermaid.js</b> code. This will then be used in an <code>instructions.md</code> file (more to come about that), ensuring the design is both visually clear and AI-friendly for subsequent steps.</p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">📌 <b>Tip:</b> Label each component on the whiteboard (e.g., “Database,” “Auth Service,” “Quote Service”) so GPT-4o can accurately translate them into Mermaid.js.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h1 class="heading" style="text-align:left;" id="creating-the-instruction-documents">📝 Creating the Instruction Documents</h1><p class="paragraph" style="text-align:left;">After sketching out your big ideas on the whiteboard, you’re ready to <b>officially document</b> your project’s purpose, scope, and implementation details in a way for AI tools—like Cursor—to parse understand what to build. We do this through <b>multiple</b> instruction documents, each focusing on a different aspect of the project.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="why-multiple-instruction-documents">🗂 Why Multiple Instruction Documents?</h2><p class="paragraph" style="text-align:left;">It might be tempting to dump everything into one massive file. But splitting your instructions into separate, focused documents makes it easier for Cursor to <b>pinpoint</b> relevant information based on the current coding task.</p><h3 class="heading" style="text-align:left;" id="key-benefits">Key Benefits</h3><ul><li><p class="paragraph" style="text-align:left;"><b>Modular Clarity</b>: Each file covers a specific domain (database, backend, frontend, testing), so Cursor doesn’t get confused irrelevant details to the specific task at hand.</p></li><li><p class="paragraph" style="text-align:left;"><b>Focused AI Prompts</b>: Cursor can parse smaller, topic-specific files more thoroughly.</p></li><li><p class="paragraph" style="text-align:left;"><b>Easier Maintenance</b>: Updating one dedicated file is simpler than scanning a giant, all-in-one doc.</p></li></ul><hr class="content_break"><h2 class="heading" style="text-align:left;" id="the-instructions-folder">📂 The <code>instructions/</code> Folder</h2><p class="paragraph" style="text-align:left;">I like to create a folder called <code>instructions/</code> at the root of my project. Inside, I’ll include multiple Markdown files, each tailored to a specific part of the system:</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>instructions.md</b> – Grand overview of the entire project.</p></li><li><p class="paragraph" style="text-align:left;"><b>database_instructions.md</b> – Schema design and database references.</p></li><li><p class="paragraph" style="text-align:left;"><b>backend_instructions.md</b> – Endpoints, authentication, server architecture.</p></li><li><p class="paragraph" style="text-align:left;"><b>frontend_instructions.md</b> – UI mock-ups, tech stack decisions, and workflows.</p></li><li><p class="paragraph" style="text-align:left;"><b>testing_instructions.md</b> – Guidelines for unit, integration, and E2E tests.</p></li></ol><p class="paragraph" style="text-align:left;">Depending on your project, you might add or rename these to fit your needs.</p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">📌 <b>Note:</b> Most AI models may struggle with very new or niche libraries and frameworks unless given ample context. When using advanced or less common technologies, include detailed directions and documentation in your instructions directory. Conversely, if you’re building a web app with well-established technologies (such as React and FastAPI), the AI can usually deliver high-quality output with minimal supplemental information.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h2 class="heading" style="text-align:left;" id="instructionsmd-the-grand-overview">✨ <code>instructions.md</code>: The Grand Overview</h2><p class="paragraph" style="text-align:left;">This file serves as your <b>central hub</b>, laying out the crucial context that Cursor and other readers will need.</p><p class="paragraph" style="text-align:left;">For my overview I like using Simon Sinek’s “Start With Why,”:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Why</b>: The core motivation or user problem behind your project. Providing this context helps Cursor make <b>better implementation decisions</b> when details aren’t explicitly spelled out. For instance, if the <b>why</b> is to boost performance for users on slow networks, Cursor might automatically recommend more efficient data-fetching patterns.</p></li><li><p class="paragraph" style="text-align:left;"><b>What</b>: The features and scope you plan to address. This is the <b>roadmap</b> of your project, giving the AI a clear idea of exactly <b>what</b> needs to be built.</p></li><li><p class="paragraph" style="text-align:left;"><b>How</b>: The chosen technologies, coding style, or architectural patterns you want to follow. Specifying your coding philosophies (e.g., modular microservices vs. monolith, React vs. Vue) tells Cursor <b>how</b> to approach each feature so it remains consistent with your standards. This is where you incorporate your Mermaid.js diagrams as well as drafting out your desired file structure for the project.</p></li></ul><p class="paragraph" style="text-align:left;">You might also list <b>major milestones</b> or <b>release phases</b> in the main <code>instructions.md</code> file.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="database-instructionsmd">🗃️ <code>database_instructions.md</code></h2><p class="paragraph" style="text-align:left;">Here’s where you specify:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Chosen Database</b>: Whether you’re using Supabase, Firebase, MongoDB, etc.</p></li><li><p class="paragraph" style="text-align:left;"><b>Schema Definitions</b>: Tables/collections, relationships, indexes.</p></li><li><p class="paragraph" style="text-align:left;"><b>Performance Considerations</b>: Any caching strategies or indexing best practices to keep queries fast.</p></li><li><p class="paragraph" style="text-align:left;"><b>Relevant Documentation: </b>Providing references to any SDKs, Libraries you want to use for your database interactions. </p></li></ul><p class="paragraph" style="text-align:left;">By detailing this, you give Cursor enough background to generate coherent model definitions, data-access layers, or migration scripts.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="backend-instructionsmd">⚙️ <code>backend_instructions.md</code></h2><p class="paragraph" style="text-align:left;">Cover all things server-side:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Architecture</b>: Monolith vs. microservices, or perhaps a serverless approach.</p></li><li><p class="paragraph" style="text-align:left;"><b>Authentication</b>: How you plan to handle user logins and permissions (JWT, OAuth, sessions).</p></li><li><p class="paragraph" style="text-align:left;"><b>Endpoints</b>: REST/GraphQL endpoints, including expected inputs/outputs.</p></li><li><p class="paragraph" style="text-align:left;"><b>Security</b>: Guidance on handling secrets, API keys, and data sanitization.</p></li></ul><p class="paragraph" style="text-align:left;">Cursor uses this to scaffold your backend files and ensure each endpoint aligns with your security and performance needs.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="frontend-instructionsmd">🖥️ <code>frontend_instructions.md</code></h2><p class="paragraph" style="text-align:left;">Focus on the user interface and client-side:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Frameworks</b>: Next.js, React, Vue, etc. TailwindCSS for CSS framework, etc.</p></li><li><p class="paragraph" style="text-align:left;"><b>Component Libraries: </b><a class="link" href="https://21st.dev?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow">21st.dev</a>, Shadcn, DaisyUI, etc.</p></li><li><p class="paragraph" style="text-align:left;"><b>Data Flow</b>: How state is managed and how data is fetched from the backend.</p></li><li><p class="paragraph" style="text-align:left;"><b>Styling & Theming</b>: Brand guidelines, color schemes, typography rules.</p></li></ul><p class="paragraph" style="text-align:left;">Giving Cursor these design details helps it propose front-end structures and even generate boilerplate code consistent with your layout.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="testing-instructionsmd">🧪 <code>testing_instructions.md</code></h2><p class="paragraph" style="text-align:left;">Testing is essential to reliability and maintainability:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Test Types</b>: Unit, integration, end-to-end (E2E).</p></li><li><p class="paragraph" style="text-align:left;"><b>Frameworks</b>: Jest, Pytest, Cypress, etc.</p></li><li><p class="paragraph" style="text-align:left;"><b>CI/CD Integration</b>: How tests run in your pipeline (GitHub Actions, GitLab CI).</p></li><li><p class="paragraph" style="text-align:left;"><b>Coverage Goals</b>: How much of your codebase should be tested.</p></li></ul><p class="paragraph" style="text-align:left;">With these guidelines, Cursor can generate test scaffolding that aligns with your chosen tools and coverage requirements.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="ui-mockups">🖼 UI Mockups</h2><p class="paragraph" style="text-align:left;">If you’re exporting wireframes or high-fidelity screens from Figma (or any other design tool), you can attach them <b>directly to your prompts</b> in <b>Cursor Compose</b>. This way, the AI has a visual reference for <b>what</b> the UI should look like and can tailor its code suggestions accordingly.</p><ul><li><p class="paragraph" style="text-align:left;"><b>File Placement</b>: Store your PNG exports (e.g., <code>login_screen.png</code>, <code>dashboard_mockup.png</code>) in the <code>instructions/</code> folder.</p></li><li><p class="paragraph" style="text-align:left;"><b>Attaching in Cursor Compose</b>: When writing your prompt, reference your mockup file explicitly so Cursor can factor it in. For example:</p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><ul><li><p class="paragraph" style="text-align:left;"><b>Keep Images Updated</b>: If you tweak your design in Figma, remember to <b>re-export</b> the PNG and <b>re-attach</b> it. This ensures Cursor sees the most accurate, up-to-date reference for your UI.</p></li></ul><p class="paragraph" style="text-align:left;">By including these PNGs in your <b>Cursor Compose</b> prompts, you help the AI generate code that aligns with your exact visual layout and user experience goals.</p><hr class="content_break"><p class="paragraph" style="text-align:left;">Armed with these <b>instruction documents</b>, you’ve given both yourself and Cursor a clear framework to follow. Next up, you’ll see how to feed this information into your coding environment so you can start building your project with AI guidance at every step.</p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">📌 <b>Tip:</b> Whenever you update one file—say, you rename a database field—it may need to be reflected elsewhere (like in your backend or front-end instructions). By keeping your <b>instructions</b> consistent across these files, you’ll make sure Cursor and any other contributors always have the most accurate, up-to-date roadmap.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><hr class="content_break"><h1 class="heading" style="text-align:left;" id="interacting-with-cursor">🤖 Interacting with Cursor</h1><p class="paragraph" style="text-align:left;">Now that you’ve created your <b>instruction documents</b>—it’s time to put them to work in <b>Cursor</b>. This section covers how to structure prompts and optimize your workflow for both straightforward code generation and deeper debugging sessions.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="what-model-do-i-use">🧐 What Model Do I Use?</h2><p class="paragraph" style="text-align:left;">Cursor supports a large variety of models and even allows you to run your own model for some features. </p><p class="paragraph" style="text-align:left;">As of January 2025, I’ve prefer Claude 3.5 Sonnet and found it provides the highest quality code generation for my use cases. </p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="bringing-instructions-into-cursor">🏷 Bringing Instructions into Cursor</h2><p class="paragraph" style="text-align:left;">Cursor offers two main interfaces for AI interaction: <b>Composer</b> and <b>Chat</b>. Each one can consume your prompts differently:</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Cursor Compose</b></p><ul><li><p class="paragraph" style="text-align:left;">Ideal for <b>generating or refactoring code</b>.</p></li><li><p class="paragraph" style="text-align:left;">You can attach specific Markdown files (like <code>instructions.md</code> or <code>database_instructions.md</code>) and reference them in your prompt.</p></li><li><p class="paragraph" style="text-align:left;">Perfect for step-by-step feature implementation or larger codebase changes.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Cursor Chat</b></p><ul><li><p class="paragraph" style="text-align:left;">Functions like a conversation: helpful for <b>debugging</b>, clarifying questions, or exploring multiple approaches interactively.</p></li><li><p class="paragraph" style="text-align:left;">You can paste snippets of your instructions here or reference them as needed to give the AI context.</p></li></ul></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="prompt-strategies-for-cursor">💡 Prompt Strategies for Cursor</h2><p class="paragraph" style="text-align:left;">When you prompt Cursor, <b>clarity</b> and <b>context</b> are key. Here are some best practices:</p><h3 class="heading" style="text-align:left;" id="reference-relevant-instruction-docs">🔖 Reference Relevant Instruction Docs</h3><ul><li><p class="paragraph" style="text-align:left;"><b>Attach</b> specific sections from your instructions documents.</p></li><li><p class="paragraph" style="text-align:left;"><b>Identify </b>the specific part of your instructions to build.</p></li><li><p class="paragraph" style="text-align:left;"><b>Step by Step </b>thinking through the implementation <i>(adding this to the prompt helps improve output in chat client)</i>.</p></li><li><p class="paragraph" style="text-align:left;">For example:</p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">This ensures Cursor understands the exact requirements and how you want those requirements built out.</p><h3 class="heading" style="text-align:left;" id="summaries-and-checkpoints">📃 Summaries and Checkpoints</h3><ul><li><p class="paragraph" style="text-align:left;">After Cursor suggests code, review each suggestion, and approve <b>one by one</b>. It is best to review each change and comment on which changes need improvement rather than blindly accepting all proposed changes.</p></li></ul><p class="paragraph" style="text-align:left;">In the event Cursor has overlooked important constraints or design choices you outlined you can prompt around implementing the specific missed requirements.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="when-to-use-composer-vs-chat">🔍 When to Use Composer vs. Chat</h2><p class="paragraph" style="text-align:left;"><b>Cursor Compose</b> is best for <b>implementation</b> or <b>large-scale refactors</b>. You provide:</p><ul><li><p class="paragraph" style="text-align:left;">A code file or multiple files.</p></li><li><p class="paragraph" style="text-align:left;">Relevant instruction docs.</p></li><li><p class="paragraph" style="text-align:left;">A structured prompt outlining what you want changed or added.</p></li></ul><p class="paragraph" style="text-align:left;"><b>Cursor Chat</b> works better as your <b>live debugging buddy</b>. If something isn’t compiling or a certain function is misbehaving:</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Chat will propose fixes or alternative approaches, and you can keep iterating until it’s resolved.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="example-flow">🔧 Example Flow</h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Planning a Feature</b>: Attach your <code>instructions.md</code> or relevant sub-file to Cursor Compose, specifying which feature you want to build first.</p></li><li><p class="paragraph" style="text-align:left;"><b>Generating Code</b>: Let Cursor generate the logic.</p></li><li><p class="paragraph" style="text-align:left;"><b>Debugging</b>: Switch to Cursor Chat if you hit a roadblock or want interactive Q&A.</p></li><li><p class="paragraph" style="text-align:left;"><b>Refinement</b>: Return to Compose with updated instructions or code files to refine or extend the solution.</p></li></ol><hr class="content_break"><h2 class="heading" style="text-align:left;" id="tip-maintain-context">📌 Tip: Maintain Context</h2><p class="paragraph" style="text-align:left;">Cursor’s output depends heavily on the <b>context</b> it’s given. Make sure to:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Attach</b> or <b>paste</b> only the relevant instruction docs or code sections.</p></li><li><p class="paragraph" style="text-align:left;">Update your prompts with the latest insights or changes.</p></li><li><p class="paragraph" style="text-align:left;"><b>Re-run</b> the prompt if you add new info or instructions partway through.</p></li></ul><p class="paragraph" style="text-align:left;">By keeping Cursor “in the loop,” you’ll get outputs that consistently align with your project’s <b>requirements.</b></p><hr class="content_break"><p class="paragraph" style="text-align:left;">With this interaction workflow in place, you can start <b>building out</b> your project feature by feature, using Cursor’s AI to move fast while maintaining quality. In the next section, we’ll dive into <b>practical code and prompt examples</b>, showcasing real-world snippets of how this process looks in action.</p><hr class="content_break"><h1 class="heading" style="text-align:left;" id="code-prompt-examples">🧩 Code & Prompt Examples</h1><p class="paragraph" style="text-align:left;">Now that you know <b>how</b> to interact with Cursor and leverage your instruction documents, it’s time to see these concepts in action. In this section, we’ll walk through some <b>practical scenarios</b>—from generating new features to troubleshooting bugs—to illustrate how you can seamlessly integrate AI into your coding workflow.</p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="generating-a-new-feature-from-instr">⚙️ Generating a New Feature From Instructions</h2><p class="paragraph" style="text-align:left;">Let’s say you’re ready to implement a <b>“Create Quote”</b> feature in your backend. You have a solid outline in <code>backend_instructions.md</code> describing the endpoint behavior and authentication flow, plus a schema in <code>database_instructions.md</code> detailing how quotes should be stored.</p><h3 class="heading" style="text-align:left;" id="example-prompt-in-cursor-compose">Example Prompt in Cursor Compose</h3><div class="codeblock"><pre><code>Let&#39;s complete feature 2 in @backend_instructions.md -- Please generate a new Fast API endpoint called /create-quote that:
1. Accepts JSON containing project details and user info.
2. Validates the data against our &quot;quotes&quot; schema in database_instructions.md.
3. Inserts the new quote into the &quot;quotes&quot; table/collection. Reference @database_instructions.md for database configuration.
4. Returns a 201 status with the newly created quote data.

Remember, follow the authentication rules in @backend_instructions.md (use our JWT-based auth).
Think step by step through the implementation</code></pre></div><h3 class="heading" style="text-align:left;" id="what-happens-next">What Happens Next?</h3><p class="paragraph" style="text-align:left;">1. <b>Context Check</b>: Cursor reads the instructions on both the backend and database instruction files.</p><p class="paragraph" style="text-align:left;">2. <b>Generation</b>: It outputs an Fast API endpoint based on the requirement.</p><p class="paragraph" style="text-align:left;">3. <b>Review & Refine</b>: If you notice requirements are missing, you can ask Cursor compose to add those — such as if it forgot error handling.</p><p class="paragraph" style="text-align:left;">4. <b>Testing</b>: Once generated, if something doesn’t work as expected, you should move to Chat for interactive debugging. </p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="debugging-in-real-time">🐛 Debugging in Real Time</h2><p class="paragraph" style="text-align:left;">Let’s say the <b>CREATE QUOTE</b> endpoint runs into a runtime error. You jump into <b>Cursor Chat</b>:</p><div class="codeblock"><pre><code>When sending a POST request to the /create-quote endpoint I keep getting a 500 error, here&#39;s the logs @terminal line 20-55

Think step by step through the resolution of this bug, remember it is supposed to respond with the API message outlined in feature 2 of @backend_instructions.md</code></pre></div><p class="paragraph" style="text-align:left;">Make sure to use Command Enter when running the prompt in Cursor Chat, this will contextualize the question around your whole codebase.</p><p class="paragraph" style="text-align:left;">Keep working through the bug with Cursor Chat until you are satisfied it’s resolved and then move back to Composer to implement tests before building the next feature. </p><hr class="content_break"><h2 class="heading" style="text-align:left;" id="test-generation">🧪 Test Generation</h2><p class="paragraph" style="text-align:left;">Now that the <b>CREATE QUOTE</b> endpoint is running well. You want to create unit tests for it. Let’s go to Cursor Composer and enter:</p><div class="codeblock"><pre><code>Let&#39;s now test the /create-quote endpoint using a mock as described in @testing_instructions.md -- make sure this test has verbose logging for debugging purposes
Think step by step</code></pre></div><p class="paragraph" style="text-align:left;">In your testing instructions, specify that Cursor should provide a test suite covering <b>both success and failure</b> scenarios—using mocks for any external dependencies. This ensures your logic is thoroughly vetted and also makes debugging easier.</p><p class="paragraph" style="text-align:left;">With the tests in place, you can quickly validate each new feature before moving on to the next item on your roadmap.</p><hr class="content_break"><h1 class="heading" style="text-align:left;" id="conclusion-future-outlook">🚀 Conclusion & Future Outlook</h1><p class="paragraph" style="text-align:left;">As you’ve seen, integrating AI into your development workflow—from brainstorming with GPT-o1, sketching architecture with ChatGPT Voice Mode, organizing detailed instruction documents, to interacting with Cursor—creates a streamlined, context-aware process that accelerates both productivity and code quality.</p><h2 class="heading" style="text-align:left;" id="key-takeaways">Key Takeaways</h2><ul><li><p class="paragraph" style="text-align:left;"><b>Holistic Context</b>: By documenting the <b>details</b> of your project, you ensure that AI tools like Cursor make informed, context-rich decisions.</p></li><li><p class="paragraph" style="text-align:left;"><b>Iterative Workflow</b>: Whether it’s generating new features, refining existing code, or debugging on the fly, the combination of Compose and Chat keeps your development agile.</p></li><li><p class="paragraph" style="text-align:left;"><b>Testing</b>: Integrating automated tests ensures that your endpoints and components not only work but are also easier to troubleshoot.</p></li><li><p class="paragraph" style="text-align:left;"><b>Visual Guidance</b>: UI mockups attached directly in your Cursor Compose prompts help align generated code with your intended user interface.</p></li></ul><h2 class="heading" style="text-align:left;" id="looking-ahead">🔭 Looking Ahead</h2><p class="paragraph" style="text-align:left;">AI technology is evolving at breakneck speed—and so is its role in software development. As AI continues to reshape our workflows, I’ll keep you posted on the latest strategies I use to maximize developer productivity. </p><p class="paragraph" style="text-align:left;">If there’s interest, I’ll also dive into my project, <a class="link" href="https://github.com/jtrugman/DeployMate?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><b>DeployMate</b></a>, which auto-generates CI/CD pipelines for me to streamline builds and deployments.</p><p class="paragraph" style="text-align:left;">Happy coding, and see you in the next update!</p><p class="paragraph" style="text-align:left;">-Justin</p><p class="paragraph" style="text-align:left;"><i>Cofounder & Head of Technology @ </i><a class="link" href="https://betterfuturelabs.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><i>BetterFutureLabs</i></a></p><p class="paragraph" style="text-align:left;"><a class="link" href="http://justintrugman.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><i>Website</i></a><i> | </i><a class="link" href="https://www.linkedin.com/in/justin-trugman/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><i>LinkedIn</i></a><i> | </i><a class="link" href="http://x.com/justin_trugman/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=coding-as-fast-as-you-think" target="_blank" rel="noopener noreferrer nofollow"><i>X</i></a></p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=ce40acb3-4e78-48b1-8ff2-8c27b9e737e2&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Phi-4: It&#39;s Not Just About Size, It&#39;s About Data!</title>
  <description>A NotebookLM Summary of the Phi-4 Paper</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8f547d71-3fc6-45bc-89a5-d73af6779b6c/image.jpg" length="137720" type="image/jpeg"/>
  <link>https://www.bugdrivendevelopment.com/p/phi-4-it-s-not-just-about-size-it-s-about-data</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/phi-4-it-s-not-just-about-size-it-s-about-data</guid>
  <pubDate>Tue, 17 Dec 2024 18:51:52 +0000</pubDate>
  <atom:published>2024-12-17T18:51:52Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">I’ve been finding <a class="link" href="https://notebooklm.google.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=phi-4-it-s-not-just-about-size-it-s-about-data" target="_blank" rel="noopener noreferrer nofollow">NotebookLM</a> super helpful for breaking down large bodies of text into more consumable formats like podcasts and casual summaries. </p><p class="paragraph" style="text-align:left;">Check out Notebook LM’s take on the new Phi-4 model that Microsoft just launched.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Alright, let&#39;s talk about Phi-4. You know how everyone&#39;s been obsessed with making models bigger and bigger? Well, the folks behind Phi-4 decided to go a different route, and it&#39;s pretty interesting. Instead of just throwing more compute at the problem, they focused on something way more important: <b>data quality</b>. And guess what? It worked! This 14-billion parameter model is proof that you can achieve serious performance gains, especially in reasoning tasks, by being smart about your data, especially <b>synthetic data</b>. So, let&#39;s dive into how they did it.</p><p class="paragraph" style="text-align:left;"><b>Synthetic Data: Not Just a Cheap Trick</b></p><p class="paragraph" style="text-align:left;">So, forget about just scraping the web and hoping for the best. The Phi-4 team went all-in on synthetic data, and not just as a stand-in for &quot;real&quot; data. They used it strategically because it has some real advantages:</p><ul><li><p class="paragraph" style="text-align:left;"><b>It&#39;s like spoon-feeding for models:</b> Synthetic data lets you control the learning process, presenting challenges in a nice, gradual way, so the model can actually grasp complex patterns.</p></li><li><p class="paragraph" style="text-align:left;"><b>It matches what the model will actually see:</b> You can format your synthetic data to look like the kinds of outputs you expect from your model, which is super useful for things like chat interactions, where web forum data might not be the best fit.</p></li></ul><p class="paragraph" style="text-align:left;">They used some cool methods for creating this synthetic data, like <b>multi-agent prompting</b>, <b>self-revision workflows</b>, and <b>instruction reversal</b>. These techniques helped them build datasets that boost problem-solving skills, which is awesome.</p><p class="paragraph" style="text-align:left;"><b>Organic Data Still Matters (But It Needs a Makeover)</b></p><p class="paragraph" style="text-align:left;">Okay, so synthetic data is a big deal, but the organic data used as the &quot;seeds&quot; is also important. The team didn&#39;t just grab any old data; they were super picky. They carefully filtered web content, books, and code repos, looking for the stuff that had real educational value and encouraged deep reasoning. They then used these high-quality &quot;seeds&quot; to generate their synthetic data.</p><p class="paragraph" style="text-align:left;"><b>Pretraining, Midtraining, and Post-Training: It&#39;s a Journey</b></p><p class="paragraph" style="text-align:left;">The Phi-4 model went through three main stages of training, and each had some clever twists:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Pretraining:</b> This is where the model sees a ton of synthetic data, which helps it learn those complex reasoning skills. They mixed in web rewrites, filtered web data, and code data. What&#39;s cool is they realized that doing more rounds of training on the same synthetic data was better than just adding more web data.</p></li><li><p class="paragraph" style="text-align:left;"><b>Midtraining:</b> Here, they stretched the model&#39;s context window from 4K to 16K, which is a fancy way of saying the model can now handle longer bits of text. They also gave extra attention to data that was already longer than 4K.</p></li><li><p class="paragraph" style="text-align:left;"><b>Post-Training:</b> This stage is all about fine-tuning the model to be a helpful AI assistant. They used supervised fine-tuning (SFT) and something called <b>Direct Preference Optimization (DPO)</b>. They also came up with a very smart technique called <b>Pivotal Token Search (PTS)</b> to make their DPO training even more effective.</p></li></ul><p class="paragraph" style="text-align:left;"><b>Performance: It&#39;s a Reasoning Machine!</b></p><p class="paragraph" style="text-align:left;">Phi-4 really shines when it comes to reasoning-heavy tasks. It can hang with much larger models, even beating its &quot;teacher&quot; model, GPT-4o, on some benchmarks. It also nailed a brand-new math competition, which is a solid sign that it&#39;s actually generalizing instead of just memorizing.</p><p class="paragraph" style="text-align:left;">Of course, it&#39;s not perfect. It struggles a bit with:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Strict instructions:</b> It&#39;s not always great at following very specific formatting rules.</p></li><li><p class="paragraph" style="text-align:left;"><b>Factual knowledge:</b> It&#39;s a relatively small model, so it can sometimes make up facts, especially if they are obscure.</p></li></ul><p class="paragraph" style="text-align:left;"><b>Pivotal Token Search (PTS): The Secret Sauce</b></p><p class="paragraph" style="text-align:left;">This is where things get interesting. The <b>Pivotal Token Search (PTS)</b> is a way of finding those key tokens that really make or break a model&#39;s answer. By focusing on these pivotal tokens, the team was able to train the model more effectively. Here&#39;s how it works:</p><ul><li><p class="paragraph" style="text-align:left;">They look at how each token affects the chance of getting a correct answer.</p></li><li><p class="paragraph" style="text-align:left;">They find the tokens that cause big swings in success probability.</p></li><li><p class="paragraph" style="text-align:left;">They then use those tokens to create DPO pairs, training the model to favor the &quot;correct&quot; token.</p></li></ul><p class="paragraph" style="text-align:left;"><b>What Does This Mean for Us?</b></p><p class="paragraph" style="text-align:left;">Phi-4 is a big deal because it shows that you don&#39;t need to make your models massive to get awesome results. By focusing on <b>data quality</b> and using smart techniques like <b>Pivotal Token Search</b>, you can achieve significant gains. It&#39;s a reminder that being creative and thoughtful with your data is just as important as having the latest hardware.</p><p class="paragraph" style="text-align:left;">Some things we should keep exploring include:</p><ul><li><p class="paragraph" style="text-align:left;">Optimizing the mix of data used for training while also considering how the model is fine-tuned later.</p></li><li><p class="paragraph" style="text-align:left;">Creating synthetic data that can help the model get better at instruction following.</p></li><li><p class="paragraph" style="text-align:left;">Finding better ways to prevent those pesky factual hallucinations.</p></li></ul><p class="paragraph" style="text-align:left;">In short, Phi-4 is a win for data-centric AI, showing that smart data strategies can lead to big improvements in LLM performance!</p><div class="recommendation" id="8174647b-4018-4e2b-9b37-b686dfde37fd"><figure class="recommendation__logo"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M14.8287 7.75737L9.1718 13.4142C8.78127 13.8047 8.78127 14.4379 9.1718 14.8284C9.56232 15.219 10.1955 15.219 10.586 14.8284L16.2429 9.17158C17.4144 8.00001 17.4144 6.10052 16.2429 4.92894C15.0713 3.75737 13.1718 3.75737 12.0002 4.92894L6.34337 10.5858C4.39075 12.5384 4.39075 15.7042 6.34337 17.6569C8.29599 19.6095 11.4618 19.6095 13.4144 17.6569L19.0713 12L20.4855 13.4142L14.8287 19.0711C12.095 21.8047 7.66283 21.8047 4.92916 19.0711C2.19549 16.3374 2.19549 11.9053 4.92916 9.17158L10.586 3.51473C12.5386 1.56211 15.7045 1.56211 17.6571 3.51473C19.6097 5.46735 19.6097 8.63317 17.6571 10.5858L12.0002 16.2427C10.8287 17.4142 8.92916 17.4142 7.75759 16.2427C6.58601 15.0711 6.58601 13.1716 7.75759 12L13.4144 6.34316L14.8287 7.75737Z"></path></svg></figure><h3 class="recommendation__title"> Phi-4_ A 14B Parameter Language Model </h3><iframe src="https://audio.beehiiv.com?token=eyJhbGciOiJIUzI1NiJ9.IntcImJhY2tncm91bmRDb2xvclwiOm51bGwsXCJiYWNrZ3JvdW5kVGhlbWVcIjpudWxsLFwic3JjXCI6XCJodHRwczovL2JlZWhpaXYtcHVibGljYXRpb24tZmlsZXMuczMuYW1hem9uYXdzLmNvbS91cGxvYWRzL2Rvd25sb2FkYWJsZXMvYzE3NjQzZGQtZmI3Ny00OGZjLWJmM2QtYmJhYjk2YTZiNTc2LzgxNzQ2NDdiLTQwMTgtNGUyYi05YjM3LWI2ODZkZmRlMzdmZC9QaGktNF8lMjBBJTIwMTRCJTIwUGFyYW1ldGVyJTIwTGFuZ3VhZ2UlMjBNb2RlbC53YXY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTZcXHUwMDI2WC1BbXotQ3JlZGVudGlhbD1BS0lBUUNNSFRRU0UySkdBR1hISiUyRjIwMjYwNDA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3RcXHUwMDI2WC1BbXotRGF0ZT0yMDI2MDQwOFQyMjQyMDFaXFx1MDAyNlgtQW16LUV4cGlyZXM9NjA0ODAwXFx1MDAyNlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdFxcdTAwMjZYLUFtei1TaWduYXR1cmU9MWNjYjlhZThiMjNiOGNiZjg0ZmE2MmMwN2EyNzhkMWU1ZGRkMzRhNzA1ZWMyMGYxMWM4OGIxYmQ1N2Y3MDc0MVwiLFwidHlwZVwiOlwiYXVkaW8vd2F2XCIsXCJ0aHVtYm5haWxVcmxcIjpudWxsLFwidGl0bGVcIjpcIlBoaS00XyBBIDE0QiBQYXJhbWV0ZXIgTGFuZ3VhZ2UgTW9kZWxcIn0i.75o9DcRkUOv8ze4r_HhEh9RHH7eNn4hQYwEKbRyoe3M" frameborder="0" width="100%" height="162" allow="encrypted-media"></iframe></div><p class="paragraph" style="text-align:left;">Source: <a class="link" href="https://arxiv.org/abs/2412.08905?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=phi-4-it-s-not-just-about-size-it-s-about-data" target="_blank" rel="noopener noreferrer nofollow">https://arxiv.org/abs/2412.08905</a></p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=47a52b63-a631-4128-a7f1-b67eb5fa030b&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Launching Tether &amp; The Journey So Far</title>
  <description>Excited to share the story of Tether a new concept we are validating out of BetterFutureLabs</description>
  <link>https://www.bugdrivendevelopment.com/p/launching-tether-the-journey-so-far</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/launching-tether-the-journey-so-far</guid>
  <pubDate>Fri, 04 Oct 2024 15:59:17 +0000</pubDate>
  <atom:published>2024-10-04T15:59:17Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what I got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Launch of Tether - The Data Exchange for Agentic AI</p></li><li><p class="paragraph" style="text-align:left;">Tokenization - a crucial concept to understand for building AI systems</p></li><li><p class="paragraph" style="text-align:left;">Touching Linux is good for you</p></li></ul><h3 class="heading" style="text-align:left;" id="lets-start-off-this-week-by-talking"><b>Let&#39;s start off this week by talking about Tether</b></h3><p class="paragraph" style="text-align:left;">I’m excited to share we are launching a new product Tether for validation out of <a class="link" href="https://www.betterfuturelabs.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far" target="_blank" rel="noopener noreferrer nofollow">BetterFutureLabs</a>. </p><p class="paragraph" style="text-align:left;">Tether is the result of extensive research and development we have been doing in multi-agent and agentic systems, which we started last November. Through this work, we’ve uncovered a key insight: AI, particularly agentic systems, consumes data in a fundamentally different way than humans do. As AI continues to evolve, it’s becoming clear that AI systems, rather than humans, will be the primary consumers of data in the future. However, most existing data sources are tailored for human use at some point in the data pipeline, not for AI Systems. </p><p class="paragraph" style="text-align:left;">Tether is here to change that. We’re building a data exchange specifically designed for agentic AI systems to be the end consumers of data, making it more accessible and legible for these advanced AI models and systems.</p><p class="paragraph" style="text-align:left;">We are currently partnering with multiple respected data providers to be listed on our platform (5 data provider partnerships so far), and we’re looking for developers interested in becoming Beta users.</p><p class="paragraph" style="text-align:left;">If you’re interested in joining the Tether Beta program, you can sign up <a class="link" href="http://beta.choosetether.com?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far" target="_blank" rel="noopener noreferrer nofollow">here</a>.</p><p class="paragraph" style="text-align:left;">To learn more about Tether, check out our recently published podcast </p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="true" class="youtube_embed" frameborder="0" height="100%" src="https://youtube.com/embed/GEX-bcn-oPk" width="100%"></iframe><h3 class="heading" style="text-align:left;" id="tokenization">📖 Tokenization</h3><p class="paragraph" style="text-align:left;">Tokenization is vital for AI systems as it breaks text into smaller units (tokens), allowing models to process and interpret language more effectively. For AI developers, understanding tokenization is key to optimizing data usage and enhancing model performance.</p><p class="paragraph" style="text-align:left;">If you’re interested in learning more about tokenization, check out this new course by Andrew Ng.</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/AndrewYNg/status/1841496274350247951?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far"><p> Twitter tweet </p></a></blockquote><h2 class="heading" style="text-align:left;" id="meme-of-the-week">😂 Meme of the Week</h2><p class="paragraph" style="text-align:left;">Instead of touching grass this week go and touch Linux</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dhh/status/1841876620141068560?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far"><p> Twitter tweet </p></a></blockquote><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dhh/status/1839791162309390403?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let me know on X (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=launching-tether-the-journey-so-far" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s X</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=1b3f5f9a-754e-477f-b4c5-43dcb0f40694&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Decoding Software Licenses: An Introduction for Developers </title>
  <description>Simplifying License Management in Your Development Workflow</description>
  <link>https://www.bugdrivendevelopment.com/p/developers-guide-to-software-licenses</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/developers-guide-to-software-licenses</guid>
  <pubDate>Mon, 13 Nov 2023 12:19:00 +0000</pubDate>
  <atom:published>2023-11-13T12:19:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Engineering teams are increasingly relying on open source software, with 80% of organizations reporting an uptick in its use over the past year[1]. This trend reflects a broad adoption of open source across various elements of the tech stack, from programming languages to operating systems and databases[1]. However, this surge in usage brings forth challenges, particularly in license compliance. This Bug Driven Development post is a Developer’s guide to license compliance, specifically we will be covering👇️ </p><ul><li><p class="paragraph" style="text-align:left;">Navigating Challenges with License Compliance</p></li><li><p class="paragraph" style="text-align:left;">Introduction to Common Open Source Licenses</p></li><li><p class="paragraph" style="text-align:left;">Understanding Licenses Faster using AI</p></li><li><p class="paragraph" style="text-align:left;">Incorporating License Compliance in your CI/CD Pipeline</p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">Disclaimer: I am not a lawyer and the information provided in this post is not intended as legal advice. It&#39;s always recommended to consult with a qualified legal professional for specific legal concerns related to open source licensing and other license compliance matters.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h2 class="heading" style="text-align:left;">🧭 Navigating Challenges with License Compliance</h2><p class="paragraph" style="text-align:left;">Tracking and maintaining an accurate log of all licenses used, along with providing proper attribution for each, stands as one of the most significant challenges in license compliance for engineering teams.</p><p class="paragraph" style="text-align:left;">A striking 58% of organizations still handle attribution notices manually, and only 26% have fully automated their license compliance policy implementation[2]. This manual approach to compliance is not only time-consuming but also prone to inaccuracies, especially given the complexities and risks associated with direct and transitive dependencies in open source software[2]. Consequently, there&#39;s a pressing need for more automated and efficient processes to manage the increasing adoption and intricacies of open source licenses.</p><p class="paragraph" style="text-align:left;">Further compounding the issue is the dynamic nature of software development projects. Open source components are frequently updated, and each update can bring new licensing terms or dependencies, creating a moving target for compliance teams. This fluid environment makes it challenging to ensure continuous compliance, as teams must constantly monitor and adjust their usage to align with the changing licensing terms. The manual processes traditionally used for this task are becoming increasingly unsustainable, highlighting the critical need for more advanced, automated solutions that can adapt to the rapid pace of open source software development and its associated licensing complexities.</p><p class="paragraph" style="text-align:left;">I personally encountered these licensing challenges first hand, as the VP of Software Development at a prominent Telehealth startup. Our legal team delineated the licenses we could use, those we couldn&#39;t, and the ones requiring their approval. To ensure adherence, we conducted an annual third-party audit for compliance. However, while these audits are valuable, they&#39;re not sufficient. Developers need ongoing feedback on whether the components they use align with the licensing guidelines established by their organization. In the fourth section of this post, we&#39;ll explore setting up a GitHub action that helps facilitate this type continuous compliance monitoring process.</p><h2 class="heading" style="text-align:left;">📚️ <b>Introduction to Common Open Source Licenses</b></h2><p class="paragraph" style="text-align:start;">In the world of software development, understanding open source licenses is crucial. These licenses dictate how software can be used, modified, and distributed. Each license has its own set of rules and requirements, affecting everything from redistribution to attribution. Knowing these details helps developers make informed decisions and remain compliant. Below, we delve into some of the most common open source licenses, highlighting key aspects that developers should be aware of 👇️ </p><h4 class="heading" style="text-align:start;">1. MIT License</h4><ul><li><p class="paragraph" style="text-align:left;"><b>Redistribution</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Modification</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Attribution</b>: Required</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes</b>: One of the most permissive and widely used licenses. It allows for great freedom in usage and modification but requires attribution in derivative works.</p></li><li><p class="paragraph" style="text-align:left;">More information about the MIT License can be found <a class="link" href="https://opensource.org/license/mit/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">here</a></p></li></ul><h4 class="heading" style="text-align:start;">2. GNU General Public License (GPL)</h4><ul><li><p class="paragraph" style="text-align:left;"><b>Redistribution</b>: Allowed, but must remain under the GPL</p></li><li><p class="paragraph" style="text-align:left;"><b>Modification</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Attribution</b>: Required</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes</b>: Ensures that derivative works are also open source (copyleft). Requires that the source code be made available when distributing the software.</p></li><li><p class="paragraph" style="text-align:left;">More information about the GPT License can be found <a class="link" href="https://choosealicense.com/licenses/gpl-3.0/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">here</a></p></li></ul><h4 class="heading" style="text-align:start;">3. Apache License 2.0</h4><ul><li><p class="paragraph" style="text-align:left;"><b>Redistribution</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Modification</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Attribution</b>: Required</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes</b>: Provides an explicit grant of patent rights from contributors to users. Requires preservation of copyright and license notices.</p></li><li><p class="paragraph" style="text-align:left;">More information about the Apache License can be found <a class="link" href="https://choosealicense.com/licenses/apache-2.0/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">here</a></p></li></ul><h4 class="heading" style="text-align:start;">4. BSD License</h4><ul><li><p class="paragraph" style="text-align:left;"><b>Redistribution</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Modification</b>: Allowed</p></li><li><p class="paragraph" style="text-align:left;"><b>Attribution</b>: Required, with variations depending on the specific BSD license (2-clause, 3-clause)</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes</b>: Similar to the MIT License but includes clauses regarding the use of the name of the project or its contributors.</p></li><li><p class="paragraph" style="text-align:left;">More information about the BSD License can be found <a class="link" href="https://opensource.org/license/bsd-3-clause/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">here</a></p></li></ul><h4 class="heading" style="text-align:start;">5. Creative Commons Licenses</h4><ul><li><p class="paragraph" style="text-align:left;"><b>Redistribution</b>: Varies by license</p></li><li><p class="paragraph" style="text-align:left;"><b>Modification</b>: Varies by license</p></li><li><p class="paragraph" style="text-align:left;"><b>Attribution</b>: Generally required</p></li><li><p class="paragraph" style="text-align:left;"><b>Notes</b>: More commonly used for creative works. The specifics of what is allowed (commercial use, modifications, etc.) vary depending on the specific Creative Commons license.</p></li><li><p class="paragraph" style="text-align:left;">More information about Creative Commons Licenses can be found <a class="link" href="https://creativecommons.org/share-your-work/cclicenses/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">here</a></p></li></ul><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">Remember, this is a basic overview. You should always consult the full text of a license or seek legal advice for detailed understanding and compliance.</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h2 class="heading" style="text-align:left;">Understand Licenses Faster using AI</h2><p class="paragraph" style="text-align:left;">Navigating the intricate landscape of software licenses on your own can be a daunting task, given their complexity and the nuanced legal language involved. Fortunately, advancements in AI offer a promising solution. Leveraging the cutting-edge capabilities of OpenAI&#39;s <a class="link" href="https://openai.com/blog/introducing-gpts?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">new GPTs</a>, I&#39;ve built a custom GPT designed to demystify software licenses called ‘License Guide’. License Guide is currently released publicly for free on ChatGPT 👇️ </p><div class="embed"><a class="embed__url" href="https://chat.openai.com/g/g-08p96iac2-license-guide?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank"><div class="embed__content"><p class="embed__title"> ChatGPT - License Guide </p><p class="embed__description"> Expert in open source software licenses, educating developers on compliance best practices. (Not Legal Advice) </p><p class="embed__link"> chat.openai.com/g/g-08p96iac2-license-guide </p></div><img class="embed__image embed__image--right" src="https://files.oaiusercontent.com/file-RffdBzfugu35YdHJJmx0Of25?se=2123-10-18T19%3A13%3A49Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D31536000%2C%20immutable&rscd=attachment%3B%20filename%3De47b095b-46f8-4869-b15d-d42c33769dab.png&sig=7LJTrycxgStzmSdBKrOrFC7VzOhmBys71QMjpbnf3XQ%3D"/></a></div><p class="paragraph" style="text-align:left;">Let’s walk through how License Guide can help you understand software licenses better. </p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">Disclaimer: None of the responses from License Guide constitute Legal Advice. For Legal Advice it is recommended to consult with an attorney or legal professional</p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h3 class="heading" style="text-align:left;">Learn About The Implications Of A Library’s License</h3><p class="paragraph" style="text-align:left;">When License Guide is asked about a specific library’s license. It does an extensive search and analysis on the library and the license. In the example below I ask License Guide “Am I allowed to distribute my React code given their current license?”. License Guide responds to this question by:</p><ul><li><p class="paragraph" style="text-align:left;">Searching the web for React’s current license</p></li><li><p class="paragraph" style="text-align:left;">Providing an analysis of the license and its impact on distributing React code</p></li><li><p class="paragraph" style="text-align:left;">Citing sources of React’s license and articles about React’s license changes so you can further review them on your own or with your legal counsel</p></li></ul><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d920d493-a150-4732-9f42-3e420c879c9e/Screenshot_from_2023-11-11_14-54-41.png"/><div class="image__source"><span class="image__source_text"><p>License Guide’s response to a question about React’s license</p></span></div></div><h3 class="heading" style="text-align:left;">Answer Specific Questions about a License</h3><p class="paragraph" style="text-align:left;">License Guide can also answer specific questions about a License. In the example below we ask it “Can I use GPL-licensed code in a commercial product?”</p><p class="paragraph" style="text-align:left;">License Guide then analyzes the GPL License and lets us know the points it recommends we should consider if we are going to use GPL licensed code in a commercial product. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8570b365-6b22-439f-a932-15bf93435371/Screenshot_from_2023-11-11_15-00-04.png"/><div class="image__source"><span class="image__source_text"><p>License Guide’s response to a specific question about GPL</p></span></div></div><h3 class="heading" style="text-align:left;">General Information about a License</h3><p class="paragraph" style="text-align:left;">License Guide can also provide general information about a license so you can learn the generalized implications of a license. In the example below License Guide responds to “What does the MIT license allow me to do?“</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/06651002-288a-4fc4-8f0a-b7b0964d7ce3/Screenshot_from_2023-11-11_15-05-27.png"/></div><p class="paragraph" style="text-align:left;">I hope you enjoy using and find value in the License Guide tool! It has certainly been helpful for me recently. </p><h2 class="heading" style="text-align:left;">Incorporating License Compliance in your CI/CD Pipeline</h2><p class="paragraph" style="text-align:left;">Integrating license checks into your CI/CD pipeline is a great way to simplify compliance for developers. In the fast-paced world of software development, where hundreds if not thousands of dependencies and rapid deployment cycles are the norms, keeping track of license compliance manually is not just impractical, it&#39;s a potential legal minefield. Automating this process within your CI/CD pipeline means every commit and build is scanned for license adherence, mitigating legal risks and ensuring your codebase stays compliant. This kind of automation aligns perfectly with the ethos of agile and efficient software development.</p><p class="paragraph" style="text-align:left;">To put this into practice, let’s walk through how to utilize the <a class="link" href="https://github.com/marketplace/actions/license-compliance?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">&#39;License Compliance&#39;</a> GitHub Action in your GitHub Actions Pipeline 👇️ </p><p class="paragraph" style="text-align:left;">For this tutorial we are going to add the license-compliance action to a project I forked for a recent conference presentation (<a class="link" href="https://github.com/jtrugman/voxel51-presentation?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">https://github.com/jtrugman/voxel51-presentation</a>).</p><h4 class="heading" style="text-align:left;">Basic Configuration</h4><p class="paragraph" style="text-align:left;">To get started with the license-compliance action, add a new GitHub Actions file to your <code>.github/workflows</code> directory. The YAML below will set up the action with the default ‘allow-list‘ for license compliance configuration 👇️ </p><div class="codeblock"><pre><code>on: [pull_request]

jobs:
  CheckLicense:
    runs-on: ubuntu-latest
    steps:
      - name: License compliance check
        uses: mikaelvesavuori/license-compliance-action@v1.0.2</code></pre></div><p class="paragraph" style="text-align:left;">Here is what it does: </p><p class="paragraph" style="text-align:left;"><code>on: [pull_request]</code> tells GitHub to run this action as a part of you pull request workflow</p><p class="paragraph" style="text-align:left;"><code>jobs: CheckLicense:</code> creates a new GitHub Action Job for us to run the license check</p><p class="paragraph" style="text-align:left;"><code>runs-on: ubuntu-latest</code> tells GitHub to execute our job with runners that have the latest version of Ubuntu </p><p class="paragraph" style="text-align:left;"><code>steps: - name: License compliance check uses: mikaelvesavuori/license-compliance-action@v1.0.2</code> tells GitHub that the steps for the job is to run the license-compliance action and which version of the license-compliance action to use</p><p class="paragraph" style="text-align:left;">The default ‘allow-list’ contains a very generous set of allowed licenses that is more than what most legal teams would allow in my experience. </p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">In order for you to configure the license-compliance action to track to your specific compliance standards we need to further configure the action. </p><h4 class="heading" style="text-align:left;">Advanced Configuration</h4><p class="paragraph" style="text-align:left;">In order for us to configure the license-compliance action to only use our specific license we need to add the following</p><p class="paragraph" style="text-align:left;"><code>with: allow_licenses:</code> this will tell the action to only allow licenses on the allow list. It accepts a string containing the licenses you want to allow. </p><p class="paragraph" style="text-align:left;">The example below is very extreme, but nicely demonstrates how to configure the action to only allow specific licenses (in this instance only MIT and Apache 2.0).</p><div class="codeblock"><pre><code>on: [pull_request]

jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - name: License compliance check
        uses: mikaelvesavuori/license-compliance-action@v1.0.2
        with:
          allow_licenses: &quot;MIT;Apache-2.0&quot;</code></pre></div><p class="paragraph" style="text-align:left;">Here is the output that shows the action checks for licenses and validates that our dependencies are only licensed with MIT and Apache 2.0.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3f98295d-67fd-4ee8-aaef-62141bdf6db3/Screenshot_from_2023-11-12_12-49-42.png"/><div class="image__source"><span class="image__source_text"><p>Output from running license-compliance action on the <a class="link" href="https://github.com/jtrugman/voxel51-presentation/pull/2?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">demo repo</a></p></span></div></div><p class="paragraph" style="text-align:left;">I hope you enjoyed this Bug Driven Development deep dive about license compliance! If you are interested in reading more about software licenses or more Bug Driven Development deep dives be sure to check out the links below. </p><p class="paragraph" style="text-align:left;">Cheers,</p><p class="paragraph" style="text-align:left;">Justin</p><p class="paragraph" style="text-align:left;">Follow Justin on Twitter <a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow"><span style="text-decoration:underline;"><i>here</i></span></a></p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Additional Sources:</p><ol start="1"><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://blog.opensource.org/2023-state-of-open-source-report-key-findings-and-analysis/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">2023 State of Open Source Report - Voices of Open Source</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://fossa.com/blog/2023-open-source-management-trends-predictions-observations/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">2023 Open Source Management Trends, Predictions, and Observations - FOSSA</a></p></li></ol><p class="paragraph" style="text-align:left;">More Bug Driven Development Posts You May Enjoy:</p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bugdrivendevelopment.com/p/shift-left-security?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">A Practical Developer&#39;s Guide to Shift Left Security</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bugdrivendevelopment.com/p/mastering-autonomy-path-to-senior-engineer?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">Mastering Autonomy: The Path to Becoming a Senior Engineer</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bugdrivendevelopment.com/p/state-of-software-development-in-late-2023?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=decoding-software-licenses-an-introduction-for-developers" target="_blank" rel="noopener noreferrer nofollow">Analyzing the State of Software Development in late 2023: Where We Stand and Where We&#39;re Going</a></p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;"></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=8803f5ac-4236-41bd-b213-1d7c1f784dd5&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>A Practical Developer&#39;s Guide to Shift Left Security</title>
  <description>Secure Your Stack: How to Integrate Security into Your Developer Workflow</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f09b94ff-4f35-43a7-8697-4cd9ea7650c0/bank-locksmith.png" length="554506" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/shift-left-security</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/shift-left-security</guid>
  <pubDate>Mon, 30 Oct 2023 10:27:00 +0000</pubDate>
  <atom:published>2023-10-30T10:27:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">While security has long been touted as a priority for organizations, the reality on the ground paints a different picture. According to a recent GitLab Developer Survey, a staggering 41% of engineers find it difficult to prioritize fixing security vulnerabilities [1]. Why? As one Site Reliability Engineer succinctly puts it👇️ </p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">The statistics back this sentiment—while 56% of organizations claim to implement security-centric methodology of DevSecOps, less than a quarter actually implement its crucial components [1]. This lack of comprehensive security practices isn&#39;t just concerning; it&#39;s a ticking time bomb for software vulnerabilities.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/d95520cc-486a-49a2-9a18-e4b151d6baa7/Screenshot_from_2023-10-22_12-44-15.png"/><div class="image__source"><span class="image__source_text"><p>Status of Implementing Key DevSecOps Components in 2023 [1]</p></span></div></div><p class="paragraph" style="text-align:left;">Enter Shift Left Security—the practice that aims to integrate security seamlessly into the software development process, right from the get-go.</p><p class="paragraph" style="text-align:left;">In this Bug Driven Development guide, we&#39;ll dissect the key elements of DevSecOps and Shift Left Security. We&#39;ll offer actionable insights on how developers can implement these practices based on the size and demands of their engineering teams. </p><p class="paragraph" style="text-align:left;">We’ve got a lot to cover, but before we do, just wanted to say a big thanks to everyone who helped with this guide. In addition to several industry guiding surveys and my own personal experience having led a ~50 engineer organization in the telehealth space, I was fortunate enough to bounce ideas around several engineers and engineering leaders to put together the recommendations in this guide. So let’s dive in 👇️ </p><h2 class="heading" style="text-align:left;">🔺The Security Testing Pyramid</h2><p class="paragraph" style="text-align:left;">Many of you may be familiar with the popular software testing metaphor, the Testing Pyramid, popularized by <a class="link" href="https://www.mountaingoatsoftware.com/blog/the-forgotten-layer-of-the-test-automation-pyramid?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Mike Cohn from Mountain Goat Software</a> and <a class="link" href="https://martinfowler.com/articles/practical-test-pyramid.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Ham Vocke’s post in Martin Fowler’s blog</a>. The Security Testing Pyramid is an adaptation of the original concept, introduced by <a class="link" href="https://www.youtube.com/watch?v=0_H5Sg1Tb7g&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Andreas Falk at the 2022 Global AppSec Conference</a> in the EU hosted by the OWASP Foundation. While Andreas’ Security Test Pyramid is a great start, I think it misses some areas like Secret & Credential Detection. In the chart below, the items in <b>black</b> text are from Andreas’ original Security Test Pyramid and the items in <span style="color:#2C81E5;"><b>blue</b></span> are ones I added. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/fe20e254-c895-48f2-b800-208cc38dd0c5/Security_Testing.png"/><div class="image__source"><span class="image__source_text"><p>Modified Security Test Pyramid [2]</p></span></div></div><p class="paragraph" style="text-align:left;">The Security Test Pyramid has three layers:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Security Unit & Component Tests + Static Application Security Testing (SAST)</p></li><li><p class="paragraph" style="text-align:left;">API / Service Security Tests</p></li><li><p class="paragraph" style="text-align:left;">Dynamic Application Security Tests (DAST)</p></li></ol><h3 class="heading" style="text-align:left;">🏗️ Foundational Layer: Security Unit & Component Tests + Static Application Security Testing (SAST)</h3><p class="paragraph" style="text-align:left;">The foundational layer primarily comprises tests that can be integrated into a Continuous Integration (CI) pipeline.</p><p class="paragraph" style="text-align:left;">These tests focus on:</p><ul><li><p class="paragraph" style="text-align:left;">Identifying code vulnerabilities potentially exploitable by attackers</p></li><li><p class="paragraph" style="text-align:left;">Scanning for vulnerable dependencies (like if your code consumes an open source library that contains a vulnerability)</p></li><li><p class="paragraph" style="text-align:left;">Scanning for vulnerable dependencies (like if you store an API Key in your code instead of consuming it as an environment variable)</p></li></ul><h3 class="heading" style="text-align:left;">🥪 Middle Layer: API / Service Security Tests</h3><p class="paragraph" style="text-align:left;">This layer zeroes in on service-level tests, including:</p><ul><li><p class="paragraph" style="text-align:left;">Authentication & Authorization Paths</p></li><li><p class="paragraph" style="text-align:left;">Injections (like a <a class="link" href="https://www.w3schools.com/sql/sql_injection.asp?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">SQL Injection</a>)</p></li><li><p class="paragraph" style="text-align:left;">File uploads vulnerabilities (like if a user can upload an executable file when your application is supposed to just store PDFs)</p></li></ul><h3 class="heading" style="text-align:left;">🪂 Top Layer: Dynamic Application Security Tests (DAST)</h3><p class="paragraph" style="text-align:left;">This layer operates in a deployed environment, focusing on vulnerabilities that can only be detected in a running application.</p><p class="paragraph" style="text-align:left;">DAST tests aim to identify:</p><ul><li><p class="paragraph" style="text-align:left;">Real-world attack vectors like Cross-Site Scripting (XSS) </p></li><li><p class="paragraph" style="text-align:left;">Vulnerabilities in third-party services and APIs</p></li><li><p class="paragraph" style="text-align:left;">Logical flaws that might escape static tests</p></li></ul><h2 class="heading" style="text-align:left;">⬅️ Practical Strategies for Shifting Security Left</h2><p class="paragraph" style="text-align:left;">Alright, let&#39;s get into the meat of the matter—how do you shift security left within your development process?</p><h3 class="heading" style="text-align:left;">🏢 Foundation Layer</h3><p class="paragraph" style="text-align:left;">The cornerstone of the foundational layer in the Shift Left security model is running security checks continuously as part of the code check-in process. Ideally, this means that every time a developer pushes a commit, these checks are executed within the Continuous Integration (CI) pipeline.</p><p class="paragraph" style="text-align:left;">While there are a variety of security tests that can be ran in your foundational layer of your security testing pyramid, I think the following three are the most practical in balancing the level security testing coverage while minimizing adding hurdles to your development process.</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Code Security Scanning</p></li><li><p class="paragraph" style="text-align:left;">Dependency Security Scanning</p></li><li><p class="paragraph" style="text-align:left;">Secret / Credential Scanning</p></li></ol><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><h4 class="heading" style="text-align:left;"> Code Security Scanning</h4><p class="paragraph" style="text-align:left;">When we talk about code security scanning in this context, we are specifically focusing on automated scans that are integrated into your Continuous Integration (CI) pipeline—not the traditional, manual scans that require sending off your source code to auditors for one-off analyses, such as <a class="link" href="https://www.synopsys.com/software-integrity/solutions/mergers-and-acquisitions.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Synopsis Black Duck audits</a>. Those traditional methods are labor-intensive and not seamlessly incorporated into your workflow. I&#39;ve been through a few of those, and trust me they&#39;re far from enjoyable 🤮.</p><p class="paragraph" style="text-align:left;">In contrast, the code security scanning we advocate for is tightly integrated into your development process through a CI job that scans your code for vulnerabilities upon each commit. Not to point favorites in terms of tool selection (this is more for a reference so you know what is out there) you should be looking for something like a <a class="link" href="https://docs.github.com/en/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">GitHub Code Scanning </a>or a <a class="link" href="https://snyk.io/product/snyk-code/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Snyk</a> type of tool. This approach not only saves time but also fosters a culture of continuous security awareness among developers.</p><h4 class="heading" style="text-align:left;">📦️ Dependency Security Scanning</h4><p class="paragraph" style="text-align:left;">I&#39;ve seen two effective approaches to dependency scanning, and I recommend employing both. The first identifies new dependencies as you commit code and checks for known security issues within those dependencies. This is done as a job in your CI pipeline which reviews the newly added dependencies in your commit and flags them appropriately. </p><p class="paragraph" style="text-align:left;">The second continuously monitors your existing dependencies and alerts you about vulnerabilities in the versions you&#39;re using. This helps you ensure your existing dependencies are always on a secure version and are doing frequent updates to dependencies. Both methods are equally useful and I recommend using them concurrently. </p><p class="paragraph" style="text-align:left;">By the way, this is commonly known as a part of software composition analysis, which is typically abbreviated as SCA.</p><div class="blockquote"><blockquote class="blockquote__quote"><p class="paragraph" style="text-align:left;">While we are on the topic of dependency CI jobs, it is always good to have a CI job which checks to license compliance for any new dependencies added with your legal teams license compliance guidance. This is a whole topic on its own which we will cover in a future Bug Driven Development deep dive. </p><figcaption class="blockquote__byline"></figcaption></blockquote></div><h4 class="heading" style="text-align:left;">🕵️‍♂️ Secret / Credential Scanning</h4><p class="paragraph" style="text-align:left;">Sensitive authentication data, like API keys and passwords, should ideally be stored as secrets. Sure, there are some exceptions but even <a class="link" href="https://firebase.google.com/docs/projects/api-keys?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Google now recommends storing Firebase API keys as secrets</a> (nice try Firebase devs 👀). </p><p class="paragraph" style="text-align:left;">Secret scanning jobs in your CI pipeline scan your code for strings that look like these sensitive types of credentials. Typically there are three ways to resolve a scanned secret, the first is to remove the secret from your code and wipe the commit which contains the secret from your git history, the second is to flag it as a false positive when it finds something that looks like credentials, but is not, and the third is to confirm it&#39;s a credential that&#39;s safe to store in code by dismissing the scanned secret.</p><h3 class="heading" style="text-align:left;">🛡️ Service Security Testing Layer</h3><p class="paragraph" style="text-align:left;">The Service Security Testing Layer is geared towards ensuring robust defenses at the service level. It is pivotal to focus on this layer, as APIs and services often act as the gateways to your application&#39;s core logic and data.</p><h4 class="heading" style="text-align:left;">🔐 Authentication & Authorization Paths</h4><p class="paragraph" style="text-align:left;">When considering security at the service level, a critical area of focus is the integrity of your authentication and authorization paths. This involves not only basic username/password combinations but also more advanced schemes like OAuth and JWT (JSON Web Tokens).</p><p class="paragraph" style="text-align:left;">Integrating <a class="link" href="https://github.com/navikt/mock-oauth2-server?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">OAuth</a> or JWT testing into a CI pipeline might sound unconventional, but it&#39;s actually a strong practice. Utilize mock services that emulate your actual OAuth or JWT token generation and validation. These mock services, coupled with test scripts simulating various authentication scenarios, seamlessly fit into your CI/CD pipeline.</p><p class="paragraph" style="text-align:start;">By incorporating these tests, you&#39;re achieving two key outcomes: ensuring the robustness of your authentication and authorization mechanisms and halting the merging of code that introduces potential vulnerabilities.</p><h4 class="heading" style="text-align:left;">💉 Injections</h4><p class="paragraph" style="text-align:left;">Injections remain a notorious risk in API and service layers. They most commonly occur when inputs aren&#39;t properly sanitized or validated, allowing attackers to inject malicious code. At the service testing layer, you can implement static analysis tools that scan your application&#39;s code to detect vulnerabilities related to SQL injections. These tools can be seamlessly integrated into your CI pipeline, right alongside your existing unit and integration tests.</p><h4 class="heading" style="text-align:left;">📁 File Upload Vulnerabilities</h4><p class="paragraph" style="text-align:left;">When it comes to file uploads, this layer ensures that only the intended file types (e.g., PDFs, JPEGs, etc) are uploaded and executed. Tests should verify that the application restricts file types to prevent the system from security threats like a user uploading an executable. </p><p class="paragraph" style="text-align:left;">These types of tests should also be executed in your automation pipelines continuously. </p><h3 class="heading" style="text-align:left;">🔭 Dynamic Application Security Testing (DAST)</h3><p class="paragraph" style="text-align:left;">Dynamic Application Security Testing (DAST) serves as your real-world security scout, focusing on vulnerabilities that only manifest in a running application. By integrating DAST into your CI/CD pipeline, these tests operate in a staging environment that mirrors your production setup, triggered automatically by changes to the codebase or infrastructure.</p><h4 class="heading" style="text-align:left;">🔍 Real-world Attack Vectors</h4><p class="paragraph" style="text-align:left;">One of the core strengths of DAST is its ability to uncover real-world attack vectors, such as Cross-Site Scripting (XSS). Unlike SAST, DAST tests your application from an external perspective, simulating how an attacker might exploit vulnerabilities. You&#39;ll want to use automated scanning tools specifically designed for dynamic testing to identify these types of issues. These scans can be scheduled to run at regular intervals or triggered by specific events like major code merges.</p><h4 class="heading" style="text-align:left;">🧠 Logical Flaws</h4><p class="paragraph" style="text-align:left;">Logical flaws, or vulnerabilities that stem from the application&#39;s business logic, are often hard to catch with static tests. DAST can help identify these by simulating various user roles and performing sequences of actions that may expose flaws in the application&#39;s logic.</p><h4 class="heading" style="text-align:left;">🛠️ Integrating DAST into CI/CD</h4><p class="paragraph" style="text-align:left;">Incorporating DAST into your CI/CD pipeline typically involves running these tests in a staging environment after the application has been built but before it is deployed to production. While DAST tests can be more time-consuming than their static counterparts, the additional runtime context they provide is invaluable. To make the most of your CI/CD pipeline&#39;s efficiency, you might schedule DAST scans to run at other low-activity times or when a PR is close to being merged.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Thanks for diving into this Bug Driven Development post with us! We&#39;re mixing it up a bit by switching to two deep-dive articles a month instead of our usual weekly quick takes. If you are interested in finding out more about how to incorporate security into your developer workflow check out my session at last year’s GitHub Universe 👇️ </p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="true" class="youtube_embed" frameborder="0" height="100%" src="https://youtube.com/embed/NyXcsy9QbQg" width="100%"></iframe><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Cheers,</p><p class="paragraph" style="text-align:left;">Justin</p><p class="paragraph" style="text-align:left;">Follow Justin on Twitter <a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">here</a></p><p class="paragraph" style="text-align:left;"></p><h2 class="heading" style="text-align:left;">Additional Sources</h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://about.gitlab.com/developer-survey/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">2023 GitLab Global DevSecOps Report Security Without Sacrifices</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.youtube.com/watch?v=0_H5Sg1Tb7g&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=a-practical-developer-s-guide-to-shift-left-security" target="_blank" rel="noopener noreferrer nofollow">Shift Left Security with the Security Test Pyramid - Andreas Falk</a></p><p class="paragraph" style="text-align:left;"></p></li></ol></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=cb4d0fe4-8b43-403e-b5e4-f9d954c52e1d&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Analyzing the State of Software Development in late 2023: Where We Stand and Where We&#39;re Going</title>
  <description>Deep dive with us into the state of software development in late 2023</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/94d348fa-41d8-4e89-8396-7e79a32648c8/jtrugman_a_software_developer_writing_code_a_cartoon_in_ricky_a_e5ef2489-73c4-4965-b118-883b6195c69b.png" length="365648" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/state-of-software-development-in-late-2023</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/state-of-software-development-in-late-2023</guid>
  <pubDate>Sun, 15 Oct 2023 18:51:32 +0000</pubDate>
  <atom:published>2023-10-15T18:51:32Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">In this issue, we are taking a deep dive into the state of software development as it stands in late 2023. Specifically, we will examine:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">The evolving landscape of cloud platforms, rise of Hetzner and decline of Heroku</p></li><li><p class="paragraph" style="text-align:left;">Current trends in frontend frameworks and languages</p></li><li><p class="paragraph" style="text-align:left;">The state of automated testing and its importance in developer productivity & retaining developers</p></li><li><p class="paragraph" style="text-align:left;">Emphasis on security and incorporating it into the developer workflow</p></li><li><p class="paragraph" style="text-align:left;">The evolution of the day-to-day developer experience in 2023</p></li><li><p class="paragraph" style="text-align:left;">The pathways to becoming a developer in 2023</p></li></ol><p class="paragraph" style="text-align:left;">I gathered insights from several industry guiding surveys such as Stack Overflow’s Annual Developer Survey, GitLab’s Annual DevSecOps Survey, and GitHub’s Innovation Graph, as well as from discussions with engineers and engineering managers in a variety of industries to confirm our findings – big thanks to everyone who helped. We&#39;ve got a lot to cover, so let&#39;s dive in.</p><h2 class="heading" style="text-align:left;">☁️ The Cloud</h2><p class="paragraph" style="text-align:left;">This year there have been some interesting developments with the cloud. AWS is still the leader amongst the big 3 cloud players with Google losing usage and Microsoft slightly gaining. Hetzner has reinvented itself, a move that has not gone unnoticed by developers. Heroku is declining sharply after the Salesforce acquisition and the removal of their free tier. What’s especially interesting is that an increasing number of organizations are making the move back to on-premises data centers from the cloud.</p><h3 class="heading" style="text-align:left;">🥇🥈🥉The Big 3 Cloud Players</h3><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8be53887-d6c9-49ca-a8f6-aa05c32a3028/3.png"/><div class="image__source"><span class="image__source_text"><p>Year-over-Year Cloud Platform Usage Change: 2022 vs 2023[1]</p></span></div></div><p class="paragraph" style="text-align:left;">According to StackOverflow’s 2023 Developer survey, out of professional developers utilizing the big 3 cloud providers (Amazon, Microsoft, Google) there has been little shift in usage. AWS has seen a slight increase by 2.5%, and Google has seen a slight decrease by 2.8%. Azure stayed relatively flat with a 0.2% increase [1].</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7aa9d63c-de13-4e3f-bf7e-456f19ad13d3/1.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developer Usage in 2023 of the Big 3 Cloud Providers[1]</p></span></div></div><p class="paragraph" style="text-align:left;">AWS remains the leading cloud provider used by professional developers, but not without stiff competition. Azure&#39;s focus on enterprise solutions and both Azure & GCP&#39;s heavy investment in AI services make them strong contenders, closing in on AWS&#39;s lead. Despite AWS&#39;s expansive service offerings and strong infrastructure, the other giants are not far behind. In fact, the competition has sparked innovation across the board, leading to improved services and tools for us developers. Among my favorite innovations are significant advancements in developer-centric security tools, like <a class="link" href="https://aws.amazon.com/about-aws/whats-new/2023/06/amazon-codeguru-security-available-preview/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Amazon’s CodeGuru Security</a> which launched this June, Microsoft bolstering <a class="link" href="https://github.blog/2023-05-23-announcing-the-public-preview-of-github-advanced-security-for-azure-devops/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">GitHub Advanced Security</a>, and <a class="link" href="https://security.googleblog.com/2022/12/announcing-osv-scanner-vulnerability.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Google’s OSV Scanner</a> that launched in late 2022 (more on developer security tools later). </p><p class="paragraph" style="text-align:left;">As we look ahead to 2024, we anticipate that the competition among cloud providers will only intensify. This fierce rivalry will hopefully continue to fuel innovation, resulting in more frameworks, tools, and infrastructure to help make us more productive. </p><h3 class="heading" style="text-align:left;">🧗‍♂️The Rise of Hetzner</h3><p class="paragraph" style="text-align:left;">One of the standout trends in our analysis is the rise of the cloud platform Hetzner. While Hetzner’s adoption by professional developers was not included in Stack Overflow’s 2022 developer report, this year it is reported to be used by 4.44% of professional developers [1,2]. Even more telling is that Hetzner is the most admired cloud provider, with 70.09% of its users expressing a desire to continue using it—compared to AWS&#39;s 62.24% [1]. Personally, I jumped on the Hetzner bandwagon this year and couldn&#39;t be happier. The UI is simple to navigate, yet comprehensive, and paired with an open source PAAS like <a class="link" href="https://caprover.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">CapRover</a>, deployments seamlessly integrate with your development workflow. </p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><h3 class="heading" style="text-align:left;">📉 Heroku on The Decline</h3><p class="paragraph" style="text-align:left;">Another significant shift in the cloud landscape is the steep decline of Heroku. Although Salesforce&#39;s acquisition of Heroku may be deemed successful by some from a business perspective, the platform has seen a sharp drop in usage and developer satisfaction.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/70b8a0f2-b93c-4c0d-ad33-ddfd2d98b19b/2023_Cloud_Market_Share.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developer usage of Heroku [1,2,4]</p></span></div></div><p class="paragraph" style="text-align:left;">The elimination of <a class="link" href="https://blog.heroku.com/next-chapter?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Heroku’s free tier</a> last year might have been the final nail in the coffin, as only 21.97% of Heroku users plan on continuing to use the platform [1]. We anticipate this downward trend will continue unless substantial changes are made to regain user trust.</p><h3 class="heading" style="text-align:left;">🏢 The Return to On-Prem and Traditional Architectures</h3><p class="paragraph" style="text-align:left;">We&#39;re also seeing a resurgence of companies turning away from cloud services in favor of more traditional on-premises or virtual machine setups. Several key events have catalyzed this shift. For instance, Amazon revealed that they slashed <a class="link" href="https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Amazon Prime Video&#39;s video monitoring cloud costs by 90%</a> by transitioning from serverless functions to virtual machines. Additionally, David Heinemeier Hansson&#39;s (Creator of Ruby on Rails) company, 37 Signals, <a class="link" href="https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">announced a complete migration from cloud services</a> to on-premises data centers. They even <a class="link" href="https://world.hey.com/dhh/kamal-1-0-5304ff9e?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">released Kamal</a> (formerly known as MRSK) to streamline the management of on-prem servers. This trend suggests a thoughtful reconsideration of the &#39;cloud-first&#39; mantra that has dominated the industry.</p><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><h2 class="heading" style="text-align:left;">🖥️ Frontend</h2><h3 class="heading" style="text-align:left;">🏳️ The Javascript Framework battle</h3><p class="paragraph" style="text-align:left;">The competition among JavaScript frameworks remains as fierce as ever, with no clear indication of any of them waiving the white flag soon, especially in their collective bid to dethrone React.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3bb194fc-541a-49fb-99be-680adf51d24e/FE_Frameworks.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developer usage of FE Frameworks [1,2,4]</p></span></div></div><p class="paragraph" style="text-align:left;">A couple of pivotal shifts to spotlight:</p><ul><li><p class="paragraph" style="text-align:left;">Angular experienced a dip in popularity between 2021 & 2022 but seems to be regaining traction in 2023.</p></li><li><p class="paragraph" style="text-align:left;">Next.js is hot on the heels of Vue.js. Given its inherent performance advantages over conventional React and its foundation on React, we expect Next.js to continue gaining in popularity. It offers a familiar environment, making it a relatively lightweight transition for React developers compared to other FE Frameworks.</p></li></ul><h3 class="heading" style="text-align:left;">🧐 TypeScript&#39;s Moment: A Temporary Trend or Here to Stay?</h3><p class="paragraph" style="text-align:left;">As 2023 kicked off, notable figures in the developer world, like Kent C. Dodds, warmed up to TypeScript. Some accepted its benefits while others embraced it wholeheartedly.</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/kentcdodds/status/1624595023659667456?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Yet, the tide seemed to turn recently when David Heinemeier Hansson, the creator of Ruby on Rails, opted to remove TypeScript from his open-source project, Turbo 8.</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dhh/status/1699427078586716327?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">While following the Twitter (X) battles between developers is certainly entertaining. I believe this is more noise rather than a signal of the decline of TypeScript. </p><p class="paragraph" style="text-align:left;">However, the <a class="link" href="https://tc39.es/proposal-type-annotations/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">proposal to add type annotations directly into JavaScript</a> is certainly not noise. If you can add type annotations natively to JavaScript, it would make TypeScript nearly obsolete. I plan to be closely following this proposal as it works its way through the approval process. </p><h2 class="heading" style="text-align:left;">🧪 The State of Testing: Engineers Take the Helm</h2><p class="paragraph" style="text-align:left;">The trend of engineering teams owning the testing process, largely without the aid of a dedicated QA team, <a class="link" href="https://blog.pragmaticengineer.com/how-microsoft-does-qa/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">has not only taken hold but truly matured</a>. In this section, we&#39;ll delve into how engineers have adapted to this paradigm shift in their roles.</p><h3 class="heading" style="text-align:left;">🤖 Automated Testing Availability</h3><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/21ba2f91-8da6-4894-8591-a5dc9512ba65/auto-test-at-org.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developer Responses [1, 2]</p></span></div></div><p class="paragraph" style="text-align:left;">Recent Stack Overflow surveys have asked developers about the availability of automated testing in their organizations. Results show a strong availability of testing automation, but only a marginal 3% increase in availability year-over-year. The data prompts intriguing areas of interest for future investigations:</p><ul><li><p class="paragraph" style="text-align:left;">What does &#39;availability&#39; entail across different organizations?</p></li><li><p class="paragraph" style="text-align:left;">In organizations with automated testing, where in the<a class="link" href="https://martinfowler.com/articles/practical-test-pyramid.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow"> testing pyramid</a> has the most automation?</p></li><li><p class="paragraph" style="text-align:left;">What are the adoption rates and usage patterns for automated testing tools in organizations with the tools available?</p></li><li><p class="paragraph" style="text-align:left;">For organizations without automated testing, is this a planned initiative or simply not a priority?</p></li></ul><h3 class="heading" style="text-align:left;">⚠️ Is Testing Still A Bottleneck in the Dev Pipeline?</h3><p class="paragraph" style="text-align:left;">GitLab&#39;s 2023 survey posed an intriguing question: &#39;Where does your team or organization encounter the most delays in the development process?&#39; The survey found that 28% of respondents cited &#39;Testing,&#39; and another 26% cited &#39;Test Data Management,&#39; as the areas most likely to cause delays [3]. These statistics underscore the critical need for efficient testing strategies and perhaps warrant a deeper dive into best practices to mitigate these bottlenecks in future development cycles.</p><h3 class="heading" style="text-align:left;">🧠 AI and Software Testing</h3><p class="paragraph" style="text-align:left;">In the past year we have witnessed the emergence of various AI-based developer tools. Many developers have started using generic tools such as <a class="link" href="https://chat.openai.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">ChatGPT</a>, <a class="link" href="https://bard.google.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Bard</a>, and <a class="link" href="https://github.com/features/copilot?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">GitHub Co-Pilot</a>. In addition, there&#39;s been a surge of specialized AI tools for testing, including <a class="link" href="https://learn.microsoft.com/en-us/visualstudio/test/generate-unit-tests-for-your-code-with-intellitest?view=vs-2022&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Microsoft IntelliTest</a>, <a class="link" href="https://www.gocodeo.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Codeo</a>, and <a class="link" href="https://www.diffblue.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">DiffBlue</a>. These tools integrate seamlessly into your IDE and can generate tests for the specific code you highlight (imagine highlight-and-generate-tests instead of highlight-copy-paste).</p><p class="paragraph" style="text-align:left;">While these AI tools offer a convenient way to quickly add unit tests to your code, they aren’t a comprehensive solution for improving overall test coverage with quality, maintainable tests. That&#39;s why I created my own AI software testing platform <a class="link" href="https://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a>, a GitHub app that analyzes your test coverage when tests are ran in GitHub Actions. It identifies gaps in your existing test suite and recommends test cases to fill them. If this interests you, <a class="link" href="https://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> is currently free for both public and private GitHub repositories for the next month as we gather user feedback. Here is the <a class="link" href="https://github.com/marketplace/softwaretesting-ai-intelligent-code-coverage?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">link</a> if you&#39;d like to give it a try.</p><h3 class="heading" style="text-align:left;">👨‍💻 Testing and Developer Retention</h3><p class="paragraph" style="text-align:left;">An intriguing finding from a recent GitLab survey illuminates the relationship between software testing and both developer retention as well as deployment rates. According to the survey, teams that have implemented test automation are 1.2 times less likely to face challenges in hiring and retaining developers [3]. Additionally, these teams are 1.5 times more likely to deploy to production multiple times per day [3]. In essence, test automation not only streamlines the deployment process but also enhances developer morale by enabling frequent, smaller releases.</p><h2 class="heading" style="text-align:left;">🔒️ Security in the Development Cycle</h2><p class="paragraph" style="text-align:left;">While many organizations loudly proclaim their commitment to security, it often takes a backseat in actual practice with 41% of developers saying it is difficult to prioritize remediating security vulnerabilities [3]. The rise in notable security incidents serves as a stark reminder. From DDoS attacks on <a class="link" href="https://therecord.media/largest-ddos-incidents-amazon-cloudflare-google?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">tech giants like Amazon, Google, and Cloudflare</a> to unexpected targets like <a class="link" href="http://www.sec.gov/Archives/edgar/data/1001250/000114036123035105/brhc20056073_ex99-1.htm?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">cosmetics manufacturer Estée Lauder</a>, no company is immune. Even <a class="link" href="https://www.cnbc.com/2023/10/12/billboards-in-tel-aviv-briefly-hacked-to-display-pro-hamas-messages.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">billboards in Israel</a> have been hacked, illustrating that the threat landscape is far-reaching and indiscriminate. </p><p class="paragraph" style="text-align:left;">Not only is the performance of security practices at these companies far from the standard users expect, developers are generally frustrated with the security processes, procedures, and tools they are using with 43% of developers saying their biggest frustration with security testing is that it happens too late in the development lifecycle and causes delays [3]. </p><h3 class="heading" style="text-align:left;">📈 How to Improve an Organization&#39;s Security Posture While Increasing Developer Satisfaction?</h3><p class="paragraph" style="text-align:left;">This was a key question I grappled with during my tenure as VP of Software Development at a notable telehealth startup. Conveniently, GitHub launched their <a class="link" href="https://docs.github.com/en/get-started/learning-about-github/about-github-advanced-security?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">Advanced Security package</a> for GitHub Enterprise customers around the same time we began tackling this issue. The outcome was a resounding success, we were able to <a class="link" href="https://github.com/customer-stories/caregility?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">quickly fix many vulnerabilities </a>and tightly weave security into our development process. </p><p class="paragraph" style="text-align:left;">If you are interested in learning more about this topic, you can check out my session at GitHub Universe focusing on empowering developers to better own security. </p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="true" class="youtube_embed" frameborder="0" height="100%" src="https://youtube.com/embed/NyXcsy9QbQg" width="100%"></iframe><p class="paragraph" style="text-align:left;">You can also review how we utilized GitHub Advanced Security to <a class="link" href="https://github.com/readme/guides/github-advanced-security-caregility?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">prepare for our third party security audit</a>. I&#39;ll also be releasing a more in-depth guide diving into the specifics of launching and maintaining a successful developer-centric security initiative soon, so keep an eye out. </p><h2 class="heading" style="text-align:left;">🏖️ Life as a Developer in 2023</h2><p class="paragraph" style="text-align:left;">With the impact of Covid ushering many developers into remote work, the landscape has evolved to embrace more flexible models. Currently, 42.2% of developers are operating in a hybrid work environment [1]. It&#39;s clear that some form of remote work is here to stay, as evidenced by the mere 16.4% of developers working entirely in-person [1].</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f5493da1-1bfd-419a-8815-83f4cca6dc1a/Developer-working-env.png"/><div class="image__source"><span class="image__source_text"><p>Developer Working Environment [1]</p></span></div></div><p class="paragraph" style="text-align:left;">With the rise of remote and hybrid work models, there&#39;s been a notable shift toward more asynchronous forms of communication and team collaboration. Microsoft Teams and Slack lead the way in usage among professional developers [1]. This is unsurprising given their features, which not only combine chat and video conferencing but also offer extensive integrations with developer tools. It raises an intriguing question of how much these developer-centric integrations impact an organization&#39;s decision to adopt either Microsoft Teams or Slack specifically for their engineering teams.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9df796fd-9523-4999-af91-9cf0ce95d4d2/virtual_collaboration.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developers Thoughts on Virtual Communication Tools [1]</p></span></div></div><p class="paragraph" style="text-align:left;">Another essential component for enabling asynchronous work is project management software. Jira and Trello continue to dominate this space [1]. Atlassian, the company behind Jira, <a class="link" href="https://blog.trello.com/trello-atlassian?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">acquired Trello in 2017</a> and recently <a class="link" href="https://www.atlassian.com/blog/announcements/atlassian-acquires-loom?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">added Loom to their portfolio</a>. Given Atlassian&#39;s dominant position in the industry, it will be interesting to see how they continue to innovate to enhance working environments for developers.</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/6b645ce1-101c-4b02-af9a-56e465a7f4d0/Project-management_software.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developers Thoughts on Project Management Tools [1]</p></span></div></div><h2 class="heading" style="text-align:left;">🧩 The Fragmentation of Knowledge in Remote Teams</h2><p class="paragraph" style="text-align:left;">Remote work has forced teams adapt to having less face-to-face time than before, and as a result, knowledge silos have formed. Unlike in the office, you can&#39;t simply walk up to someone&#39;s desk for a quick question while working remotely. This issue appears to be worsening. In 2022, 20.88% of developers spent less than 15 minutes per day searching for answers or solutions [2]. Now, in 2023 that number had shrunk to just 9.04%, with more developers now spending between 30 and 120 minutes per day searching for answers compared to last year [1].</p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/c6873943-3d2d-41bb-9a60-e5769c1ca59a/Time-blocked.png"/><div class="image__source"><span class="image__source_text"><p>Developers Time Spent Searching for Answers [1,2]</p></span></div></div><h2 class="heading" style="text-align:left;">🗺️ Pathway to Becoming a Developer in 2023</h2><p class="paragraph" style="text-align:left;">Even with the current economic conditions we are experiencing in late 2023 and the wave of big tech layoffs we have seen earlier this year, the demand for developers is still strong. It is interesting to see how aspiring developers are learning to code and get into the field of software development. </p><div class="image"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/f1c7982c-38ef-460c-827c-60fc2e05baf6/devs_with_degrees.png"/><div class="image__source"><span class="image__source_text"><p>Professional Developers with Degrees vs Developers Learning to Code through School [1,2,4,5]</p></span></div></div><p class="paragraph" style="text-align:left;">Nearly 80% of professional software developers hold a degree, while just over half of aspiring developers are pursing one as their way to get into the field [1]. This divergence could be attributed to the increasing popularity of online courses and &#39;coding boot camps.&#39; It will be interesting to see the trend over time, and better understand how aspiring developers—who opt for learning routes outside of traditional education—fare in becoming professional developers.</p><p class="paragraph" style="text-align:left;">Thanks for diving into this Bug Driven Development post with us! We&#39;re mixing it up a bit by switching to two deep-dive articles a month instead of our usual weekly quick takes. I’d love to hear what you think about the State of Software Development in 2023 and how you feel about our new format.</p><p class="paragraph" style="text-align:left;">Cheers,</p><p class="paragraph" style="text-align:left;">Justin</p><p class="paragraph" style="text-align:left;">Follow Justin on Twitter <a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=analyzing-the-state-of-software-development-in-late-2023-where-we-stand-and-where-we-re-going" target="_blank" rel="noopener noreferrer nofollow">here</a></p><h4 class="heading" style="text-align:left;">Additional Sources</h4><ol start="1"><li><p class="paragraph" style="text-align:left;">2023 Stack Overflow Developer Survey</p></li><li><p class="paragraph" style="text-align:left;">2022 Stack Overflow Developer Survey</p></li><li><p class="paragraph" style="text-align:left;">2023 GitLab State of DevSecOps</p></li><li><p class="paragraph" style="text-align:left;">2021 Stack Overflow Developer Survey</p></li><li><p class="paragraph" style="text-align:left;">2020 Stack Overflow Developer Survey</p></li></ol></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=d50d574b-74b5-4551-9480-c8f5ab865fe6&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Time for a Reality Check: What AI Really Can&#39;t Do for Software Development 🤖❌</title>
  <description>We&#39;re debunking AI myths in software development. Join us as we dissect and discard some of the most outlandish predictions.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/dc10e1dd-bb55-4717-a0b2-d97679878188/clown_confused_coding_debunking_ai_myths.png" length="383735" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/debunking-ai-myths-in-software-development</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/debunking-ai-myths-in-software-development</guid>
  <pubDate>Mon, 12 Jun 2023 10:54:00 +0000</pubDate>
  <atom:published>2023-06-12T10:54:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Cringe AI takes</p></li><li><p class="paragraph" style="text-align:left;">What Mark Zuckerberg thinks about Apple’s Vision Pro</p></li><li><p class="paragraph" style="text-align:left;">Reviving an abandoned AI project to achieve $300,000 in gross bookings within 90 days</p></li></ul><h1 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about what AI will NOT do for Software Development</b></h1><p class="paragraph" style="text-align:left;">A lot of people are talking about what AI will do for software development. The discourse is rife with predictions that range from insightful to downright ludicrous. So we&#39;ve got a doozy for you today - a round-up of some of the most fantastical, cringe-inducing predictions about AI in software development. </p><p class="paragraph" style="text-align:left;">Ready? Let&#39;s dive in👇</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/chsrbrts/status/1662157270002851841?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">To some bean counter MBA this prediction may make a lot of sense, but to any software developer they know the following:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">It is pretty established that lines of code written is not a viable metric for measuring developer effectiveness / efficiency </p></li><li><p class="paragraph" style="text-align:left;">There is a lot more to being a software developer than just writing code</p></li></ol><p class="paragraph" style="text-align:left;">When you forget that with most tools you need to upgrade to paid tiers for full functionality👇</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/IAmPascio/status/1662066137419448322?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">While it is now easier than ever to build and sell software, you can’t do it for free 🤡</p><p class="paragraph" style="text-align:left;">Those were the two cringe takes we found to be the funniest, what’s yours? Let us know by responding to this email or via twitter. </p><p class="paragraph" style="text-align:left;"></p><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.theverge.com/2023/6/8/23754239/mark-zuckerberg-meta-apple-vision-pro-headset?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">What Mark Zuckerberg thinks about Apple’s Vision Pro</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://old.reddit.com/r/apolloapp/comments/144l6se/apollo_backend_just_made_public_the_goal_of/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Reddit Apollo App Backend Code Made Public</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://github.com/microsoft/devicescript?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">TypeScript for Tiny IoT Devices</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.indiehackers.com/post/buying-an-abandoned-ai-project-and-growing-it-to-300-000-in-gross-bookings-in-90-days-3dd13b509a?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Buying an abandoned AI project and growing it to $300,000 in gross bookings in 90 days</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.raycast.com/blog/how-raycast-api-extensions-work?ck_subscriber_id=2156902392&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">How the Raycast API and extensions work</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/agazdecki/status/1666155663540764672?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=time-for-a-reality-check-what-ai-really-can-t-do-for-software-development" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=a9501378-f609-47ad-96fa-adac91d6772c&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Mastering Autonomy: The Path to Becoming a Senior Engineer</title>
  <description>Unraveling the Key Traits of Senior Engineers: Focusing on Autonomy</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/a78a4d23-12ab-4c87-82cf-a3e6229fa235/Engineer_Journey_From_Junior_To_Senior.png" length="966298" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/mastering-autonomy-path-to-senior-engineer</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/mastering-autonomy-path-to-senior-engineer</guid>
  <pubDate>Fri, 02 Jun 2023 10:56:00 +0000</pubDate>
  <atom:published>2023-06-02T10:56:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">What makes a senior engineer?</p></li><li><p class="paragraph" style="text-align:left;">Boost your revenue by 10-40% with upselling</p></li><li><p class="paragraph" style="text-align:left;">A passive income site making $4,000/mo in profit </p></li></ul><h1 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about what makes a senior engineer</b></h1><p class="paragraph" style="text-align:left;">This topic spawned from a twitter thread between Justin and <a class="link" href="https://twitter.com/RaulJuncoV?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Raul Junco</a> discussing what makes a senior engineer. It is a very interesting topic and we wanted to expand on what we think makes a senior engineer for this week’s newsletter. </p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/justin_trugman/status/1661765787281915906?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">In our view the key trait of a senior engineer is an engineer who is “<b>primarily autonomous</b>“. We love this description because it sums up a lot of key factors so let’s go into more detail about the importance of autonomy <a class="link" href="https://emojipedia.org/backhand-index-pointing-down/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">👇</a></p><h2 class="heading" style="text-align:left;">👨‍💻 The Importance of Autonomy</h2><p class="paragraph" style="text-align:left;">As we delve into the definition of a senior engineer, one attribute stands out: autonomy. But why is autonomy such an essential aspect of a senior engineer&#39;s role?</p><p class="paragraph" style="text-align:left;">In the world of software development, autonomy refers to the capability to handle tasks independently, to troubleshoot problems without requiring constant guidance, and to make informed decisions about technical solutions. This autonomy doesn&#39;t translate to isolation, but rather suggests the capability to <b>lead, collaborate, and communicate effectively</b> with a broader team, contributing significantly to the overall project success.</p><p class="paragraph" style="text-align:left;">Autonomy is important because it allows for faster and more efficient task completion. Imagine having a team where every member constantly needs detailed instructions, or where each decision has to go through a tedious approval process. This would inevitably slow down the development pace and may cause frustration within the team.</p><p class="paragraph" style="text-align:left;">In contrast, an autonomous engineer is like a self-driving car, capable of safely navigating the road without a driver constantly managing the controls.</p><div class="image"><a class="image__link" href="https://www.carthrottle.com/post/wexz6xr/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" rel="noopener" target="_blank"><img alt="" class="image__image" style="" src="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/2ae33e90-96b1-47b0-9c67-e2ea30666306/image.png"/></a></div><p class="paragraph" style="text-align:left;">They can take on a task or a project, understand what needs to be done, and navigate through the complexities to deliver results. This independence is not born out of thin air but stems from years of experience, a deep understanding of the technical domain, and a knack for problem-solving.</p><p class="paragraph" style="text-align:left;">Autonomous engineers are pivotal in situations where there&#39;s a need to respond swiftly to changes or issues. They can adjust to shifting requirements, adapt to new technologies, and deal with unexpected problems, all while keeping the project on track. This ability is particularly valuable in today&#39;s fast-paced tech environment where adaptability is key.</p><p class="paragraph" style="text-align:left;">But don&#39;t mistake autonomy for a license to avoid collaboration or ignore guidelines. Truly autonomous engineers <b>know when to seek help</b>, how to <b>leverage the expertise of their colleagues</b>, and when it&#39;s necessary to <b>align with team or organizational standards</b>. They embody the <span style="text-decoration:underline;"><b>balance between independence and collaboration</b></span>, making them invaluable members of any development team.</p><p class="paragraph" style="text-align:left;">So, autonomy is not just a desirable trait in a senior engineer - it&#39;s a fundamental prerequisite. It’s this ability that empowers them to navigate complex tasks and deliver high-quality results. It is this autonomy that truly sets senior engineers apart.</p><h2 class="heading" style="text-align:start;"><b>Building Your Autonomy: Strategies and Tips</b></h2><p class="paragraph" style="text-align:start;">So if autonomy is so important to becoming a senior engineer how does a junior engineer become more autonomous or how does a senior engineer become more autonomous? We put together a nifty guide to help with this. </p><p class="paragraph" style="text-align:start;"><b>1. Master Your Craft:</b> Begin with a solid understanding of the fundamentals of your technical domain. Whether it&#39;s your programming language of choice, understand the advanced concepts, principles, and best practices. Practice regularly, work on different projects, and try to learn something new each day.</p><p class="paragraph" style="text-align:start;"><b>2. Seek Out Challenges:</b> Put yourself in situations where you <b>need to find solutions to complex problems</b>. Working on challenging tasks is an excellent way to grow as an engineer. It pushes you to think critically, solve problems, and make decisions - all crucial aspects of being autonomous.</p><p class="paragraph" style="text-align:start;"><b>3. Learn From Others:</b> Seek mentorship from more experienced engineers. Their knowledge, experience, and insights can be invaluable. Attend code reviews, participate in pair programming sessions, and don’t shy away from asking questions.</p><p class="paragraph" style="text-align:start;"><b>4. Learn to Make Decisions:</b> Part of being autonomous is making informed decisions. Start by making minor decisions about code design, architecture, or technologies to use, and gradually take on more responsibility. Learn from the outcomes, whether they&#39;re successful or not.</p><p class="paragraph" style="text-align:start;"><b>5. Develop Self-Management Skills:</b> This includes time management, task prioritization, and self-discipline. These skills are critical for managing your workload and meeting deadlines, particularly when you&#39;re working autonomously.</p><p class="paragraph" style="text-align:start;"><b>6. Stay Curious:</b> The tech industry is always evolving. Keeping up with the latest trends, tools, and technologies is essential. This constant learning not only helps you stay relevant but also contributes significantly to your autonomy.</p><p class="paragraph" style="text-align:start;">Building autonomy takes time and patience, but with consistent effort, you can certainly cultivate this crucial skill. Remember, every step you take towards autonomy is a step closer to becoming a senior engineer. Keep learning, keep growing!</p><p class="paragraph" style="text-align:start;"></p><h1 class="heading" style="text-align:left;">🔗Links in Tech</h1><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/dannypostmaa/status/1661956371104006149?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Boost your revenue by 10-40% with upselling</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.chatnode.ai/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Train ChatGPT on your own data</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://lightning.ai/pages/blog/how-to-finetune-gpt-like-large-language-models-on-a-custom-dataset/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">[TUTORIAL] - Finetune GPT On Your Own Data</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://verbnow.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Verb Now is on sale with $4,000 a month in profit</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.contentinc.io/underpriced-attention-395/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">At Veecon 2023 last week there was talk about the concept of underpriced attention</a></p></li></ul><h1 class="heading" style="text-align:left;">😂 Meme of the Week</h1><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/levelsio/status/1662425671724064771?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=mastering-autonomy-the-path-to-becoming-a-senior-engineer" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=1e0f8f31-2177-409e-a258-a666981234fd&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Unleash the Power of Approval Testing for Seamless Refactoring 🚀</title>
  <description>Discover how approval testing can help ensure a smooth transition during large-scale re-architectures and cloud exodus.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/3dcf94b4-6684-4939-817e-18ba029a4d4e/image_of_two_side-by-side_gears_with_one_gear.png" length="873796" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/approval-testing</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/approval-testing</guid>
  <pubDate>Tue, 09 May 2023 11:09:00 +0000</pubDate>
  <atom:published>2023-05-09T11:09:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Approval Testing, what is it good for and how to use it</p></li><li><p class="paragraph" style="text-align:left;">NeXT Computers</p></li><li><p class="paragraph" style="text-align:left;">Giving GPT &quot;Infinite&quot; Knowledge</p></li></ul><h1 class="heading" style="text-align:left;">✅ <b>Kicking Off with Approval Testing</b></h1><p class="paragraph" style="text-align:left;">Inspired by <a class="link" href="https://twitter.com/davefarley77?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Dave Farley’s</a> latest video about approval testing, we decided to explore this concept further and share our perspective on its usefulness.</p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="true" class="youtube_embed" frameborder="0" height="100%" src="https://youtube.com/embed/jAMVtMesHqk" width="100%"></iframe><h2 class="heading" style="text-align:left;">🧪 So What Is Approval Testing?</h2><p class="paragraph" style="text-align:left;"><span style="color:rgb(33, 37, 41);font-family:system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, Noto Sans, Liberation Sans, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;font-size:16px;">Approval testing is a technique employed during code refactoring. It helps developers ensure that code changes, whether for adding new features or modifying the application&#39;s structure, do not have unintended consequences. Approval tests record system interactions, store them in a file, and compare these results with previous reference outcomes to identify discrepancies. This method effectively aids in making safe code changes and reducing potential errors.</span></p><h2 class="heading" style="text-align:left;">🗨️ Our Thoughts - The Role of Approval Testing in a Development Cycle</h2><p class="paragraph" style="text-align:left;">Recently, we&#39;ve observed a trend where companies undertake extensive re-architecture, altering their deployment models. Developers like <a class="link" href="https://twitter.com/dhh?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">David Heinemeier Hansson</a>, for instance, are moving their architectures from the cloud back to on-premises environments.</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dhh/status/1654472720334110723?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Moreover, companies like Amazon are shifting away from serverless architecture and returning to monolithic structures for improved performance and cost reduction (Amazon managed to decrease costs by 90% through this re-architecture!)</p><div class="embed"><a class="embed__url" href="https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank"><div class="embed__content"><p class="embed__title"> Scaling up the Prime Video audio/video monitoring service and reducing costs by 90% </p><p class="embed__description"> The move from a distributed microservices architecture to a monolith application helped achieve higher scale, resilience, and reduce costs. </p><p class="embed__link"> www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90 </p></div><img class="embed__image embed__image--right" src="https://cdn.primevideotech.com/dims4/default/24d0543/2147483647/strip/true/crop/1440x700+0+49/resize/720x350!/quality/90/?url=https%3A%2F%2Famazon-k1-prod-entertainment.s3.amazonaws.com%2Fbrightspot%2F6d%2F99%2F91377f7e409eaf6844a54ddff934%2F87265567.png"/></a></div><p class="paragraph" style="text-align:left;">These re-architectures aim to maintain existing features and functionalities while significantly altering the code construction or deployment model. This is where approval testing proves valuable. If the goal is to substantially restructure the code while preserving functionality, the team can implement approval tests to ensure that all refactored functions align with the current system. Consequently, as the revised code enters production, it won&#39;t cause existing systems or dependencies to break due to the changes.</p><p class="paragraph" style="text-align:left;">As organizations embark on extensive refactoring projects, approval testing emerges as an indispensable tool to maintain stability and consistency. By establishing a safety net of tests that monitor functionality, development teams can confidently make significant code modifications without fear of disrupting existing systems or dependencies. In a rapidly evolving tech landscape, it&#39;s crucial for businesses to adapt and optimize their architectures for performance, cost, and scalability. With approval testing in their arsenal, developers can boldly undertake these large-scale transformations, ensuring a seamless transition while retaining the core features and functionalities that make their applications successful.</p><p class="paragraph" style="text-align:left;">For those seeking to delve deeper into the phenomenon of organizations stepping away from cloud platforms and reevaluating their deployment models, check out our analysis of this shift in the industry 👇️</p><div class="embed"><a class="embed__url" href="https://www.bugdrivendevelopment.com/p/escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank"><div class="embed__content"><p class="embed__title"> Escaping the Cloud Trap: How Some Companies are Winning by Going Old School </p><p class="embed__description"> Uncover the secrets behind the cloud exodus trend and see if it&#39;s the right move for your infrastructure. </p><p class="embed__link"> www.bugdrivendevelopment.com/p/escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school </p></div><img class="embed__image embed__image--right" src="https://beehiiv-images-production.s3.amazonaws.com/uploads/asset/file/8aa03226-8a3b-4231-8497-00d708ca7c69/A_striking_image_of_a_hot_air_balloon_or_rocket_leaving.png"/></a></div><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.nextcomputers.org/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">NeXT Computers</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://github.com/hackclub/sinerider?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">SineRider, a math puzzle game</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.indiehackers.com/post/how-to-get-more-user-signups-using-the-sniper-link-technique-47690dfbf1?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">How to get more user signups</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://sudoapps.substack.com/p/giving-gpt-infinite-knowledge?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Giving GPT &quot;Infinite&quot; Knowledge</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://gizmodo.com/chatgpt-openai-ai-contractors-15-dollars-per-hour-1850415474?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">ChatGPT Is Powered by Human Contractors Getting Paid $15 Per Hour</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/thekitze/status/1655621521799360519?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=unleash-the-power-of-approval-testing-for-seamless-refactoring" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=00bdcb6d-236c-45a9-8c97-d40292233a23&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Documentation That Does Not Sit on a Shelf - An Introduction to Real Documentation</title>
  <description>Making Documentation Real with Interactive Prototyping Tools</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/74b8458c-e511-4b25-b010-0d977c12f67b/shredding_old_documentation.png" length="456325" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation</guid>
  <pubDate>Mon, 01 May 2023 10:51:00 +0000</pubDate>
  <atom:published>2023-05-01T10:51:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to our new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Creative ways to extend the lifespan of your documentation with Real Documentation</p></li><li><p class="paragraph" style="text-align:left;">Use AI to remove backgrounds</p></li><li><p class="paragraph" style="text-align:left;">Startup founder with zero customers</p></li></ul><h1 class="heading" style="text-align:left;">📄 Let&#39;s start off this week by talking about documentation</h1><p class="paragraph" style="text-align:left;">Developers <a class="link" href="https://www.bugdrivendevelopment.com/p/5-ways-ai-can-help-you-efficiently-document-your-software?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">create documentation</a> to share ideas with team members, serve as a reference for their future selves, meet compliance requirements, and for countless other reasons. Yet, it often feels like documentation is the appendix of software development: it&#39;s there, but nobody really knows what it&#39;s for. Sure, management emphasizes its importance, and you read about &quot;best practices&quot; online, but do your team members truly read and comprehend the documentation you create? Or do they just skim through it to get the gist?</p><p class="paragraph" style="text-align:start;">Enter what we are coining &quot;<i>Real Documentation</i>&quot; – a dynamic alternative to traditional text-based software documentation. By leveraging the many tools available today, you can create mock prototypes in the same amount of time it takes to write a conventional document. In the following sections, we&#39;ll explore how Real Documentation can revolutionize the way you communicate your software designs and ideas, making your documentation more engaging and effective. </p><h2 class="heading" style="text-align:left;">👨‍💻 Real Documentation for UI/UX Design</h2><p class="paragraph" style="text-align:start;">In the past, UI/UX designs were created by specialized designers using tools like Adobe Suite. They would gather ideas, craft beautiful screens, and share them with the team and stakeholders for feedback. While UI/UX design remains a form of art, modern tools like <a class="link" href="https://www.figma.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Figma</a> have made it easier for anyone to turn their ideas into interactive mockups and click-through demos even before writing a single line of code.</p><p class="paragraph" style="text-align:start;">These interactive demos are far more effective for gathering feedback from users, team members, and stakeholders compared to static Adobe designs in PowerPoint or PDFs. They also surpass traditional text-based documents describing features, their appearance, and positioning. Real Documentation is all about showing, not telling, when it comes to presenting your UI/UX designs. By embracing click-through demos, you can significantly enhance communication and collaboration within your team.</p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/disco_lu/status/1650774898082729985?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation"><p> Twitter tweet </p></a></blockquote><h2 class="heading" style="text-align:left;">🕸️ Real Documentation for APIs and Microservices</h2><p class="paragraph" style="text-align:start;">API specifications serve more purposes than merely outlining request and response formats. They can also be used to generate mock servers, empowering fellow developers to experiment with APIs before their actual implementation. Instead of solely relying on an <a class="link" href="https://www.openapis.org/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">OpenAPI Specification</a> or a <a class="link" href="https://www.postman.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Postman</a> Collection, consider creating a mock server in <a class="link" href="https://www.postman.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Postman</a> that includes all API endpoints with sample data resembling real API responses.</p><p class="paragraph" style="text-align:start;">This approach is beneficial for both adding or revising an API in an existing service and creating a brand-new microservice. The mock server enables developers to test APIs by consuming them as they would with the completed version, which in turn helps them provide more actionable feedback on improving the API or service design. By adopting Real Documentation in this context, you can enhance collaboration and streamline the API development process. </p><h2 class="heading" style="text-align:left;">🐾 Next Steps for Real Documentation</h2><p class="paragraph" style="text-align:left;">Real Documentation offers a fresh perspective on how we approach software development documentation. By shifting our focus from traditional text-based documents to interactive, hands-on prototypes and mock servers, we can bridge the communication gap between developers, stakeholders, and users. This approach not only streamlines the development process but also facilitates better feedback and understanding among team members.</p><p class="paragraph" style="text-align:start;">Embracing tools like Figma for UI/UX design and Postman for API mock servers allows for a more dynamic and immersive documentation experience. As the software development landscape continues to evolve, it&#39;s crucial to adopt practices that keep pace with modern demands. Real Documentation is an innovative approach that enables us to create more effective and engaging documentation, ultimately leading to better products and improved collaboration.</p><p class="paragraph" style="text-align:start;">It&#39;s time to leave those dusty, unread documents behind and embrace the future of documentation. With Real Documentation, we can transform the way we communicate our ideas and ensure that our work doesn&#39;t just sit on a virtual shelf but plays an active role in the development process.</p><p class="paragraph" style="text-align:start;">As we continue to explore the potential of Real Documentation, stay tuned for more guides and insights in future <a class="link" href="https://www.bugdrivendevelopment.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Bug Driven Development</a> blog posts. We&#39;re excited to share the journey with you, as we collectively redefine the role of documentation in software development.</p><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://techcrunch.com/2023/04/28/amazon-working-improved-llm-to-power-alexa/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Amazon is developing an improved LLM to power Alexa</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://removal.ai/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Remove Background From Image for Free Using Artificial Intelligence</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://monadical.com/posts/cobol.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Learning COBOL: A Journey for the Modern Programmer</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.svix.com/careers/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Svix (YC W21) Is Hiring Rust Back End Engineers</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://speakerdeck.com/eileencodes/the-magic-of-rails?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">[RailsConf 2023 Opening Keynote] The Magic of Rails</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dagorenouf/status/1652662142175150082?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation"><p> Twitter tweet </p></a></blockquote><h2 class="heading" style="text-align:left;">🤖 <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> Update</h2><p class="paragraph" style="text-align:left;"><a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> is launching soon! See a more detailed update on Justin’s personal website here: <a class="link" href="https://www.justintrugman.com/blogs/software-testing-ai-pivot/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">https://www.justintrugman.com/blogs/software-testing-ai-pivot/</a></p><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=documentation-that-does-not-sit-on-a-shelf-an-introduction-to-real-documentation" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=0e03782a-2185-4ad1-88ca-c7d2c72a5a38&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Don&#39;t Let These Dev Pet Peeves Haunt Your Code! 👻🚫</title>
  <description>Tame repetitive code and error handling for cleaner, more efficient programming.</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/9cfc41df-6834-4985-8b12-994298dfaaec/A_cute_before-and-after_cartoon_of_a_cluttered_desk.png" length="619456" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/dont-let-these-dev-pet-peeves-haunt-your-code</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/dont-let-these-dev-pet-peeves-haunt-your-code</guid>
  <pubDate>Mon, 24 Apr 2023 15:58:24 +0000</pubDate>
  <atom:published>2023-04-24T15:58:24Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Reworking repeated code into arrays</p></li><li><p class="paragraph" style="text-align:left;">Inconsistent error handling makes debugging more difficult than needed</p></li><li><p class="paragraph" style="text-align:left;">The Kubernetes Desktop Client you&#39;ve been waiting for</p></li><li><p class="paragraph" style="text-align:left;">Mr. Google Incognito</p></li></ul><h1 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about some Dev Pet Peeves</b></h1><p class="paragraph" style="text-align:left;">As developers, we&#39;ve all come across code that makes us cringe. The two pet peeves we&#39;ll discuss today – repetitive code and inconsistent error handling – can wreak havoc on a codebase. But don&#39;t worry! We&#39;ll provide you with solutions to overcome these common challenges and make your code cleaner, more efficient, and easier to maintain.</p><h2 class="heading" style="text-align:left;">Repetitive Code – Embrace Arrays and Iterations</h2><p class="paragraph" style="text-align:left;">This past few weeks, we have seen way to much repetitive code and it drives us nuts! </p><p class="paragraph" style="text-align:left;">I was looking for a new chair for my home office set up and wanted to take some measurements to see how well it would fit. The issue was my tape measure is in imperial system and the measurements on the website for the chair was in metric system. For doing the conversions I was looking for a simple calculator like tool that I could use to quickly see if the chair will fit (seems straight forward enough). </p><p class="paragraph" style="text-align:left;">I came across an open-source project that seemed to offer what I needed, so I started examining the code to see how well it would work for me. My intrinsic developer curiosity caused me dive into the codebase, and I stumbled upon a section that made me cringe: a long series of repetitive if statements, each one handling a different unit conversion.</p><p class="paragraph" style="text-align:left;">The code looked something like this:</p><div class="codeblock"><pre><code>if (unitFrom === &#39;meters&#39; &amp;&amp; unitTo === &#39;feet&#39;) &#123;
  convertedValue = inputValue * 3.28084;
&#125; else if (unitFrom === &#39;meters&#39; &amp;&amp; unitTo === &#39;inches&#39;) &#123;
  convertedValue = inputValue * 39.3701;
&#125; else if (unitFrom === &#39;feet&#39; &amp;&amp; unitTo === &#39;meters&#39;) &#123;
  convertedValue = inputValue * 0.3048;
&#125; // and so on, for every possible conversion...</code></pre></div><p class="paragraph" style="text-align:left;">This approach is not only cumbersome but also makes the code harder to maintain and prone to errors. A much better approach would be to use a nested object to store the conversion factors for each unit, something like this:</p><div class="codeblock"><pre><code>const conversionFactors = &#123;
  meters: &#123;
    feet: 3.28084,
    inches: 39.3701,
  &#125;,
  feet: &#123;
    meters: 0.3048,
  &#125;,
  // ... and so on, for every possible conversion
&#125;;</code></pre></div><p class="paragraph" style="text-align:left;">This gives the conversion factors in a more manageable structure, which you could quickly perform the desired conversion using a single line of code:</p><div class="codeblock"><pre><code>const convertedValue = inputValue * conversionFactors[unitFrom][unitTo];</code></pre></div><p class="paragraph" style="text-align:left;">This code is cleaner, more efficient, and much easier to maintain. This simple example just goes to show the importance of using appropriate data structures and prevalent developers not structuring their programs correctly is.</p><h2 class="heading" style="text-align:left;">Inconsistent Error Handling – Create a Single Error Function</h2><p class="paragraph" style="text-align:left;">Inconsistent error handling is another pet peeve that can lead to messy, hard-to-maintain code. Often, developers handle errors in different ways throughout the codebase. For example with Javascript, some might use console.log(), while others use console.error(), and some may not handle errors at all.</p><p class="paragraph" style="text-align:left;">To create a more consistent and efficient error handling system, implement a single error function that handles all errors in your codebase. This function should log the error, notify the appropriate team members, and, if necessary, handle the error gracefully.</p><p class="paragraph" style="text-align:left;">Here&#39;s a simple example of a custom error handling function:</p><div class="codeblock"><pre><code>function handleError(error) &#123;
  console.error(error);
  // Send error notification to the team via email or other channels
  // Send log to a log server
  // Perform necessary actions to recover from the error
&#125;
</code></pre></div><p class="paragraph" style="text-align:left;">Now, whenever an error occurs, you can use this function to handle it consistently:</p><div class="codeblock"><pre><code>try &#123;
  // Your code here
&#125; catch (error) &#123;
  handleError(error);
&#125;</code></pre></div><p class="paragraph" style="text-align:left;">Its a much cleaner and more extendable approach to error handling. One enhancement you can make to this is passing in additional inputs to the handleError function that can trigger different actions. For example, you can pass in a parameter which would signify that support should be emailed about the issue, or that for this type of issue the log should be sent to a log server, etc. </p><h1 class="heading" style="text-align:left;">🔗Links in Tech</h1><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://bullettrain.co/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">The Open Source Ruby on Rails SaaS Framework</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.axios.com/2023/04/24/twitter-svb-bank-run?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">Twitter fueled run on Silicon Valley Bank, new paper finds</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.ft.com/content/c57e3503-6fc0-44dc-9d50-35f8f9da25d2?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">YouTube, the jewel of the internet</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.hackingwithswift.com/100/swiftui?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">100 Days of SwiftUI! This is a free collection of videos and tutorials</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://aptakube.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">The Kubernetes Desktop Client you&#39;ve been waiting for</a></p></li></ul><h1 class="heading" style="text-align:left;">😂 Meme of the Week</h1><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/PicturesFoIder/status/1648718534040604677?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;"></p><h1 class="heading" style="text-align:left;">🤖 <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> Update</h1><p class="paragraph" style="text-align:left;">The <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> pivot is going well so far! </p><p class="paragraph" style="text-align:left;">From a development standpoint we have starting aligning the architecture to be supportive of receiving webhooks from GitHub and we expect the MVP launch to be next weekend! </p><p class="paragraph" style="text-align:left;">For the initial launch we are going to:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Analyze your Code Coverage</p></li><li><p class="paragraph" style="text-align:left;">Generate Unit Tests to fill the gaps in coverage</p></li><li><p class="paragraph" style="text-align:left;">Add these as suggestions as GitHub Comments in your PR</p></li></ol><p class="paragraph" style="text-align:left;">This will give you quick feedback on how to improve your code coverage and allow you to implement the suggested tests in the comments through the already existing “Apply Suggestions“ workflow built into GitHub. </p><p class="paragraph" style="text-align:left;">If you are interested in finding out more about the <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a> pivot check out our <a class="link" href="https://softwaretesting.ai/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">new landing page</a> that has more details 😀 </p><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=don-t-let-these-dev-pet-peeves-haunt-your-code" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=28db45c3-af4e-4e91-b298-59f08cb4a0fa&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Reactive Programming: Building Scalable, Responsive Applications</title>
  <description>Embrace the reactive paradigm for high-performance web applications</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/63172aef-ba78-49ab-9fbd-ff2852fad6d5/A_background_with_interconnected_nodes_or_dots.png" length="466232" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/reactive-programming-building-scalable-responsive-applications</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/reactive-programming-building-scalable-responsive-applications</guid>
  <pubDate>Mon, 17 Apr 2023 11:30:52 +0000</pubDate>
  <atom:published>2023-04-17T11:30:52Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Intro into Reactive Programming</p></li><li><p class="paragraph" style="text-align:left;">Additional resources to learn more about Reactive Programming</p></li><li><p class="paragraph" style="text-align:left;">AI is going to nuke the bottom third of performers in jobs done on computers in the next 24 months</p></li><li><p class="paragraph" style="text-align:left;">Dev reaches 100$ MRR with AI app</p></li><li><p class="paragraph" style="text-align:left;">Update about Justin’s Software Testing Project</p><p class="paragraph" style="text-align:left;"></p></li></ul><h1 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about Reactive Programming</b></h1><p class="paragraph" style="text-align:left;">In today&#39;s fast-paced world, users demand applications that are highly responsive and can effortlessly handle large amounts of data in real-time. Reactive programming is a programming paradigm that aims to fulfill these needs by helping developers build scalable and responsive applications. In this post, we will explore the principles of reactive programming and learn how to apply them to create fast, highly interactive applications.</p><h2 class="heading" style="text-align:left;">What is Reactive Programming?</h2><p class="paragraph" style="text-align:left;">Reactive programming is a programming paradigm that revolves around the propagation of changes in data. It emphasizes the use of asynchronous data streams, allowing you to process and react to events and data changes as they occur. Reactive programming promotes a more declarative approach to handling data, making it easier to reason about and maintain complex application logic.</p><h2 class="heading" style="text-align:left;">Key Principles of Reactive Programming</h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Data Streams</b>: Reactive programming is centered around data streams, which represent a sequence of events or values over time. These data streams can be created from various sources like user input, network events, or even internal application state changes.</p></li><li><p class="paragraph" style="text-align:left;"><b>Observables and Observers</b>: In reactive programming, data streams are represented as observables, and consumers of these data streams are known as observers. Observers can subscribe to observables to receive updates whenever new data is emitted.</p></li><li><p class="paragraph" style="text-align:left;"><b>Functional and Declarative</b>: Reactive programming encourages functional and declarative programming styles. By combining and transforming observables, you can create complex application logic without explicitly managing state or control flow.</p></li><li><p class="paragraph" style="text-align:left;"><b>Asynchronous and Non-Blocking</b>: Reactive programming focuses on asynchronous and non-blocking operations, making it easier to handle long-running tasks, such as network requests or database queries, without freezing the application.</p></li></ol><h2 class="heading" style="text-align:left;">Getting Started with Reactive Programming</h2><p class="paragraph" style="text-align:left;">To start implementing reactive programming in your applications, you can use popular libraries and frameworks like RxJS for JavaScript, ReactiveX for Java, and ReactiveSwift for Swift. These libraries provide a set of tools and abstractions to work with reactive data streams, making it easier to build responsive applications.</p><p class="paragraph" style="text-align:left;">Here&#39;s a simple example using RxJS:</p><div class="codeblock"><pre><code>const &#123; fromEvent &#125; = rxjs;
const &#123; map, debounceTime &#125; = rxjs.operators;

const input = document.querySelector(&quot;#search-input&quot;);
const searchResults = document.querySelector(&quot;#search-results&quot;);

const input$ = fromEvent(input, &quot;input&quot;).pipe(
  debounceTime(300),
  map(event =&gt; event.target.value)
);

input$.subscribe(searchTerm =&gt; &#123;
  searchResults.innerHTML = `Searching for: $&#123;searchTerm&#125;`;
&#125;);</code></pre></div><p class="paragraph" style="text-align:left;">In this example, we create an observable from the &quot;input&quot; event of an input element, then use the <code>debounceTime</code> and <code>map</code> operators to handle the user input. The observer subscribes to the transformed observable and updates the search results element whenever the input changes.</p><h2 class="heading" style="text-align:left;">Benefits of Reactive Programming</h2><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Simplified Complex Logic</b>: Reactive programming enables you to compose complex application logic more easily by chaining and combining data streams.</p></li><li><p class="paragraph" style="text-align:left;"><b>Improved Performance</b>: Asynchronous and non-blocking operations lead to better performance and resource utilization in your applications.</p></li><li><p class="paragraph" style="text-align:left;"><b>Easier Maintenance</b>: The declarative nature of reactive programming makes your code more readable and easier to maintain.</p></li><li><p class="paragraph" style="text-align:left;"><b>Scalability</b>: Reactive programming provides a solid foundation for building scalable applications that can efficiently handle large amounts of data and high levels of user interaction.</p></li></ol><h2 class="heading" style="text-align:left;">Conclusion</h2><p class="paragraph" style="text-align:left;">Reactive programming is a powerful paradigm for building scalable, responsive applications. By embracing the principles of reactive programming and utilizing libraries like RxJS, ReactiveX, or ReactiveSwift, you can create applications that are more performant, easier to maintain</p><p class="paragraph" style="text-align:left;"></p><h1 class="heading" style="text-align:left;">📖 Learn more here</h1><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into Reactive Programming:</i></p><ul><li><p class="paragraph" style="text-align:left;">The introduction to Reactive Programming you&#39;ve been missing by Andre Staltz (<a class="link" href="https://gist.github.com/staltz/868e7e9bc2a7b8c1f754?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">https://gist.github.com/staltz/868e7e9bc2a7b8c1f754</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn all about Reactive Programming and how it works</p></li></ul></li><li><p class="paragraph" style="text-align:left;">5 Things to Know About Reactive Programming by Clement Escoffier (<a class="link" href="https://developers.redhat.com/blog/2017/06/30/5-things-to-know-about-reactive-programming?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">https://developers.redhat.com/blog/2017/06/30/5-things-to-know-about-reactive-programming</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Discover 5 key areas of Reactive Programming</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Notes on Reactive Programming Part I: The Reactive Landscape by Dave Syer (<a class="link" href="https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Solid overview of the area of Reactive Programming</p></li></ul></li></ul><h1 class="heading" style="text-align:left;">🔗Links in Tech</h1><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://github.com/Significant-Gravitas/Auto-GPT?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Auto-GPT: An Autonomous GPT-4 Experiment</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/Jason/status/1647274896563802112?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">AI is going to nuke the bottom third of performers in jobs done on computers — even creative ones — in the next 24 months</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.indiehackers.com/post/just-reached-100-mrr-with-my-app-87887c33b4?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Just reached 100$ MRR with my app</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.businessinsider.com/an-adtech-employee-stole-a-9m-payment-sent-by-google-and-used-it-to-buy-gold-2023-4?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Tyler Mancuso exploited adtech systems to reroute a $9 million payment</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://hellgatenyc.com/why-is-airport-turkey-sandwich-expensive?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Why Does a Plastic-Wrapped Turkey Sandwich Cost $15 at the Airport?</a></p></li></ul><h1 class="heading" style="text-align:left;">😂 Meme of the Week</h1><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/TrungTPhan/status/1647304862613508098?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications"><p> Twitter tweet </p></a></blockquote><h1 class="heading" style="text-align:left;">Update about <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a></h1><p class="paragraph" style="text-align:left;">We wanted to give you an update on Justin’s latest pivot for <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a>. <a class="link" href="http://SoftwareTesting.ai?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">SoftwareTesting.ai</a>’s mission has always been to help software engineers improve their code quality and save time through AI-powered testing. To that end, we are excited to announce that we are pivoting towards a new direction that we believe will revolutionize the way teams approach test coverage.</p><p class="paragraph" style="text-align:left;">We are currently using our AI test generation technology to develop a Github app that will analyze code coverage, identify gaps in testing coverage, and provide actionable insights for developers to create unit tests and close those gaps. This app will streamline testing workflows and help teams deliver quality code faster. Our goal is to provide developers with the tools and resources they need to improve code coverage and automate the testing process. We believe this new direction will help us better serve our customers and push the boundaries of what&#39;s possible in the testing space. We look forward to sharing more updates with you soon.</p><p class="paragraph" style="text-align:left;"></p><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=reactive-programming-building-scalable-responsive-applications" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=4fbd3ac7-81ec-457e-9cd2-09f4c09d922c&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Escaping the Cloud Trap: How Some Companies are Winning by Going Old School</title>
  <description>Discover the benefits of &quot;leaving the cloud&quot; and returning to bare-metal servers</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/8aa03226-8a3b-4231-8497-00d708ca7c69/A_striking_image_of_a_hot_air_balloon_or_rocket_leaving.png" length="404130" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school</guid>
  <pubDate>Sun, 09 Apr 2023 14:00:00 +0000</pubDate>
  <atom:published>2023-04-09T14:00:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">In this special Easter edition of the Bug Driven Development newsletter, we&#39;ll delve into the trend of leaving the cloud. Weighing the pros and cons, and help you decide whether it&#39;s time to pack your bags and leave the cloud or stick around for a little longer.</p><p class="paragraph" style="text-align:left;"> If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Leaving the cloud or staying in the sky</p></li><li><p class="paragraph" style="text-align:left;">Resources to learn more about making the move back to bare-metal</p></li><li><p class="paragraph" style="text-align:left;">Indie Hackers is indie again!</p></li><li><p class="paragraph" style="text-align:left;">“You are online 24/7. No exceptions, no excuses.”</p></li></ul><h3 class="heading" style="text-align:left;">⛅️ <b>Let&#39;s start off this week by talking about the trend of leaving the cloud</b></h3><p class="paragraph" style="text-align:left;">The cloud has been the go-to solution for most companies in recent years, with its scalability, easy deployment, and cost-saving potential. However, some businesses are now choosing to &quot;leave the cloud&quot; and return to more traditional, on-premises infrastructures. This trend has been fueled by the increasing cost of cloud services and the desire for more control over hardware and software. Let’s dive in to the case for leaving the cloud, the case for staying, and some recommendations we have for teams considering making the move. </p><h3 class="heading" style="text-align:left;">⛈️ The Case for Leaving the Cloud</h3><p class="paragraph" style="text-align:left;">There are several reasons why some companies are opting to leave the cloud, and one of the most compelling is cost. As <a class="link" href="https://world.hey.com/dhh?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">David Heinemeier Hansson</a>, co-founder of <a class="link" href="https://37signals.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">37signals</a>, recently shared in his blog post, their cloud bills had grown to an eye-watering $38,000 per week. They chose to develop <a class="link" href="https://mrsk.dev/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">MRSK</a>, a new deployment tool that combines the simplicity of Capistrano with modern containerization techniques, to facilitate their move away from the cloud. By doing so, they expect to save a significant amount on their infrastructure costs.</p><p class="paragraph" style="text-align:left;">Another reason to consider leaving the cloud is the increased control over hardware and software. Companies can tailor their infrastructure to their specific needs, potentially leading to better performance, security, and flexibility. Plus, as Hansson points out, modern server hardware has made significant strides in recent years, making on-premises solutions more attractive than ever.</p><h3 class="heading" style="text-align:left;">🌤️ The Case for Staying in the Cloud</h3><p class="paragraph" style="text-align:left;">However, leaving the cloud isn&#39;t for everyone. There are still plenty of reasons to stick with cloud solutions. One of the most significant benefits is scalability. Cloud services allow businesses to scale up or down easily, depending on their needs, without investing in expensive hardware. This can be particularly valuable for smaller companies or those with fluctuating resource requirements.</p><p class="paragraph" style="text-align:left;">Additionally, cloud providers offer a wealth of tools and services that can streamline deployment, monitoring, and management, making life easier for developers and sysadmins alike. In some cases, optimizing cloud usage and choosing the right services can lead to cost savings without needing to move away from the cloud entirely.</p><h3 class="heading" style="text-align:left;">🚦Our Recommendations</h3><p class="paragraph" style="text-align:left;">So, should you leave the cloud or stay put? Here are some recommendations to help you make the right decision for your infrastructure:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Analyze your current cloud costs</b> </p><ul><li><p class="paragraph" style="text-align:left;">Take a close look at your cloud bills and identify areas where you might be overspending. In some cases, optimizing your cloud usage or finding alternative cloud providers could lead to significant savings without the need to leave the cloud.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Consider your scalability needs:</b></p><ul><li><p class="paragraph" style="text-align:left;">If your business requires rapid scaling, the cloud might still be the best option for you. However, if your resource requirements are stable or predictable, an on-premises solution could be more cost-effective.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Assess your team’s expertise</b></p><ul><li><p class="paragraph" style="text-align:left;">Moving away from the cloud requires a certain level of expertise in managing hardware and software. Ensure you have the right people on your team to handle the transition and ongoing management of your infrastructure.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>Test the waters </b></p><ul><li><p class="paragraph" style="text-align:left;">Before committing to leaving the cloud entirely, you could experiment with a hybrid approach. Some of your applications could be moved to on-premises infrastructure, while others remain in the cloud. This allows you to evaluate the benefits and challenges of both approaches and make a more informed decision.</p></li></ul></li></ul><h3 class="heading" style="text-align:left;">💡Conclusions</h3><p class="paragraph" style="text-align:left;">The decision to leave the cloud isn&#39;t one to be taken lightly, but for some businesses, it can lead to significant cost savings and greater control over their infrastructure. By carefully evaluating your needs, costs, and expertise, you can determine whether it&#39;s time to wave goodbye to the cloud or continue to ride the waves in the sky.</p><h3 class="heading" style="text-align:left;">📖 Learn more here</h3><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into the trend of leaving cloud computing:</i></p><ul><li><p class="paragraph" style="text-align:left;">We stand to save $7m over five years from our cloud exit by David Heinemeier Hansson (<a class="link" href="https://world.hey.com/dhh/we-stand-to-save-7m-over-five-years-from-our-cloud-exit-53996caa?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">https://world.hey.com/dhh/we-stand-to-save-7m-over-five-years-from-our-cloud-exit-53996caa</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn the factors that contributed to 37 Signals’ move away from the cloud</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Why are companies leaving the cloud? Exploring the main reasons for cloud repatriation by Mohamed Wadie Nsiri (<a class="link" href="https://ubuntu.com/blog/cloud-repatriation-reasons?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">https://ubuntu.com/blog/cloud-repatriation-reasons</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Discover the key reasons companies are using to justify going back to on prem infrastructure</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Are clouds having their on-prem moment? by Ben Popper (<a class="link" href="https://stackoverflow.blog/2023/02/20/are-companies-shifting-away-from-public-clouds/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">https://stackoverflow.blog/2023/02/20/are-companies-shifting-away-from-public-clouds/</a>)</p><ul><li><p class="paragraph" style="text-align:left;">An analysis on the trend and seeing if staying in the cloud is best for your infrastructure</p><p class="paragraph" style="text-align:left;"></p></li></ul></li></ul><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/AlexAIDaily/status/1643270786898067456?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Megathread of who&#39;s who in AI</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://medium.com/mlearning-ai/babyagi-and-auto-gpt-pioneering-a-new-era-of-ai-driven-task-management-and-art-business-growth-4a6f4eaaf77?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">BabyAGI and Auto-GPT</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.starterstory.com/stories/excelformulabot?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">This solo non-technical founder started a $14K/month SaaS</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.indiehackers.com/product/indie-hackers/indie-hackers-is-indie-again--NSIAlb7LggSjzTavQZb?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Indie Hackers is indie again!</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.youtube.com/watch?v=JCo0A2M1tlE&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Matt Diggity Shows How to Use ChatGPT to Build SEO Topical Authority</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/KHendersonCo/status/1643967344253837313?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=escaping-the-cloud-trap-how-some-companies-are-winning-by-going-old-school" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=eb729448-b952-49d5-9fe9-15303d3476fe&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Who Still Uses StackOverflow? The Relevance of an Icon in the Age of AI</title>
  <description>The Battle for Relevance in a World of AI-driven Coding Tools</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5817a05f-d044-4093-8aa6-e0a820411f20/cropped_an_old_guy_getting_kicked_out_of_a_bar_by_the_new_guy_i_adobe_express.png" length="706843" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai</guid>
  <pubDate>Mon, 03 Apr 2023 10:49:00 +0000</pubDate>
  <atom:published>2023-04-03T10:49:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to this week&#39;s edition of our newsletter, where we are going to discuss the impact of AI tools like ChatGPT, GitHub Copilot, and others on the future of StackOverflow. As the software development landscape continues to evolve, we can&#39;t help but wonder: is StackOverflow still relevant? Let&#39;s dive into this analysis and explore the pros and cons of these AI-driven technologies. If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Analysis on the usage of StackOverflow and if it is still relevant in the AI era</p></li><li><p class="paragraph" style="text-align:left;">Why Not document.write()?</p></li><li><p class="paragraph" style="text-align:left;">Survey - do you still use StackOverflow?</p></li></ul><h3 class="heading" style="text-align:left;">The Unwavering Popularity of StackOverflow</h3><p class="paragraph" style="text-align:left;">For over a decade, StackOverflow has been the go-to destination for software developers seeking solutions to their coding challenges. The platform&#39;s extensive database of questions and answers, combined with a strong community of developers, has made it an indispensable resource for programmers.</p><h3 class="heading" style="text-align:left;"><b>Enter the AI-driven Tools</b></h3><p class="paragraph" style="text-align:left;">In recent years, AI-driven tools such as ChatGPT, GitHub Copilot, and others have started to emerge, offering developers a new way to tackle their coding challenges. These tools can understand context, generate code snippets, and even offer insights into best practices, making them incredibly powerful allies in the software development process.</p><h3 class="heading" style="text-align:left;"><b>Weighing the Pros and Cons</b></h3><p class="paragraph" style="text-align:left;">It&#39;s essential to acknowledge the advantages and limitations of both StackOverflow and AI-driven tools. StackOverflow boasts a wealth of collective knowledge, with real-life examples and a supportive community. However, it can be time-consuming to search for the right answers, and the quality of responses can vary.</p><p class="paragraph" style="text-align:left;">On the other hand, AI-driven tools offer immediate assistance, tailored to your specific coding needs. They can quickly generate code snippets and recommendations, saving you time and effort. However, these tools may still lack the depth of understanding and context that human experts can provide.</p><h3 class="heading" style="text-align:left;"><b>The Decline of StackOverflow?</b></h3><p class="paragraph" style="text-align:left;">While it&#39;s unlikely that StackOverflow will become obsolete, we can&#39;t ignore the potential impact of AI tools on its utility. As AI-driven technologies continue to advance, we may see a decline in StackOverflow&#39;s relevance, particularly in areas where AI tools excel, such as code generation, autocomplete, and syntax error identification.</p><p class="paragraph" style="text-align:left;">That being said, StackOverflow will likely remain a valuable resource for more complex and nuanced discussions, as well as for developers seeking human-to-human interactions and support.</p><h3 class="heading" style="text-align:left;"><b>Concluding Thoughts</b></h3><p class="paragraph" style="text-align:left;">As AI-driven tools like ChatGPT and GitHub Copilot continue to gain traction, we can expect them to reshape the way developers approach problem-solving. StackOverflow may see a decline in utility around specific areas, but its wealth of collective knowledge and supportive community will likely keep it relevant to some degree in the foreseeable future.</p><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.politico.eu/article/italian-privacy-regulator-bans-chatgpt/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Italian privacy regulator bans ChatGPT</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.axios.com/2023/03/15/stripe-50-billion?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Payments giant Stripe raises $6.5 billion at a $50 billion valuation</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://dragon863.github.io/blog/alexa.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Alexa, what is my wifi password?</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.noya.io/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Draw wireframes, get designs & code</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://csswizardry.com/2023/01/why-not-document-write/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Why Not document.write()?</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/JustJake/status/1631853875539111938?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=who-still-uses-stackoverflow-the-relevance-of-an-icon-in-the-age-of-ai" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=7024da47-cef4-471d-9c44-3f140f243245&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>From Mess to Success: How to Effectively Manage Technical Debt</title>
  <description>How to Keep Technical Debt Under Control: A Practical Guide</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/81963d3f-30e7-40db-b79d-c750b38174d7/person_cleaning_up_a_messy_room.png" length="852798" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/from-mess-to-success-how-to-effectively-manage-technical-debt</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/from-mess-to-success-how-to-effectively-manage-technical-debt</guid>
  <pubDate>Mon, 27 Mar 2023 12:16:55 +0000</pubDate>
  <atom:published>2023-03-27T12:16:55Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to 98 new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Uncluttering the Mess: Managing Technical Debt in an Organized way</p></li><li><p class="paragraph" style="text-align:left;">Additional resources to learn more about managing tech debt</p></li><li><p class="paragraph" style="text-align:left;">Are we in a recession? </p></li><li><p class="paragraph" style="text-align:left;">The Billion-Dollar SEO Industry</p></li></ul><h3 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about Managing Technical Debt</b></h3><p class="paragraph" style="text-align:left;">We know technical debt is a fact of life in software development, but that doesn&#39;t mean it has to cripple your codebase. In this week&#39;s newsletter, we&#39;re discussing strategies for managing technical debt like a boss.</p><p class="paragraph" style="text-align:left;">First, let&#39;s define what technical debt is. Technical debt is the accumulated cost of sub-optimal code design decisions over time. It&#39;s what happens when you take shortcuts to meet a deadline or cut corners to deliver features faster.</p><p class="paragraph" style="text-align:left;">But technical debt isn&#39;t all bad. The key is to know how to <b>manage it effectively</b>. Here are some strategies for keeping your technical debt in check:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Acknowledge the debt: The first step to managing technical debt is acknowledging that it exists. Once you&#39;ve accepted that it&#39;s there, you can start developing a plan to deal with it.</p></li><li><p class="paragraph" style="text-align:left;">Prioritize the debt: Not all technical debt is created equal. Some debt can wait, while others requires immediate attention. Prioritizing the tech debt based on its impact on your codebase and users is crucial.</p></li><li><p class="paragraph" style="text-align:left;">Create a plan: Develop a clear plan for addressing your technical debt. This plan should include short-term and long-term goals, timelines, and the resources required to execute the plan.</p></li><li><p class="paragraph" style="text-align:left;">Track progress: Track your progress in paying down your technical debt. This will help you stay on track and measure the effectiveness of your plan. One easy way to do this is to create a card for each piece of tech debt on your plan in your favorite project management tool (like <a class="link" href="https://www.atlassian.com/software/jira?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Jira</a>, <a class="link" href="https://trello.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Trello</a>, and <a class="link" href="https://github.com/features/issues?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">GitHub Issues</a>) that map to a higher level card or epic. This way you can track how much tech debt is resolved and how much is left to go. </p></li><li><p class="paragraph" style="text-align:left;">Communicate with stakeholders: Keep stakeholders informed about the technical debt and the plan to address it. This will help manage expectations and avoid surprises.</p></li><li><p class="paragraph" style="text-align:left;">Avoid taking on new debt: While this is much easier said then done. Try to avoid taking on new technical debt whenever possible. This means taking the time to design code that&#39;s scalable, maintainable, and extendable.</p></li><li><p class="paragraph" style="text-align:left;">Use automation to your advantage: Use automation tools to help you manage technical debt. Automated testing, code analysis, and continuous integration tools can help you identify and address technical debt more efficiently.</p></li></ol><p class="paragraph" style="text-align:left;">In conclusion, technical debt is a reality in software development, but it doesn&#39;t have to be a huge burden. By following these strategies, you can manage technical debt effectively, keeping your codebase healthy and your users happy.</p><h3 class="heading" style="text-align:left;">📖 Learn more here</h3><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into managing technical debt:</i></p><ul><li><p class="paragraph" style="text-align:left;">Technical Debt Quadrant by Martin Fowler (<a class="link" href="https://martinfowler.com/bliki/TechnicalDebtQuadrant.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">https://martinfowler.com/bliki/TechnicalDebtQuadrant.html</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Reading the Technical Debt Quadrant will help you differentiate between &quot;good&quot; and &quot;bad&quot; technical debt, so you can finally stop feeling guilty about all those code shortcuts you&#39;ve been taking.</p></li></ul></li><li><p class="paragraph" style="text-align:left;">A Mess is not Technical Debt by Bob Martin (<a class="link" href="https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Discover how to differentiate between a mess and technical debt, so you can finally stop blaming your code for your messy desk.</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Managing Technical Debt by Steve McConnell (<a class="link" href="https://www.youtube.com/watch?v=lEKvzEyNtbk&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">https://www.youtube.com/watch?v=lEKvzEyNtbk</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn how to deal with tech debt without drowning in it, unlike your overflowing backlog of unread emails.</p></li></ul></li></ul><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://stadio.ai/infinite-logo-maker?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Infinite logo maker</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://convertkit.baremetrics.com/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">ConvertKit’s 2.7 Million MRR</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/Patticus/status/1625178052874453011?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Are we in a recession? Because... Your customers THINK they&#39;re in one</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://detailed.com/seo-industry/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">The $122Bn SEO Industry: 31 Success Stories (with Revenue Numbers) for 2023</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://medium.com/knowable/why-everything-looks-the-same-bad80133dd6e?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Why Everything Looks the Same</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/TrungTPhan/status/1639400920084811776?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=from-mess-to-success-how-to-effectively-manage-technical-debt" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=eec8611a-aa2d-4e64-8fd6-c5c3c0823bd1&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Achieving Monolith Development Velocity (with a Microservice&#39;s Availability)</title>
  <description>Is Google&#39;s Service Weaver the magical answer to your microservice needs?</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/5938cbe7-1766-4163-9dd4-b8eaa77fcb6c/modular_monolith_in_a_lush_green_field_on_a_storm.png" length="712557" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/achieving-monolith-development-velocity-with-a-microservice-s-availability</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/achieving-monolith-development-velocity-with-a-microservice-s-availability</guid>
  <pubDate>Mon, 20 Mar 2023 10:07:00 +0000</pubDate>
  <atom:published>2023-03-20T10:07:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to 116 new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Google’s newly announced project Service Weaver</p></li><li><p class="paragraph" style="text-align:left;">What are modular monoliths and do they make sense for your architecture?</p></li><li><p class="paragraph" style="text-align:left;">Banking in uncertain times</p></li><li><p class="paragraph" style="text-align:left;">The new era of design</p></li></ul><h3 class="heading" style="text-align:left;">Let&#39;s start off this week by talking about Modular Monoliths and Google&#39;s Service Weaver</h3><p class="paragraph" style="text-align:left;">Before we dive into the depths of Service Weaver, let&#39;s first take a moment to understand what modular monoliths are and why they&#39;re gaining popularity among engineers.</p><p class="paragraph" style="text-align:left;">A modular monolith is a software architecture pattern that combines the simplicity of a monolithic application with the flexibility of microservices. This hybrid creature is achieved by organizing the code into separate, well-defined modules, each focusing on a specific domain or functionality. As a result, you get the development velocity of a monolith, with the scalability and fault-tolerance of microservices when deploying.</p><h3 class="heading" style="text-align:left;">Google&#39;s Service Weaver: Conjuring Modular Monolith Magic</h3><p class="paragraph" style="text-align:left;">As an enchanting addition to the modular monolith ecosystem, Google&#39;s Service Weaver casts a spell that sets it apart from its counterparts. This open-source framework, designed for creating single modular binaries and deploying them as microservices, brings a unique blend of features to the table:</p><ul><li><p class="paragraph" style="text-align:left;"><b>Automatic RPC Translation</b>: Service Weaver magically transforms local method calls into cross-machine RPCs during deployment. This sorcery ensures a seamless transition between monolithic development and microservice deployment, without the need for additional networking or serialization code.</p></li><li><p class="paragraph" style="text-align:left;"><b>Flexible Deployment</b>: With a flick of its wand, Service Weaver lets you deploy your application in various environments, from your local machine to cloud platforms like Google Cloud. This adaptability empowers you to test, debug, and deploy effortlessly, without altering the application code.</p></li><li><p class="paragraph" style="text-align:left;"><b>Runtime Topology Decoupling</b>: Service Weaver&#39;s charm lies in separating the development process from runtime considerations, such as microservice splitting, data serialization, and service discovery. This decoupling allows developers to focus exclusively on application logic, accelerating development velocity and performance.</p></li><li><p class="paragraph" style="text-align:left;"><b>In-built Libraries</b>: Service Weaver&#39;s magical toolbox includes logging, metrics, tracing, routing, and testing libraries, making it an all-in-one solution for creating, managing, and deploying distributed applications.</p></li></ul><h3 class="heading" style="text-align:left;">Should we embrace the Modular Monolith Movement? Why It Matters for Developers</h3><p class="paragraph" style="text-align:left;">It&#39;s worth considering why this trend is gaining momentum and what it means for developers like us.</p><p class="paragraph" style="text-align:left;">Modular monoliths offer a compelling alternative to traditional monolithic and microservices architectures. By merging the best of both worlds, they promise a streamlined development experience with flexible deployment capabilities. </p><p class="paragraph" style="text-align:left;">The jury is still out on the impact projects like Service Weaver will have on our architectures moving forward, but with the promise of Increased Development Velocity, Scalability & Flexibility, and easy Maintainability its worth us tracking and experimenting with. </p><h3 class="heading" style="text-align:left;">📖 Learn more here</h3><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into Modular Monoliths and Google’s Service Weaver:</i></p><ul><li><p class="paragraph" style="text-align:left;">Service Weaver Docs by Google / Service Weaver Maintainers (<a class="link" href="https://serviceweaver.dev/docs.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">https://serviceweaver.dev/docs.html</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn more about the basics of Service Weaver and how it works</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Modular Monoliths by Simon Brown (<a class="link" href="https://www.youtube.com/watch?v=5OjqD-ow8GE&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">https://www.youtube.com/watch?v=5OjqD-ow8GE</a>)</p><ul><li><p class="paragraph" style="text-align:left;">A talk that provides insights into the concept of modular monoliths.</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Modular Monolith: A Primer by Kamil Grzybek (<a class="link" href="https://www.kamilgrzybek.com/design/modular-monolith-primer/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">https://www.kamilgrzybek.com/design/modular-monolith-primer/</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Get ready to level up your coding game with Kamil Grzybek&#39;s guide to modular monoliths</p></li></ul></li></ul><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/mrgreen/status/1637385479816396801?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">AI plugin for Photoshop</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.starterstory.com/stories/gun-made?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">This guy makes $180K/year writing about products banned by the big tech</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bitsaboutmoney.com/archive/banking-in-very-uncertain-times/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Banking in very uncertain times</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://finance.yahoo.com/news/sam-bankman-fried-paid-2-195341959.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Sam Bankman-Fried Was Paid $2.2B Mostly From Alameda—Ex-CEO Caroline Ellison Only $6M</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://matt.ck.page/posts/i-used-ai-to-generate-personal-book-summaries-weekend-wrap-77?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">AI to generate personal book summaries</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/elonmusk/status/1636851271612153858?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=achieving-monolith-development-velocity-with-a-microservice-s-availability" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=35f46214-00be-4ab8-91ee-e0016e78b6dd&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Building Resilient and Fault-Tolerant Systems with Chaos Engineering</title>
  <description>Bringing Down the House: How Controlled Failures Can Improve Your System&#39;s Resilience</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/1b0f9070-e1f9-4e1a-a8a4-990bb38eae27/gremlin_pulling_wires_out_of_a_computer_server_2.png" length="686420" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/building-resilient-and-fault-tolerant-systems-with-chaos-engineering</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/building-resilient-and-fault-tolerant-systems-with-chaos-engineering</guid>
  <pubDate>Mon, 13 Mar 2023 10:34:00 +0000</pubDate>
  <atom:published>2023-03-13T10:34:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to the 75 new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">Chaos engineering, the art of breaking things on purpose to make them stronger</p></li><li><p class="paragraph" style="text-align:left;">Resources to dive deeper into chaos engineering</p></li><li><p class="paragraph" style="text-align:left;">Twitter API Plan Costs $2.5M/Year</p></li><li><p class="paragraph" style="text-align:left;">GPT-4 in March</p></li><li><p class="paragraph" style="text-align:left;">How does a bank collapse in 48 hours?</p></li></ul><h3 class="heading" style="text-align:left;">👹 <b>Let&#39;s start off this week by talking about Chaos Engineering</b></h3><p class="paragraph" style="text-align:left;">Let&#39;s face it, in the world of software development, things break. And they break all the time. But what if instead of fearing those failures, we embrace them? That&#39;s where chaos engineering comes in. By proactively introducing controlled failures into your systems, you can identify weaknesses and fix them before they become a problem for your users.</p><p class="paragraph" style="text-align:left;">Now, we get it, let&#39;s address the elephant in the room - yes, we know chaos engineering sounds a bit scary. But trust us, it&#39;s not as intimidating as it sounds. In fact, it can be quite fun! Here are some of the things you can do with chaos engineering:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Simulate a sudden increase in traffic to your application to see how it handles the load.</p></li><li><p class="paragraph" style="text-align:left;">Introduce latency to your service calls to see how your application behaves under slow network conditions.</p></li><li><p class="paragraph" style="text-align:left;">Inject errors into your database to see how your application handles the exceptions.</p></li><li><p class="paragraph" style="text-align:left;">Randomly kill instances in your auto-scaling group to test the resiliency of your infrastructure.</p></li><li><p class="paragraph" style="text-align:left;">Corrupt data in your message queues to see how your application reacts to unexpected data.</p></li></ol><p class="paragraph" style="text-align:left;">But as with any experimental practice, there are certain best practices to keep in mind to ensure you get the most out of your Chaos Engineering efforts. Here are some key guidelines to follow when incorporating Chaos Engineering into your system testing process:</p><ol start="1"><li><p class="paragraph" style="text-align:left;">Start small: Begin with small experiments to identify weaknesses in your system. This will help you learn how to manage risk and build confidence in your approach.</p></li><li><p class="paragraph" style="text-align:left;">Plan your experiments: Identify your goals and objectives and design your experiments accordingly. Make sure to document your plans and communicate them to your team.</p></li><li><p class="paragraph" style="text-align:left;">Involve your team: Chaos engineering is a team sport. Involve everyone from developers to operators to ensure a comprehensive approach.</p></li><li><p class="paragraph" style="text-align:left;">Use real-world scenarios: Replicating real-world scenarios is critical to ensuring the effectiveness of your chaos engineering experiments. Use historical data or industry benchmarks to inform your experiments.</p></li><li><p class="paragraph" style="text-align:left;">Automate where possible: Automate as much of your chaos engineering process as possible, including testing, monitoring, and response. This will help you to scale and repeat experiments with minimal effort.</p></li><li><p class="paragraph" style="text-align:left;">Monitor and measure: Keep track of your experiments and measure the results. This will help you to identify trends and ensure that your system is improving over time.</p></li><li><p class="paragraph" style="text-align:left;">Continuously improve: Chaos engineering is not a one-time exercise. Regularly review and adjust your experiments to ensure that they remain relevant and effective.</p></li></ol><h3 class="heading" style="text-align:left;">📖 Learn more here</h3><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into Chaos Engineering</i></p><ul><li><p class="paragraph" style="text-align:left;">Principles of Chaos Engineering by Kolton Andrus and Casey Rosenthal (<a class="link" href="https://principlesofchaos.org/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">https://principlesofchaos.org/</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn more about the basics of chaos engineering</p></li></ul></li><li><p class="paragraph" style="text-align:left;">Chaos Engineering on a Budget by Heather Nakama (<a class="link" href="https://www.infoq.com/presentations/chaos-engineering-budget/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">https://www.infoq.com/presentations/chaos-engineering-budget/</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Learn how to start experimenting with chaos engineering without breaking the bank.</p></li></ul></li><li><p class="paragraph" style="text-align:left;">The Gremlin Blog by the Gremlin Team (<a class="link" href="https://www.gremlin.com/blog/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">https://www.gremlin.com/blog/</a>)</p><ul><li><p class="paragraph" style="text-align:left;">Great resources on how to introduce chaos engineering into your organization</p></li></ul></li></ul><h2 class="heading" style="text-align:left;">🔗Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.vultr.com/news/new-free-tier-plan/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Start Building with the New Free Plan for Vultr Cloud Compute</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.searchenginejournal.com/gpt-4-is-multimodal/481993/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">OpenAI GPT-4 Arriving Mid-March 2023</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://detailed.com/google-control/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">How 16 Companies are Dominating the World&#39;s Google Search Results</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.garbageday.email/p/an-infinite-amount-of-monkeys-at?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Spotify’s new app design is a copy of TikTok’s feed </a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.cnn.com/2023/03/11/business/svb-bank-collapse-explainer-timeline/index.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">How does a bank collapse in 48 hours? A timeline of the SVB fall</a></p></li></ul><h2 class="heading" style="text-align:left;">😂 Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/levelsio/status/1632793555503837184?s=20&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a></i></span>) (<span style="text-decoration:underline;"><i><a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a></i></span>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p><h3 class="heading" style="text-align:left;">Did you enjoy reading this week&#39;s Bug Driven Development?</h3><ul><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=3acff969-770d-48ef-9904-b66d7feb78aa&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Yes</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=a2c232f2-10e3-425f-8f23-e361b8e3c945&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">Meh</a></i></span></p></li><li><p class="paragraph" style="text-align:left;"><span style="text-decoration:underline;"><i><a class="link" href="https://bugdrivendevelopment.beehiiv.com/polls/8e48427c-dd62-4492-9919-f47db6776964/response?pcid=4e42960b-3c2b-406f-9a9f-b2dc400d6090&ppid=f7624027-3890-4466-9580-917fe8a2dd03&sid=SUBSCRIBER_ID&utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=building-resilient-and-fault-tolerant-systems-with-chaos-engineering" target="_blank" rel="noopener noreferrer nofollow">No</a></i></span></p></li></ul></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=6c52bde4-157f-49bf-b9e7-c193c878dc76&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>5 Ways AI Can Help You Efficiently Document Your Software</title>
  <description>AI to the Rescue: Automating the Most Hated Task in Software Development</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/7558ed37-9981-4ad7-952e-7675a225e729/robot_writing_docs_1.png" length="790432" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/5-ways-ai-can-help-you-efficiently-document-your-software</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/5-ways-ai-can-help-you-efficiently-document-your-software</guid>
  <pubDate>Sun, 05 Mar 2023 15:00:00 +0000</pubDate>
  <atom:published>2023-03-05T15:00:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Welcome to 187 new Bug Driven Developers this week! If you enjoy this post, forward it to your developer friends so they can join us.</p><p class="paragraph" style="text-align:left;">Here’s what we got for you today:</p><ul><li><p class="paragraph" style="text-align:left;">5 Ways AI Can Help You Efficiently Document Your Software</p></li><li><p class="paragraph" style="text-align:left;">Resources to dive deeper into the art of Software Documentation</p></li><li><p class="paragraph" style="text-align:left;">YouTube CEO is stepping down</p></li><li><p class="paragraph" style="text-align:left;">Agile Coach Mocks Prioritizing Efficiency over Effectiveness</p></li><li><p class="paragraph" style="text-align:left;">The startup rollercoaster</p></li></ul><h3 class="heading" style="text-align:left;"><b>Let&#39;s start off this week by talking about Software Documentation</b></h3><div class="blockquote"><blockquote class="blockquote__quote"></blockquote></div><p class="paragraph" style="text-align:left;">Are you tired of the same old boring software documentation? Good news - you can now use AI to make it more engaging, efficient, and fun. That&#39;s right, I&#39;m not just here to answer your coding questions, I&#39;m also here to help you document your code with style and flair. Here are five ways to use AI to level up your software documentation game:</p><p class="paragraph" style="text-align:left;">1. Tell me your use case: Instead of sifting through endless API docs, just tell me what you&#39;re trying to build and I&#39;ll pull out the most important bits of information for you. Plus, I&#39;ll even give you a code snippet to get you started.</p><p class="paragraph" style="text-align:left;">2. Add some personality: Who says documentation has to be dull? With my help, you can inject some humor and personality into your docs, making them more engaging and enjoyable to read. Your users will thank you.</p><p class="paragraph" style="text-align:left;">3. Test plans made easy: Testing your software is essential, but creating test plans can be a real pain. That&#39;s where I come in - just give me access to your software requirements and I&#39;ll create a test plan tailored to your use cases. It&#39;s that easy.</p><p class="paragraph" style="text-align:left;">4. API docs on demand: No more struggling to generate documentation for your API endpoints. Just copy your code into ChatGPT and ask me to generate an OpenAPI spec. Voila! Instant API documentation that&#39;s clear, concise, and easy to use.</p><p class="paragraph" style="text-align:left;">5. Configuration files made simple: Configurations can be tricky to understand, but I can help. Just copy your configuration file into ChatGPT and ask me to create a document about what each configuration does. I&#39;ll make sure it&#39;s easy to read and understand, so you can get back to coding in no time.</p><p class="paragraph" style="text-align:left;">In conclusion, using AI for software documentation is a game-changer. It saves you time, makes your documentation more engaging and fun, and helps ensure your users have the best experience possible. So why not give it a try? Your documentation (and your users) will thank you.</p><h3 class="heading" style="text-align:left;">Learn more here </h3><p class="paragraph" style="text-align:left;"><i>Here are some guides we like that can be helpful to dive deeper into the art of Software Documentation:</i></p><ul><li><p class="paragraph" style="text-align:left;"><b>The Ultimate Guide To Software Architecture Documentation</b> by <a class="link" href="https://twitter.com/_patrickroos?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Patrick Roos</a>: [<a class="link" href="https://www.workingsoftware.dev/software-architecture-documentation-the-ultimate-guide/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">https://www.workingsoftware.dev/software-architecture-documentation-the-ultimate-guide/</a>]</p><ul><li><p class="paragraph" style="text-align:left;">If you&#39;ve ever wondered how to structure, visualize, and manage your software architecture documentation, fear not - Patrick Roos has got you covered in this comprehensive guide. Don&#39;t worry, you won&#39;t need a PhD in architecture to understand it.</p></li></ul></li><li><p class="paragraph" style="text-align:left;"><b>The Eight Rules Of Good Documentation</b> by Adam Scott: [<a class="link" href="https://www.oreilly.com/content/the-eight-rules-of-good-documentation/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">https://www.oreilly.com/content/the-eight-rules-of-good-documentation/</a>]</p><ul><li><p class="paragraph" style="text-align:left;">Don&#39;t let your documentation be the equivalent of a cryptic ancient scroll. Follow these 8 rules to make your project&#39;s documentation inviting, comprehensive, and skimmable.</p></li></ul></li></ul><h2 class="heading" style="text-align:left;">Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://depot.dev/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Fast Docker builds in the cloud</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://twitter.com/tanayj/status/1626767078328877058 " target="_blank" rel="noopener noreferrer nofollow">Interesting how much Stripe and Adyen diverge in terms of profitability and opex</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bloomberg.com/news/articles/2023-02-22/apple-watch-blood-glucose-monitor-could-revolutionize-diabetes-care-aapl?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Apple Makes Major Progress on No-Prick Blood Glucose Tracking for Its Watch</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.vox.com/recode/2023/2/16/23602636/youtube-ceo-susan-wojcicki-leaving-neal-mohan?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">YouTube CEO Susan Wojcicki is stepping down </a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://www.bigtechnology.com/p/wacky-unhinged-bing-chatbot-is-still?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Wacky, Unhinged Bing Chatbot Is Still Good For Microsoft’s Business</a></p></li><li><p class="paragraph" style="text-align:left;"><a class="link" href="https://thenewstack.io/agile-coach-mocks-putting-efficiency-over-effectiveness/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Agile Coach Mocks Prioritizing Efficiency over Effectiveness</a></p></li></ul><h2 class="heading" style="text-align:left;">Meme of the Week</h2><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/dagorenouf/status/1630966698697187328?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;">Thanks for tuning in to this week’s newsletter! If you have any questions, feel free to let us know on Twitter (<a class="link" href="https://twitter.com/justin_trugman?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Justin&#39;s Twitter</a>) (<a class="link" href="https://twitter.com/danest?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=5-ways-ai-can-help-you-efficiently-document-your-software" target="_blank" rel="noopener noreferrer nofollow">Kevin&#39;s Twitter</a>)</p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=61cfc9c9-5220-403c-a4ac-8aa4c7c9c1b5&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

      <item>
  <title>Is Your API Game Stuck in the Past? Here&#39;s How to Embrace the Future</title>
  <description>Learn to avoid creating an API that&#39;s as confusing as your ex&#39;s Facebook relationship status</description>
      <enclosure url="https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/asset/file/81ed79a1-8f59-42d5-9a3f-a17179d03553/JustinT_a_sad_a_depressed_nerdy_bunny_sitting_on_a_chair.png" length="182049" type="image/png"/>
  <link>https://www.bugdrivendevelopment.com/p/is-your-api-game-stuck-in-the-past</link>
  <guid isPermaLink="true">https://www.bugdrivendevelopment.com/p/is-your-api-game-stuck-in-the-past</guid>
  <pubDate>Sat, 25 Feb 2023 16:00:00 +0000</pubDate>
  <atom:published>2023-02-25T16:00:00Z</atom:published>
    <dc:creator>Justin Trugman</dc:creator>
  <content:encoded><![CDATA[
    <div class='beehiiv'><style>
  .bh__table, .bh__table_header, .bh__table_cell { border: 1px solid #C0C0C0; }
  .bh__table_cell { padding: 5px; background-color: #FFFFFF; }
  .bh__table_cell p { color: #2D2D2D; font-family: 'Helvetica',Arial,sans-serif !important; overflow-wrap: break-word; }
  .bh__table_header { padding: 5px; background-color:#F1F1F1; }
  .bh__table_header p { color: #2A2A2A; font-family:'Trebuchet MS','Lucida Grande',Tahoma,sans-serif !important; overflow-wrap: break-word; }
</style><div class='beehiiv__body'><p class="paragraph" style="text-align:left;">Hey, it&#39;s Justin & Kevin - Welcome to <b>Bug Driven Development</b>’s first issue!</p><p class="paragraph" style="text-align:left;">Are you tired of the same old RESTful APIs? It&#39;s time to embrace the dark side of API development with RPC and GraphQL.</p><p class="paragraph" style="text-align:left;">Remote Procedure Call (RPC) is like the cool uncle that always shows up with a six-pack and a bag of chips. RPC is a protocol that allows a client to call a method on a remote server over a network. It&#39;s fast, lightweight, and easy to work with - like your uncle who never takes life too seriously. But beware, RPC can be a bit limiting in its capabilities, especially when it comes to more complex data structures or situations that require more advanced functionality.</p><p class="paragraph" style="text-align:left;">On the other hand, GraphQL is like the bartender that can make you any drink you want - as long as you know what you&#39;re asking for. GraphQL is a query language for APIs that allows clients to specify exactly what data they need and how it should be structured. Plus, with the ability to stitch together multiple APIs, you can create a unified data layer that&#39;s tailored to your specific use case. </p><p class="paragraph" style="text-align:left;">Of course, with great power comes great responsibility - or, in this case, some potential pitfalls to watch out for. With GraphQL, it&#39;s important to be mindful of performance and caching, as well as potential security concerns. Additionally, due to the flexibility of the query language, it&#39;s important to ensure that the API schema is designed in a way that promotes safe and efficient queries.</p><p class="paragraph" style="text-align:left;">So, if you&#39;re ready to embrace the dark side of API development, give RPC and GraphQL a try. Just don&#39;t forget to choose the right tool for the job - like picking the right drink for the right occasion. Choose wisely, and you&#39;ll be rewarded with powerful, flexible APIs that can help take your applications to the next level. (Or, you know, just impress your friends at the next office happy hour. We&#39;re not saying that&#39;s not important.)</p><h2 class="heading" style="text-align:left;">Learn more here </h2><p class="paragraph" style="text-align:left;"><i>Here are some guides that could be helpful to dive deeper into APIs</i></p><ol start="1"><li><p class="paragraph" style="text-align:left;"><b>Best Practices for Designing a Pragmatic RESTful API</b> by Vinay Sahni: [<a class="link" href="https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api</a>] </p><ol start="1"><li><p class="paragraph" style="text-align:left;">Want to create a RESTful API that won&#39;t make developers want to pull their hair out? Check out this article by Vinay Sahni.</p></li></ol></li><li><p class="paragraph" style="text-align:left;"><b>An Introduction to GraphQL</b> by Tania Rascia: [<a class="link" href="https://www.taniarascia.com/introduction-to-graphql/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://www.taniarascia.com/introduction-to-graphql/</a>] </p><ol start="1"><li><p class="paragraph" style="text-align:left;">Need to make APIs faster than The Flash? Check out Tania Rascia&#39;s tutorial on using GraphQL.</p></li></ol></li><li><p class="paragraph" style="text-align:left;"><b>gRPC - Best Practices</b> by Manuel: [<a class="link" href="https://kreya.app/blog/grpc-best-practices/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://kreya.app/blog/grpc-best-practices/</a>] </p><ol start="1"><li><p class="paragraph" style="text-align:left;">Don&#39;t let RPC&#39;s quirks get you down. Check out Manuel&#39;s best practices for mastering gRPC.</p></li></ol></li></ol><h2 class="heading" style="text-align:left;">Links in Tech</h2><p class="paragraph" style="text-align:left;"><i>Some additional reads we liked this week</i></p><ul><li><p class="paragraph" style="text-align:left;">Software is a hell of a drug - doing more with less (<a class="link" href="https://twitter.com/gregisenberg/status/1628016701991182336?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://twitter.com/gregisenberg/status/1628016701991182336</a>)</p></li><li><p class="paragraph" style="text-align:left;">See how well you age by transforming your face using 100% free and privacy-friendly AI. (<a class="link" href="https://extrapolate.app/?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://extrapolate.app/</a>)</p></li><li><p class="paragraph" style="text-align:left;">How <a class="link" href="http://Levels.fyi?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">Levels.fyi</a> scaled to millions of users with Google Sheets as a backend (<a class="link" href="https://www.levels.fyi/blog/scaling-to-millions-with-google-sheets.html?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future" target="_blank" rel="noopener noreferrer nofollow">https://www.levels.fyi/blog/scaling-to-millions-with-google-sheets.html</a>)</p></li></ul><h2 class="heading" style="text-align:left;">Meme of the Week</h2><p class="paragraph" style="text-align:left;"><i>Your weekly does of developer meme goodness</i></p><blockquote align="center" class="twitter-tweet"><a href="https://twitter.com/Soft_Junk/status/1627383649325961216?utm_source=www.bugdrivendevelopment.com&utm_medium=newsletter&utm_campaign=is-your-api-game-stuck-in-the-past-here-s-how-to-embrace-the-future"><p> Twitter tweet </p></a></blockquote><p class="paragraph" style="text-align:left;"><br>Thanks for tuning in to this week’s newsletter! Let us know your thoughts about it! </p><p class="paragraph" style="text-align:left;">Did you enjoy this week’s newsletter? </p><p class="paragraph" style="text-align:left;">Thanks,</p><p class="paragraph" style="text-align:left;">Justin + Kevin</p><p class="paragraph" style="text-align:left;">P.S. What new things about Software Development did you learn this week?</p></div><div class='beehiiv__footer'><br class='beehiiv__footer__break'><hr class='beehiiv__footer__line'><a target="_blank" class="beehiiv__footer_link" style="text-align: center;" href="https://www.beehiiv.com/?utm_campaign=c406d00f-debc-4dfa-8992-82a2b14fe345&utm_medium=post_rss&utm_source=bug_driven_development">Powered by beehiiv</a></div></div>
  ]]></content:encoded>
</item>

  </channel>
</rss>
