<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ research - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ research - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 27 May 2026 16:21:26 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/research/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Stop Staring at a Blank Deck: How I Use Claude Code + Marp to Think Through Presentations ]]>
                </title>
                <description>
                    <![CDATA[ The hard part of building a presentation is figuring out the story. What are you trying to say? What’s the structure? Which sections build on which? Where does the data go, table or bullets? Before th ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-use-claude-code-and-marp-to-think-through-presentations/</link>
                <guid isPermaLink="false">69bc3429b238fd45a3206764</guid>
                
                    <category>
                        <![CDATA[ writing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AI ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ claude-code ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Omer Rosenbaum ]]>
                </dc:creator>
                <pubDate>Thu, 19 Mar 2026 17:36:41 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/fcbd044d-0add-467c-a9b0-d068584a8197.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The hard part of building a presentation is figuring out the <em>story</em>. What are you trying to say? What’s the structure? Which sections build on which? Where does the data go, table or bullets? Before the comparison or after?</p>
<p>What <em>would</em> help is having something to <strong>react to</strong>. Starting from zero is hard. Reacting to a draft is fast. “Move this before that” is way easier than “what should I say?”</p>
<p>That’s the workflow I want to show you. I use Claude Code + Marp to think through presentations. Claude helps me brainstorm the story, gives me a first draft to react to, and then I iterate, either through “conversation” or by editing the Markdown directly. The whole thing is a text file. 🎉</p>
<p>(I used a deck to think through this post. You can find it <a href="https://omerr.github.io/claude-skills/presentations/claude-code-marp/">here</a>.)</p>
<h3 id="heading-well-cover">We'll cover:</h3>
<ol>
<li><p><a href="#heading-the-workflow">The Workflow</a></p>
<ul>
<li><p><a href="#heading-brainstorm">Brainstorm</a></p>
</li>
<li><p><a href="#heading-react">React</a></p>
</li>
<li><p><a href="#heading-iterate">Iterate</a></p>
</li>
<li><p><a href="#heading-export">Export</a></p>
</li>
<li><p><a href="#heading-editable-pptx">Editable PPTX</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-get-started-in-5-minutes">Get Started in 5 Minutes</a></p>
<ul>
<li><p><a href="#heading-1-install-marp-cli">1. Install Marp CLI</a></p>
</li>
<li><p><a href="#heading-2-install-the-skill-via-skillssh">2. Install the skill (via skills.sh)</a></p>
</li>
<li><p><a href="#heading-run-it">Run it</a></p>
</li>
<li><p><a href="#heading-iterate">Iterate</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-use-case-this-very-article">Use Case: This Very Article</a></p>
</li>
<li><p><a href="#heading-under-the-hood">Under the Hood</a></p>
<ul>
<li><p><a href="#heading-marp-markdown-to-slides">Marp: Markdown to Slides</a></p>
</li>
<li><p><a href="#heading-the-skill-file">The Skill File</a></p>
</li>
<li><p><a href="#heading-section-dividers">Section Dividers</a></p>
</li>
<li><p><a href="#heading-breadcrumb-navigation">Breadcrumb Navigation</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-wrapping-up">Wrapping Up</a></p>
</li>
</ol>
<h2 id="heading-the-workflow">The Workflow</h2>
<p>The process has four stages: <strong>Brainstorm</strong>, <strong>React</strong>, <strong>Iterate</strong>, <strong>Export</strong>. Let me walk through each one.</p>
<h3 id="heading-brainstorm">Brainstorm</h3>
<p>You kick things off with a slash command (I will provide you with this command later):</p>
<pre><code class="language-plaintext">/create-marp-deck API rate limiting
</code></pre>
<p>Claude starts by interviewing you, asks about the goal, audience, key points, any data you want to include. This partforces you to articulate the story before a single slide exists.</p>
<img src="https://cdn-images-1.medium.com/max/1200/0*HHy7-RCRF_oS8WeU.png" alt="Claude Code interviewing the user about their presentation — asking about the goal, audience, and key&nbsp;sections" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<pre><code class="language-plaintext">~/projects/my-app $ claude
&gt; /create-marp-deck API rate limiting
─────────────────────────────────────────────

Claude: What's this presentation about? What should the audience
        walk away knowing?

User:   How our rate limiting works, which algorithm we chose and
        why, and what they need to know to configure it for their
        services.

Claude: Who's the audience?

User:   Platform engineering team — they know our stack but haven't
        seen the rate limiting internals.

Claude: What are the key points or sections you want to cover?

User:   1. Why we need rate limiting (the incident last month)
        2. Token bucket vs sliding window — our decision
        3. How to configure it per-service
        4. Monitoring dashboard walkthrough
</code></pre>
<p>Think of it as a lightweight brainstorm: you talk through what you’re trying to say, and Claude helps you structure it.</p>
<h3 id="heading-react">React</h3>
<p>Once you’ve aligned on the structure, Claude generates the full Marp Markdown file and exports it. You get a solid first draft you can <em>react to</em> and reshape.</p>
<img src="https://cdn-images-1.medium.com/max/1200/0*pFj4D2py1ATg816C.png" alt="Title slide with dark gradient background showing “API Rate Limiting — A Technical Deep&nbsp;Dive”" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>That title slide came from this Markdown:</p>
<pre><code class="language-plaintext">&lt;!-- _class: lead title-slide --&gt;
</code></pre>
<pre><code class="language-plaintext"># API Rate Limiting
## A Technical Deep Dive
</code></pre>
<pre><code class="language-plaintext">**Team**: Platform Engineering
**Date**: February 2026
</code></pre>
<p>Is it perfect? Probably not. But now you have something concrete, with sections, structure, and a story, that you can push around. That’s so much faster than starting from a blank canvas.</p>
<p>When you go through the slides, you <em>feel</em> if the story is coherent and clear.</p>
<h3 id="heading-iterate">Iterate</h3>
<p>While reviewing the draft, it'll inevitably spark ideas: “oh, I should add a comparison table here,” “this section is too dense, maybe split it into two,” “move this summary up to the top.”</p>
<p>One way to make such edits is to ask Claude Code to do that:</p>
<pre><code class="language-plaintext">"Slide 6 is too dense. Split the algorithm comparison into
two slides, one for token bucket, one for sliding window."
</code></pre>
<img src="https://cdn-images-1.medium.com/max/1200/0*dVWLJ1hecPviej4D.png" alt="Claude Code splitting a slide and adding a callout, with file&nbsp;diffs" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<pre><code class="language-plaintext">&gt; Slide 6 is too dense. Split the algorithm comparison into two
  slides — one for token bucket, one for sliding window.

Claude: I'll split slide 6 into two separate slides, one per algorithm.

  Edit presentations/api-rate-limiting.md
  ───────────────────────────────────────
  - # Algorithm Comparison
  - | Feature | Token Bucket | Sliding Window |
  + # Token Bucket
  + Tokens refill at a steady rate...
  + ---
  + # Sliding Window
  + Track exact timestamp of every request...

&gt; Add a "Why we chose token bucket" callout to that first slide

Claude: Added a blockquote callout explaining the decision.

  Edit presentations/api-rate-limiting.md
  ───────────────────────────────────────
  + &gt; We chose token bucket because it handles bursty traffic
  + &gt; from our mobile clients without penalizing steady callers
</code></pre>
<p>You can also edit in <strong>VS Code</strong> with the Marp extension for live preview. Open the&nbsp;<code>.md</code> file, hit <code>Ctrl+Shift+V</code>, and you get the source on the left with rendered slides on the right. Claude Code edits the file, VS Code detects the change, and the preview updates automatically. (I keep both open side by side and it just works.)</p>
<img src="https://cdn-images-1.medium.com/max/1200/0*88zY1J4xzeo1vUWS.png" alt="Me editing the deck that I created to help me think through this&nbsp;article" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<h3 id="heading-export">Export</h3>
<p>When you’re done, you get three files:</p>
<ul>
<li><p><code>.md</code> – the source (version-controlled, diffable)</p>
</li>
<li><p><code>.html</code> – open in any browser, share via Slack</p>
</li>
<li><p><code>.pptx</code> – open in PowerPoint, present anywhere</p>
</li>
</ul>
<pre><code class="language-bash">$ marp --no-stdin deck.md -o deck.html
[  INFO ] Converting 1 markdown...
[  INFO ] deck.md =&gt; deck.html

$ marp --no-stdin --pptx deck.md -o deck.pptx
[  INFO ] Converting 1 markdown...
[  INFO ] deck.md =&gt; deck.pptx

$ ls presentations/
api-rate-limiting.md
api-rate-limiting.html   ✓ open in browser, share via Slack
api-rate-limiting.pptx   ✓ open in PowerPoint, present anywhere
</code></pre>
<img src="https://cdn-images-1.medium.com/max/1200/0*XsnHZELJ9w3vovOz.png" alt="marp CLI exporting to HTML and&nbsp;PPTX" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>The skill runs the export commands automatically after generating the deck. A 15-slide deck converts in about 2 seconds.</p>
<h4 id="heading-editable-pptx">Editable PPTX</h4>
<p>The standard PPTX export renders each slide as an image  –  pixel-perfect, but you can’t edit the text in PowerPoint or Google Slides. If you need editable text, Marp has a <code>--pptx-editable</code> flag that uses LibreOffice under the hood to produce real text boxes.</p>
<p>The catch: LibreOffice creates text boxes that are too narrow, so text wraps and overlaps. The skill includes a python-pptx post-processing script that automatically widens the text boxes to fix this. Just ask for “editable PPTX” and the skill handles the rest  –  the LibreOffice conversion, the text box fix, everything.</p>
<h2 id="heading-get-started-in-5-minutes">Get Started in 5&nbsp;Minutes</h2>
<p>OK, are you ready? Here’s everything you need:</p>
<h3 id="heading-1-install-marp-cli">1. Install Marp CLI:</h3>
<ul>
<li><code>npm install -g @marp-team/marp-cli</code></li>
</ul>
<h3 id="heading-2-install-the-skill-via-skillssh">2. Install the skill (via <a href="http://skills.sh">skills.sh</a>):</h3>
<ul>
<li><code>npx skills add Omerr/claude-skills</code></li>
</ul>
<p>This works with Claude Code, Cursor, GitHub Copilot, and other AI agents. You can also install manually  ( see the <a href="https://github.com/Omerr/claude-skills">repo</a> for details).</p>
<h3 id="heading-3-run-it">3. Run it:</h3>
<ul>
<li><code>/create-marp-deck your topic here</code></li>
</ul>
<h3 id="heading-4-iterate">4. Iterate:</h3>
<p>React to the draft, refine through conversation or VS Code, and export.</p>
<p>That’s it. Four steps. Fork the repo and customize the conventions to match your style.</p>
<h2 id="heading-use-case-this-very-article">Use Case: This Very&nbsp;Article</h2>
<p>Want to see this workflow in practice? You’re looking at it.</p>
<p>I wrote this article by first creating a slide deck using exactly the process I described above. I ran <code>/create-marp-deck</code>, answered the interview questions, got a first draft, and iterated until the story felt right. You can <a href="https://omerr.github.io/claude-skills/presentations/claude-code-marp/">see the deck here</a>.</p>
<p>Why start with slides? Because a deck forces you to be concise and to go through the <em>story</em>. If the story doesn’t flow across 15 slides, it won’t flow across 1,500 words either. The deck became my outline, and once I had a coherent structure there, writing the article was much easier.</p>
<p>So if you’re ever staring at a blank doc thinking “I should write a blog post about X,” try making a deck first. You might be surprised how much faster the writing goes when the story is already figured out. 😎</p>
<h2 id="heading-under-the-hood">Under the&nbsp;Hood</h2>
<p>If you’re curious about what makes this work, read on. If not, you’re all set. 🙌🏻</p>
<h3 id="heading-marp-markdown-to-slides">Marp: Markdown to&nbsp;Slides</h3>
<p><a href="https://marp.app/"><strong>Marp</strong></a> (Markdown Presentation Ecosystem) converts&nbsp;<code>.md</code> files into slides. Your deck starts with frontmatter:</p>
<pre><code class="language-plaintext">---
marp: true
theme: default
paginate: true
size: 16:9
---
</code></pre>
<p>Four lines and you have widescreen, paginated slides. Slide breaks are just <code>---</code> in the Markdown. Your presentation is a text file: version-controlled, diffable, and AI-editable.</p>
<h3 id="heading-the-skill-file">The Skill&nbsp;File</h3>
<p>You <em>could</em> just ask Claude Code to “make me a Marp presentation” every time. But you’d spend half the conversation explaining your preferred format, color palette, and slide structure.</p>
<p>Instead, I created a <strong>Claude Code skill</strong> (see it <a href="https://github.com/Omerr/claude-skills.git">here</a>), a reusable set of instructions that Claude follows whenever you invoke it. It has two parts:</p>
<ol>
<li><p>An <strong>interview phase</strong> that gathers context before generating anything (the 5 questions from the brainstorm step)</p>
</li>
<li><p>A <strong>generation phase</strong> with the full Marp conventions: CSS palette, slide structure, breadcrumb pattern, formatting rules, and export commands</p>
</li>
</ol>
<p>The full skill is about 200 lines. That sounds like a lot, but you write it once and then every deck you create follows the same polished conventions automatically.</p>
<h3 id="heading-section-dividers">Section Dividers</h3>
<p>Each section of the deck gets its own gradient background. So when you’re presenting, the audience intuitively knows when you’ve moved to a new topic:</p>
<img src="https://cdn-images-1.medium.com/max/1200/0*SDRNCJnSw3BDwXUG.png" alt="Section divider slide with blue gradient showing “Part 1: The&nbsp;Problem”" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>Applied via CSS classes in the skill:</p>
<pre><code class="language-plaintext">&lt;!-- _class: lead part-problem --&gt;
# Part 1: The Problem
</code></pre>
<h3 id="heading-breadcrumb-navigation">Breadcrumb Navigation</h3>
<p>This is my favorite part of the whole setup.</p>
<p>Every content slide has a breadcrumb header at the top that shows where you are in the deck:</p>
<img src="https://cdn-images-1.medium.com/max/1200/0*PaPBdx60ZYJn9G3K.png" alt="Content slide showing breadcrumb “The Problem > Algorithms > Implementation” with the current section highlighted in&nbsp;blue" style="display:block;margin:0 auto" width="600" height="400" loading="lazy">

<p>See that header? “The Problem &gt; <strong>Algorithms</strong> &gt; Implementation”, with “Algorithms” highlighted in blue.</p>
<p>In Marp, this is done with a simple HTML comment:</p>
<pre><code class="language-plaintext">&lt;!-- header: "The Problem &gt; **Algorithms** &gt; Implementation" --&gt;
</code></pre>
<p>The <code>**bold**</code> text renders in blue (via CSS <code>header strong { color: #2563eb; }</code>), while the rest stays gray. You set it once per section and it persists until you change it.</p>
<p>How often have you sat through a presentation wondering “wait, where are we?” 🤔</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>The hard part of presentations is telling a coherent story. Get yourself a first draft to react to, iterate until it flows, and export. That’s it.</p>
<p>If you want to try it: <code>npm install -g @marp-team/marp-cli</code>, run <code>npx skills add Omerr/claude-skills</code>, and then <code>/create-marp-deck</code>. You'll have a deck in minutes and a workflow you can reuse for every presentation after that.</p>
<h3 id="heading-about-the-author">About the&nbsp;Author</h3>
<p><a href="https://www.linkedin.com/in/omer-rosenbaum-034a08b9/">Omer Rosenbaum</a> is the author of the <a href="https://youtube.com/@BriefVid">Brief</a> <a href="https://youtube.com/@BriefVid">YouTube Channel</a>. He’s also a cyber training expert and founder of Checkpoint Security Academy. He’s the author of <a href="https://www.freecodecamp.org/news/product-led-research-a-practical-guide-for-randd-leaders-full-book/">Product-Led Research</a>, <a href="https://www.freecodecamp.org/news/gitting-things-done-book/">Gitting Things Done</a> (in English) and <a href="https://data.cyber.org.il/networks/networks.pdf">Computer Networks</a> (in Hebrew). You can find him on <a href="https://twitter.com/Omer_Ros">Twitter</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Product-Led Research: A Practical Guide for R&D Leaders [Full Book] ]]>
                </title>
                <description>
                    <![CDATA[ Your team needs to solve a problem, and there's no clear solution path. Multiple approaches might work, but you're not sure which. Success isn't guaranteed. This is Research, not Development. And if you manage it like Development, things aren't going... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/product-led-research-a-practical-guide-for-randd-leaders-full-book/</link>
                <guid isPermaLink="false">69963f99d35b661838993be2</guid>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ engineering ]]>
                    </category>
                
                    <category>
                        <![CDATA[ development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Omer Rosenbaum ]]>
                </dc:creator>
                <pubDate>Wed, 18 Feb 2026 22:39:21 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769115610494/37ca44ed-763d-42a3-969a-8430f000701e.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Your team needs to solve a problem, and there's no clear solution path. Multiple approaches might work, but you're not sure which. Success isn't guaranteed.</p>
<p>This is Research, not Development. And if you manage it like Development, things aren't going to go well for you.</p>
<p>Maybe you've seen this: A talented engineer spends three weeks trying different approaches, switching between them until the original problem is no longer relevant. Or a researcher declares after two days "it's impossible" and gives up, though later it turns out the problem was actually solvable. Or worse and most frustrating of all: Research succeeds technically but doesn't impact the product, and you realize you've been solving the wrong problem.</p>
<p>Here's the thing: <strong>managing Research is fundamentally different from managing Development.</strong></p>
<p>Development has known solution paths, relatively predictable timelines, and measurable progress. You probably learned to manage Development, and know how to do it well. Managing Development is challenging, yet there are established best practices that are well known in the industry.</p>
<p>But Research? Research is inherently uncertain. The techniques that work for Development fail spectacularly for Research. Most organizations either approach Research by deploying techniques devised for managing Development, or entirely give up on managing Research and treat it as mystical work by brilliant people, where the best you can do is not interrupt.</p>
<p>It doesn't have to be this way.</p>
<h2 id="heading-what-youll-learn">What You'll Learn</h2>
<p>By reading this book, you’ll gain practical tools for managing Research that create real product impact.</p>
<p>You’ll learn your <strong>two critical roles as a Research leader</strong>:</p>
<ol>
<li><p>Ensure Research connects to product impact.</p>
</li>
<li><p>Ensure Research is done effectively.</p>
</li>
</ol>
<p>You’ll understand <em>why</em> Research is different from Development. You’ll get concrete tools for managing Research execution, and learn proven heuristics for ensuring product impact.</p>
<p>Throughout the book, you'll see the mentioned methods applied to real challenges.</p>
<p>You’ll feel <strong>confident</strong> managing Research. You’ll <strong>understand</strong> when to use which tools. And you’ll know how to keep Research connected to product value while managing its inherent uncertainty.</p>
<h2 id="heading-who-is-this-book-for">Who Is This Book For?</h2>
<p>Any engineering leader who manages Research, or has researchers on their team.</p>
<p>If you're a CTO, VP of Engineering, R&amp;D Director, or Engineering Manager responsible for Research initiatives – this book is for you.</p>
<p>This book is for product-focused leaders who need their Research to ship value, not just produce interesting findings.</p>
<p>You’ll also notice that I use a casual style throughout the book. I believe that learning Research management should be insightful and practical. These are hard problems, and writing in an overly academic style wouldn't serve you well. This book is for <em>you</em>, written to help you succeed.</p>
<h2 id="heading-who-am-i">Who Am I?</h2>
<p>This book is about you, and your journey managing Research. But let me tell you why I think I can contribute to that journey.</p>
<p>I am the CTO and co-founder of Swimm.io, a knowledge management platform for code. At Swimm, I've led multiple Research initiatives — from automatically keeping documentation in sync with code changes, to extracting business rules from legacy COBOL systems. We've faced genuine Research challenges where the path to success wasn't clear, where we didn't know if solutions were even possible.</p>
<p>I've managed Research in product environments where "interesting findings" aren't enough — where Research must ship and create measurable value. I've experienced the failure modes firsthand: Research that succeeded technically but didn't impact the product, teams that got stuck exploring endlessly, and the challenge of managing uncertainty while maintaining velocity.</p>
<p>I've also managed teams of researchers — brilliant people who needed guidance not on technical capability, but on connecting their work to product value and working systematically through uncertainty.</p>
<p>This book combines my experience leading product-focused Research with my background in teaching and making complex ideas practical and actionable.</p>
<h2 id="heading-the-approach-of-this-book">The Approach of This Book</h2>
<p>This is not an academic piece on Research methodology. When writing it, I had three principles in mind:</p>
<p><strong>1. Practical</strong>: In this book, you will learn how to accomplish things in Research management. You will understand frameworks not just for the sake of understanding, but with a practical mindset. I sometimes refer to this as the "practicality principle" – which guides me in deciding whether to include certain topics, and to what extent.</p>
<p><strong>2. Based on proven theory</strong>: While practical, the methods are grounded in Alan Schoenfeld's problem-solving research — a framework developed by studying how people actually solve uncertain problems. You'll see how Schoenfeld's components (knowledge, heuristics, control, beliefs) map directly to practical Research management tools.</p>
<p><strong>3. Real examples</strong>: You will see these methods applied to actual Research challenges. Not toy problems, but real initiatives involving complex problems with genuine uncertainty. These examples show the methods in action, including when they're messy, when approaches fail, and how to adapt.</p>
<h2 id="heading-structure-of-this-book">Structure of This Book</h2>
<p>The book is organized in three parts:</p>
<p><strong>Part 1: Foundations</strong>: Read this to understand what makes Research different and why it needs specialized management. This part is short — just enough to establish the framework that organizes everything else.</p>
<p><strong>Part 2: Research Management Methods</strong>: These are tools that work for <em>any</em> Research.</p>
<p><strong>Part 3: Ensuring Product Impact</strong>: Methods specifically for connecting Research to product value.</p>
<h2 id="heading-why-is-this-book-publicly-available">Why Is This Book Publicly Available?</h2>
<p>In short, I'd like this book to get to as many people as possible.</p>
<p>If you would like to support this book, you are welcome to buy <a target="_blank" href="https://buymeacoffee.com/omerr/e/505520">E-Book version</a>, <a target="_blank" href="https://amzn.to/46aCxnO">Paperback</a>, <a target="_blank" href="https://amzn.to/4tD1T7O">Hardc</a><a target="_blank" href="https://amzn.to/46aCxnO">over</a> , or <a target="_blank" href="https://buymeacoffee.com/omerr">buy me a coffee</a>. Thank you!</p>
<h2 id="heading-feedback-is-welcome">Feedback Is Welcome</h2>
<p>I created this book to help you and people like you manage Research effectively and ensure it creates product impact.</p>
<p>From the beginning, I asked for feedback from experienced leaders and researchers to make sure the book achieves these goals. If you found something valuable, felt something was missing, or thought something needed improvement — I would love to hear from you.</p>
<p>Your feedback helps make this book better for everyone. Please reach out at: gitting.things@gmail.com.</p>
<p>Now, let's begin. In Chapter 1, you'll learn exactly what makes Research different from Development, and why managing them differently matters.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<h3 id="heading-part-1-foundations">Part 1: Foundations</h3>
<ol>
<li><p><a class="post-section-overview" href="#heading-chapter-1-what-is-research">Chapter 1 - What is Research?</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-difference">The Difference</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-schoenfelds-framework-for-problem-solving">Schoenfeld's Framework for Problem Solving</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-why-this-matters-for-rampd-leaders">Why This Matters for R&amp;D Leaders</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-notes">Notes</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-references">References</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-2-research-and-development">Chapter 2 - Research and Development</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-defining-research-vs-development">Defining Research vs. Development</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-a-quick-test">A Quick Test</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-key-indicators-youre-doing-research">Key Indicators You're Doing Research</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-common-misconceptions">Common Misconceptions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-your-role-as-research-leader">Your Role as Research Leader</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-part-1-summary">Part 1 - Summary</a></p>
</li>
</ol>
<h3 id="heading-part-2-research-management-methods">Part 2: Research Management Methods</h3>
<ol>
<li><p><a class="post-section-overview" href="#heading-chapter-3-why-methodology-matters-a-true-story">Chapter 3 - Why Methodology Matters: A True Story</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-lesson">The Lesson</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-this-part-covers">What This Part Covers</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-4-the-research-tree">Chapter 4 - The Research Tree</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-a-research-tree">What Is a Research Tree?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-your-first-research-tree">Your First Research Tree</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-power-of-stopping-to-think">The Power of Stopping to Think</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-choosing-your-first-path">Choosing Your First Path</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-if-your-first-choice-doesnt-work">What If Your First Choice Doesn't Work?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-choosing-when-everything-seems-equal">Choosing When Everything Seems Equal</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-heuristics-can-be-combined">Heuristics Can Be Combined</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-answers-lead-to-new-questions">How Answers Lead to New Questions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-complete-picture">The Complete Picture</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-color-coding-status">Color-Coding Status</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-additional-tips">Additional Tips</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-research-tree-prevents-common-pitfalls">The Research Tree Prevents Common Pitfalls</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-time-to-practice">Time to Practice</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-using-the-tree-with-your-team-using-the-tree-with-your-team">Using the Tree with Your Team {#using-the-tree-with-your-team}</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-tools">Tools</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-pro-tips">Pro Tips</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-recap-the-research-tree">Recap - The Research Tree</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations">Chapter 5 - Time-Boxing Research Explorations</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-problem-research-without-time-limits">The Problem: Research Without Time Limits</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-time-boxing-creating-decision-points">Time-Boxing: Creating Decision Points</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-decision-point">The Decision Point</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-example-detecting-god-objects">Example: Detecting God Objects</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-set-time-boxes">How to Set Time Boxes</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-using-time-boxing-with-your-team">Using Time-Boxing with Your Team</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-integration-with-the-research-tree">Integration with the Research Tree</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-recap">Recap</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-part-2-summary">Part 2 Summary</a></p>
</li>
</ol>
<h3 id="heading-part-3-ensuring-product-impact">Part 3: Ensuring Product Impact</h3>
<ol>
<li><p><a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives-how-to-choose-research-initiatives">Chapter 6 - How to Choose Research Initiatives {#how-to-choose-research-initiatives}</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-1-starting-from-a-concrete-problem">1. Starting From a Concrete Problem</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-2-starting-from-a-technological-opportunity">2. Starting From a Technological Opportunity</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-driven-vs-opportunity-driven-a-comparison">Problem-Driven vs. Opportunity-Driven: A Comparison</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-should-you-pursue-a-research-initiative">Should You Pursue a Research Initiative?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-pre-research-checks">Pre-Research Checks</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-choose-research-initiatives-summary">How to Choose Research Initiatives - Summary</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">Chapter 7 - Drawing Backwards</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-spiral-game">The Spiral Game</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-apply-drawing-backwards-to-product-led-research">How to Apply Drawing Backwards to Product-led Research</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-case-study-extracting-business-rules-from-cobol">Case Study: Extracting Business Rules from COBOL</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-why-drawing-backwards-is-so-powerful">Why Drawing Backwards Is So Powerful</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-practical-application-your-research-tree">Practical Application: Your Research Tree</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-summary-drawing-backwards">Summary: Drawing Backwards</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations">Chapter 8 - End-to-End Iterations</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-drawing-backwards-end-to-end-a-combined-approach">Drawing Backwards + End-to-End: A Combined Approach</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-five-principles-of-end-to-end-iterations">The Five Principles of End-to-End Iterations</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-principle-1-outline-the-end-to-end-process">Principle 1: Outline the End-to-End Process</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-principle-2-get-to-end-to-end-by-simplifying">Principle 2: Get to End-to-End by Simplifying</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-principle-3-ship-it-as-fast-as-you-can">Principle 3: Ship It as Fast as You Can</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-principle-4-gradually-replace-steps-while-carefully-prioritizing">Principle 4: Gradually Replace Steps, While Carefully Prioritizing</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-principle-5-get-frequent-feedback-on-results">Principle 5: Get Frequent Feedback on Results</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-integration-with-other-tools">Integration with Other Tools</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-summary-end-to-end-iterations">Summary: End-to-End Iterations</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-part-3-summary">Part 3 Summary</a></p>
</li>
</ol>
<h3 id="heading-book-summary">Book Summary</h3>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-you-learned-about-research">What You Learned About Research</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-do-research-effectively">How to Do Research Effectively</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-ensure-product-impact">How to Ensure Product Impact</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-your-toolkit-for-research-management">Your Toolkit for Research Management</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-my-message-to-you">My Message To You</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-acknowledgements">Acknowledgements</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-contact-me">Contact Me</a></p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-note">Note</h2>
<p>This book is provided for free on freeCodeCamp as described above and according to <a target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</a>.</p>
<p>If you would like to support this book, you are welcome to buy <a target="_blank" href="https://buymeacoffee.com/omerr/e/505520">E-Book version</a>, <a target="_blank" href="https://amzn.to/46aCxnO">Paperback</a>, <a target="_blank" href="https://amzn.to/4tD1T7O">Hardc</a><a target="_blank" href="https://amzn.to/46aCxnO">over</a> , or <a target="_blank" href="https://buymeacoffee.com/omerr">buy me a coffee</a>. Thank you!</p>
<h2 id="heading-part-1-foundations-1">Part 1: Foundations</h2>
<h3 id="heading-chapter-1-what-is-research">Chapter 1 - What is Research?</h3>
<p>To manage research effectively, you first need to understand what research is, and what it is not.</p>
<p>From now on, I will use <em>Research</em> (capital R) when referring to our specific concept of research in this book, to distinguish it from general uses of the word.</p>
<p>Consider this scenario: Your team needs to optimize a critical API endpoint. It's slow, users complain, and you know exactly what to do: profile the code, identify bottlenecks, apply standard optimization techniques. This is challenging work, but it's not Research.</p>
<p>Now consider this: Your team needs to automatically extract business rules from 40-year-old COBOL codebases, consisting of millions of lines of code where the original developers are long retired. You're not even sure if extracting these rules automatically is possible. Multiple approaches might work. Or none might. This is Research.</p>
<h4 id="heading-the-difference">The Difference</h4>
<p>The distinction isn't about difficulty or technical sophistication. It's about <strong>uncertainty of approach</strong>.</p>
<p>Throughout this book, I will adopt the following definition: Research is confronting problems where you don't know if solutions exist or which approaches will work.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768912012166/8621e6a4-796a-4974-9d09-d572ff44f870.png" alt="Research definition" width="600" height="400" loading="lazy"></p>
<p><strong>Research</strong> confronts problems where:</p>
<ul>
<li><p>You don't know if a solution exists.</p>
</li>
<li><p>Multiple approaches might work, but you don't know which.</p>
</li>
<li><p>The path to success is not immediately clear.</p>
</li>
<li><p>You may need to invent new techniques.</p>
</li>
</ul>
<p><strong>Development</strong> involves:</p>
<ul>
<li><p>Applying known techniques to build specific features.</p>
</li>
<li><p>Following established approaches, even if complex.</p>
</li>
<li><p>Clear success criteria tied to working software.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768912033086/a93cea78-c671-4ab4-9d08-3767d60b9865.png" alt="Research vs Development" width="600" height="400" loading="lazy"></p>
<p>I've found Alan Schoenfeld's model of problem solving [1] to be a useful framework for defining and analyzing research. Schoenfeld, studying how people solve mathematical problems, identified four** components that determine success when facing genuinely uncertain problems. His framework applies directly to software Research:</p>
<h4 id="heading-schoenfelds-framework-for-problem-solving">Schoenfeld's Framework for Problem Solving</h4>
<p><strong>1. Knowledge Base</strong> — What you know</p>
<p>Are you familiar with relevant tools, algorithms, and techniques?</p>
<p>For COBOL business rule extraction: Do you understand COBOL syntax? Static analysis? Program comprehension techniques?</p>
<p>Without the right knowledge, you will have to spend time acquiring it before making progress, and might miss options that could be obvious to someone with more background.</p>
<p><strong>2. Heuristics</strong> — Strategies for approaching problems</p>
<p>We’ll cover heuristics in much more detail later. For now, here are some examples of effective heuristics:</p>
<ul>
<li><p>"Work backwards from the desired output".</p>
</li>
<li><p>"Break the problem into smaller pieces".</p>
</li>
<li><p>"Try a simpler version first".</p>
</li>
<li><p>"List all assumptions and test each one".</p>
</li>
</ul>
<p>For our COBOL business rule extraction case: "Start by manually extracting rules from one small program to understand what 'success' looks like".</p>
<p><strong>3. Control</strong> — Monitoring and adjusting your approach</p>
<p>Recognizing when your current strategy isn't working. Deciding when to pivot to a different approach. Managing your time and resources effectively.</p>
<p>This is what separates experienced researchers from novices: it's not just what you know, and the heuristics that you may deploy, but when and how you use them. If you choose one approach, reflect on its effectiveness, and decide to try something different when needed, that's an example of control.</p>
<p><strong>4. Beliefs and Attitudes</strong> — Your mindset toward the problem</p>
<p>Schoenfeld found that successful problem solvers held certain beliefs that helped them persist through challenges. Examples include:</p>
<ul>
<li><p>"I can figure this out" vs. "I'm not good at this kind of thing".</p>
</li>
<li><p>"Problems have multiple solutions" vs. "There's one right answer".</p>
</li>
<li><p>"I should write things down and work systematically" vs. "I should solve this in my head".</p>
</li>
</ul>
<p>These beliefs profoundly affect your ability to persist and succeed.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768912119159/af15ffb5-8691-4a26-b48e-675e0101e1d5.png" alt="Schoenfeld's Framework" width="600" height="400" loading="lazy"></p>
<h4 id="heading-why-this-matters-for-rampd-leaders">Why This Matters for R&amp;D Leaders</h4>
<p>You've likely seen this: A capable engineer spends three weeks on a Research task, trying approach after approach, until the original problem is no longer relevant. Or they declare after two days "it's impossible" and give up, though it turns out later that the problem was actually solvable.</p>
<p>The issue isn't (necessarily) capability. It's that Research requires different management, and different skills, than Development:</p>
<ul>
<li><p><strong>Knowledge base</strong>: Did they have the right background, or access to people who did?</p>
</li>
<li><p><strong>Heuristics</strong>: Were they using effective problem-solving strategies, or just "trying things"?</p>
</li>
<li><p><strong>Control</strong>: Did they know when to pivot? When to ask for help? When to break the problem down differently?</p>
</li>
<li><p><strong>Beliefs</strong>: Did they believe the problem was solvable? That systematic approaches work better than random attempts?</p>
</li>
</ul>
<p><strong>The good news</strong>: All four components can be improved. People get better at Research through practice, exposure to effective heuristics, and environments that support good Control and healthy Beliefs.</p>
<p>The rest of this book provides concrete tools, like using a Research Tree, drawing backwards, and time-boxing methods, that put Schoenfeld's framework into action in a Product-led environment. These tools help you and your team apply better heuristics, maintain effective control, and build the beliefs that sustain successful Research.</p>
<p>But first, let's make sure we're clear on when you actually need these tools. <a class="post-section-overview" href="#heading-chapter-2-research-and-development">The next chapter</a> dives deeper into distinguishing Research from Development work.</p>
<h4 id="heading-notes">Notes</h4>
<p>** Actually, Schoenfeld (1992) described five components (which he terms "categories"), but I focused on four of them. For the curious reader – the one I skipped is called "Practices" – the habits and cultural norms of the mathematical environment that shape how a student approaches a problem. I chose to skip it as applying it to Research felt artificial.</p>
<h4 id="heading-references">References</h4>
<p>[1] Schoenfeld, A. H. (1992). Learning to think mathematically: Problem solving, metacognition, and sense-making in mathematics. In D. Grouws (Ed.), Handbook for Research on Mathematics Teaching and Learning (pp. 334-370). New York: MacMillan.</p>
<h3 id="heading-chapter-2-research-and-development">Chapter 2 - Research and Development</h3>
<p>Most R&amp;D departments have plenty of Development work. Everyone agrees on what Development is. But Research? That's murkier.</p>
<p>Some claim every development task involves "research" – you have to test your code, try different things, read documentation. Is this Research?</p>
<p>Let's be precise.</p>
<h4 id="heading-defining-research-vs-development">Defining Research vs. Development</h4>
<p>We established in <a class="post-section-overview" href="#heading-chapter-1-what-is-research">chapter 1</a> the core distinction: Research involves fundamental uncertainty about whether solutions exist and which approaches will work, while Development applies known techniques to build specific features.</p>
<p>With this foundation, let's explore how to identify Research in practice.</p>
<h4 id="heading-a-quick-test">A Quick Test</h4>
<p>You're asked to reverse-engineer a specific compiled function: disassemble it and provide the equivalent code in C language. You know assembly, you know C, you have a disassembler. Is this Research?</p>
<p><strong>No.</strong> You know how to proceed. It might take three days of careful work, especially if the function is complex, but it's not Research. You're applying known techniques, and know how to progress to a solution.</p>
<p>But if you need to understand how an entire program operates, and one <em>possible</em> approach is reverse engineering its compiled form, and you're not sure if that approach is even feasible time-wise or whether it will yield the insights you need? <strong>That's Research.</strong></p>
<h4 id="heading-key-indicators-youre-doing-research">Key Indicators You're Doing Research</h4>
<p><strong>1. Fundamental Uncertainty About Solution Viability</strong></p>
<p>You're asking "Can this even be done?" rather than "How should we do this?" This isn't about implementation details – rather, it's about whether the approach itself is viable.</p>
<p><strong>2. Multiple Competing Approaches Without Clear Superiority</strong></p>
<p>Research often means exploring several paths simultaneously, knowing that many will fail, to discover which approach (if any) can solve the problem.</p>
<p><strong>3. Need for New Fundamental Techniques</strong></p>
<p>You may need to invent new methods rather than adapting existing ones. Note: Not all Research creates new techniques, but the possibility exists.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768913247156/98b7a1b5-fc3d-46f1-af91-f6a9608eb229.png" alt="98b7a1b5-fc3d-46f1-af91-f6a9608eb229" width="600" height="400" loading="lazy"></p>
<h4 id="heading-common-misconceptions">Common Misconceptions</h4>
<p><strong>Misconception 1: Technical Complexity = Research</strong></p>
<p>Many challenging Development tasks involve sophisticated algorithms, large-scale systems, or cutting-edge technologies without requiring Research approaches.</p>
<p>Building a distributed system with complex consensus algorithms? Challenging Development. Figuring out whether a distributed system <em>can</em> meet your latency requirements given your unusual constraints? Might be Research.</p>
<p>Technical complexity is not the same as Research.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768913954691/72542ee4-e1cd-47c2-9e6d-9716a9567172.png" alt="Technical complexity is not the same as Research" width="600" height="400" loading="lazy"></p>
<p><strong>Misconception 2: Using Advanced Algorithms = Research</strong></p>
<p>Implementing machine learning pipelines with random forests or neural networks isn't Research – even though the underlying algorithms are sophisticated. The Research happened when those algorithms were first developed. However, if you are using those algorithms when trying to solve a problem where it's unclear if they will work at all, that could be Research.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768914062832/e07be911-526f-4869-80a7-a66c8a1f9a0d.png" alt="Using Advanced Algorithms is not the same as Research" width="600" height="400" loading="lazy"></p>
<p><strong>Misconception 3: Research Can Be Managed Like Development</strong></p>
<p>Perhaps the most damaging misconception. This leads to:</p>
<ul>
<li><p>Demanding precise time estimates for uncertain work.</p>
</li>
<li><p>Expecting steady, measurable progress on fixed schedules.</p>
</li>
<li><p>Evaluating Research with Development metrics.</p>
</li>
</ul>
<p>Research requires different approaches. This is exactly what the rest of this book addresses.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768914002340/4fb06aa4-7ed3-4eb8-b011-8cb0131acd1c.png" alt="Managing Research is different from Managing Development" width="600" height="400" loading="lazy"></p>
<p><strong>Misconception 4: Research Cannot Be Managed</strong></p>
<p>The opposite extreme: treating Research as mystical work by brilliant people. The best a manager can do is not interrupt.</p>
<p>I've had the pleasure and privilege to work with many extremely skilled researchers. I can confidently say that this is simply not the case, as even the most talented researcher can benefit from skillful guidance.</p>
<p>Specifically, even the most talented researcher benefits from:</p>
<ul>
<li><p>Clear connections between their work and product goals.</p>
</li>
<li><p>Structured approaches to exploring alternatives.</p>
</li>
<li><p>Regular checkpoints to assess direction.</p>
</li>
<li><p>Team collaboration and brainstorming.</p>
</li>
</ul>
<p>Research is not magic, it <em>can</em> be managed effectively.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768914021783/ebba2bbc-303c-4c70-9e4d-bc716b7bd782.png" alt="Research is not magic, and it can be managed" width="600" height="400" loading="lazy"></p>
<h4 id="heading-your-role-as-research-leader">Your Role as Research Leader</h4>
<p>When leading Product-led Research, your job has two parts:</p>
<p><strong>1. Ensure the Research makes the biggest possible impact on the product</strong></p>
<p>This is your most important responsibility. "Successful" Research that doesn't impact the product is a failed project. Your job is to maintain the connection between Research work and product value – not just at the start, but continuously.</p>
<p>This means:</p>
<ul>
<li><p>Starting with clear product needs, not interesting technical questions.</p>
</li>
<li><p>Regularly validating that the Research still serves the product goal.</p>
</li>
<li><p>Making trade-offs between thorough exploration and shipping impact.</p>
</li>
</ul>
<p>We'll cover this in detail in <a class="post-section-overview" href="#heading-part-3-ensuring-product-impact">Part 3</a>.</p>
<p><strong>2. Ensure the Research is done in the most effective manner</strong></p>
<p>Even brilliant researchers benefit from structured approaches. Your role is to help the team work systematically rather than randomly.</p>
<p>This means:</p>
<ul>
<li><p>Helping identify which questions are worth answering.</p>
</li>
<li><p>Introducing better heuristics when the team is stuck ("Let's work backwards," "Let's time-box this investigation").</p>
</li>
<li><p>Preventing common failure modes like endless exploration or premature commitment.</p>
</li>
</ul>
<p>(We'll cover this in detail in <a class="post-section-overview" href="#heading-part-2-research-management-methods">Part 2</a>.)</p>
<p>Responsibility (1) is defining the right goals. Responsibility (2) is reaching these goals effectively.</p>
<p>The rest of this book provides concrete tools for both responsibilities.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768914050928/99978f75-033e-4aeb-bfa2-837909d1081a.png" alt="Your Role as Research Leader" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h3 id="heading-part-1-summary">Part 1 - Summary</h3>
<p><strong>Research</strong> is work where the path to success is not immediately obvious. It requires:</p>
<ul>
<li><p>Knowledge of relevant domains.</p>
</li>
<li><p>Effective problem-solving strategies (heuristics) .</p>
</li>
<li><p>Monitoring and adjusting approaches (control).</p>
</li>
<li><p>Healthy beliefs and persistence.</p>
</li>
</ul>
<p><strong>Your role</strong> as a Research leader is to:</p>
<ol>
<li><p>Ensure Research connects to product impact.</p>
</li>
<li><p>Ensure Research is done effectively.</p>
</li>
</ol>
<p><strong>You need different tools</strong> to manage Research versus Development – in order to make sure Research is done effectively. Part 2 provides those tools.</p>
<p>Part 3 will focus on connecting Research to product impact.</p>
<h2 id="heading-part-2-research-management-methods-1">Part 2: Research Management Methods</h2>
<h3 id="heading-chapter-3-why-methodology-matters-a-true-story">Chapter 3 - Why Methodology Matters: A True Story</h3>
<p>It was a late evening, and the classroom was filled with three dozen students. They were all sitting in front of their computers, working in silence. I was leading a cybersecurity training focused on reverse engineering. Each exercise included a single compiled program without its source code, with one goal: "understand how this program works." The output would be either a detailed document, an equivalent program implemented in a high-level language, or both.</p>
<p>This particular evening, the students were furiously working on reverse-engineering a game. The instruction was: "understand the game's rules, and document them thoroughly." The game had a user interface with two dimensions and could be played against the computer. Moving behind the students, I could see their screens with various reverse engineering tools open.</p>
<p>At some point we asked them to stop, turn around and look at the instructor. The instructor then provided a guided solution – this was a technique we used quite frequently, showing the students the "right" way to approach a problem they had spent some time tackling. The instructor opened the game, looked at the screen, opened the "File" menu, clicked on "Help" – and there it was, the entire description of the game rules.</p>
<h4 id="heading-the-lesson">The Lesson</h4>
<p>The room erupted in nervous laughter. Some students looked embarrassed. Others seemed frustrated. But everyone understood the point.</p>
<p>These were capable people. They had the relevant knowledge base, in Schoenfeld's terms, as presented in <a class="post-section-overview" href="#heading-chapter-1-what-is-research">chapter 1</a>. That is, they had the relevant technical skills – they knew both assembly and C, they knew how to use disassemblers, debuggers, and all the sophisticated tools of reverse engineering. Yet they had missed something fundamental: <strong>checking if there was a simpler solution first</strong>.</p>
<p>This happens all the time in Research work.</p>
<p>A team spends weeks diving deep into a complex technical approach, when a simpler path existed that they never explored. Or they try one thing, then another, then another – never systematically evaluating which approaches make sense before starting.</p>
<p><strong>The problem isn't capability. It's approach.</strong></p>
<p>This is exactly why you need structured methods for Research management. Without them, even your most talented people will waste time, miss obvious solutions, and burn out trying random approaches.</p>
<p>As a reminder, in <a class="post-section-overview" href="#heading-chapter-2-research-and-development">chapter 2</a>, we discussed your role as a Research leader:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916329893/c498be3d-8ef7-4dc4-9046-96f0ed2159da.png" alt="Your Role as Research Leader" width="600" height="400" loading="lazy"></p>
<p>Focusing on responsibility (2), the illustration here shows how the same peak can be reached via difficult climbing (reverse engineering) or by using a hot air balloon (reading the Help menu). Part of your job as a Research leader is to help your team find the easiest path to the goal.</p>
<h4 id="heading-what-this-part-covers">What This Part Covers</h4>
<p>The rest of Part 2 provides concrete tools to prevent these problems. You'll learn:</p>
<ul>
<li><p><strong>The Research Tree</strong> – A visual framework for systematically exploring solution paths.</p>
</li>
<li><p><strong>Time-boxing methods</strong> – How to limit exploration without killing creativity.</p>
</li>
</ul>
<p>These aren't abstract concepts. They're battle-tested techniques that directly address the failure modes you've probably seen: teams spinning their wheels, giving up too early, or getting stuck on the wrong approach.</p>
<p>Let's get started.</p>
<h3 id="heading-chapter-4-the-research-tree">Chapter 4 - The Research Tree</h3>
<p>You've probably seen this: An engineer/researcher starts down one path, hits an obstacle, tries something else, hits another obstacle, then tries a third approach. Three weeks later, they're still stuck – or worse, they've built something that technically works but doesn't solve the actual problem.</p>
<p>The issue isn't persistence. It's that they never mapped out the solution space. They never visualized <strong>which</strong> approaches might work, <strong>which questions</strong> need answering, and <strong>how</strong> everything relates to each other.</p>
<p><strong>The Research Tree solves this problem.</strong></p>
<p>It’s a way to visualize and manage the <strong>Control</strong> component of Schoenfeld's framework from <a class="post-section-overview" href="#heading-chapter-1-what-is-research">chapter 1</a> – monitoring and adjusting your approach. This is where most Research efforts struggle.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916536009/1b4688f5-42f5-442c-b0cd-4f518a88dc63.png" alt="Reminder: Schoenfeld's Framework" width="600" height="400" loading="lazy"></p>
<h4 id="heading-what-is-a-research-tree">What Is a Research Tree?</h4>
<p>A Research Tree is a living visual representation of your Research journey. It captures three things:</p>
<ol>
<li><p><strong>Possible solution paths</strong> – different approaches you might take.</p>
</li>
<li><p><strong>Open questions</strong> – what you need to learn.</p>
</li>
<li><p><strong>Closed questions</strong> – what you've already discovered.</p>
</li>
</ol>
<p>Unlike a static plan, the Research Tree grows and changes as you learn (which is one reason I like the name "tree" 😇). You start with what you know, then update it continuously as you investigate. Dead ends get marked. New branches appear. Questions get answered and new questions emerge.</p>
<p>Think of it like this: You're exploring a cave system. You don't have a map – you're <em>creating</em> the map as you explore. You mark passages you've tried. You note which ones are dead ends. You write down questions: "Does this passage connect to the main chamber?" "Is there water down this route?" As you explore, you answer some questions and discover new ones you hadn't considered. You write down the answers you found, and the experiments you conducted to find them ("I tried going left, hit a wall after 50 feet").</p>
<p>Research works the same way. The Research Tree is both your map and your log.</p>
<h4 id="heading-your-first-research-tree">Your First Research Tree</h4>
<p>Let's build one together. Consider a common engineering challenge:</p>
<p><strong>Goal: Reduce API response time from 800ms to under 100ms</strong></p>
<p>(Note: despite not being a real Research task, I chose this example for its simplicity to illustrate the process of creating a Research Tree. It can also show you how Research Trees can be useful in a variety of scenarios.)</p>
<p>You start with a fundamental question that needs answering. What's the first thing you need to know?</p>
<p>Take a moment to think about this before reading on.</p>
<p>The first question is usually: <strong>Where is the bottleneck?</strong></p>
<p>Until you answer this, you don't know which approaches make sense. Let's draw this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916610613/f1f1cfb1-3b03-4ba9-b7b7-6883582ac972.png" alt="Initial Research Tree" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>You can use a simple pen and paper, a whiteboard, or a digital tool to draw this out. When creating your very first tree, I highly recommend doing it by hand – the physical act of drawing will help you feel comfortable with the process.</p>
<p>Now, how can you answer this question? What approaches might tell you where the bottleneck is?</p>
<p>You might identify:</p>
<ul>
<li><p>Profile the application with a performance monitoring tool.</p>
</li>
<li><p>Add detailed logging to measure each operation.</p>
</li>
<li><p>Use database query analysis tools.</p>
</li>
</ul>
<p>Let's add these as branches:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916651252/2c0fa347-f3d8-4c45-88f1-aaa708d4dfbd.png" alt="Research Tree with a few directions" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>(Note: the Brown status means "uncertain, needs investigation" – more on this later.)</p>
<p>Each approach is an investigation you could run to answer the question.</p>
<h4 id="heading-the-power-of-stopping-to-think">The Power of Stopping to Think</h4>
<p>Before we go further, notice what just happened. <strong>You stopped.</strong></p>
<p>Instead of immediately jumping into "Let's add more logging!" or "I bet it's the database, let's check queries," you identified multiple possible approaches. You're looking at three different ways to answer the same question.</p>
<p>This is already valuable. Most engineers would have jumped straight into whichever approach came to mind first. Maybe you've done this yourself: spent two days adding detailed logging, only to discover later that a profiler would have given you the answer in 30 minutes.</p>
<p>By creating this tree, you've avoided that trap. You can see all the approaches before committing to any of them. It doesn't guarantee you will choose the "right" path - you can't always do that in advance – but it will minimize the chances of you omitting it completely.</p>
<p>Remember the reverse engineering students from <a class="post-section-overview" href="#heading-chapter-3-why-methodology-matters-a-true-story">chapter 3</a>? They never created this tree. They jumped straight to the first approach they knew: disassemblers and debuggers. They didn't stop to think: "What are all the ways we could understand this game's rules?" If they had, they would have listed approaches like: reverse engineer the binary, check the Help menu, just play the game, examine config files, watch network traffic. And if they'd evaluated those approaches using the framework you're about to learn, "check the Help menu" would have scored perfectly: fastest feedback (30 seconds), lowest cost (zero), best coverage (complete rules). Instead, they spent hours on complex reverse engineering when a simple menu click would have worked. Don't be those students.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916696569/d5802e53-a6b2-46ec-846a-dd05043a7787.png" alt="A simple tree for the game makes it clear starting with reversing is the wrong option" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Now comes the critical question: Which branch do you try first?</strong></p>
<p>Consider our tree again:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916841081/ae633e0b-891e-47f9-aa34-b37619a20802.png" alt="Research Tree with a few directions" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-choosing-your-first-path">Choosing Your First Path</h4>
<p>You're looking at three approaches: Profile, Logging, DB Analysis. Each is a <strong>heuristic</strong> (in Schoenfeld's terms, as presented in <a class="post-section-overview" href="#heading-chapter-1-what-is-research">chapter 1</a>) – a problem-solving strategy that might work. How do you decide which one to try?</p>
<p>Sometimes, the answer is obvious (I wouldn't really use a framework to check if there's a "Help" menu). Let me show you the framework I use when it's not so clear which path to choose. Ask yourself these questions:</p>
<p><strong>1. Which gives the fastest feedback?</strong></p>
<p>How long until you get an answer?</p>
<ul>
<li><p>Profile: Can run in 10 minutes. Setup is probably 5 minutes.</p>
</li>
<li><p>Logging: Need to add logging code, deploy, wait for traffic – maybe 4 hours.</p>
</li>
<li><p>DB Analysis: Need to enable slow query log, wait for data – maybe 2 hours.</p>
</li>
</ul>
<p><strong>Fastest feedback wins.</strong> You want to learn quickly.</p>
<p><strong>2. Which has the lowest cost?</strong></p>
<p>What do you need to set up or change?</p>
<ul>
<li><p>Profile: Just attach a profiler – no code changes.</p>
</li>
<li><p>Logging: Need to modify code, test, deploy.</p>
</li>
<li><p>DB Analysis: Need database permissions, might need config changes.</p>
</li>
</ul>
<p><strong>Lower cost wins.</strong> Why spend hours adding logging if you can get the answer without changing any code?</p>
<p>(In your environment, it may be different. Perhaps logging is really easy, while profiling is super hard to set up. I am not claiming that profiling is a better heuristic than logging – it depends on your circumstances.)</p>
<p><strong>3. Which answers the most questions?</strong></p>
<p>Some approaches answer not just your immediate question, but related questions, too.</p>
<ul>
<li><p>Profile: Shows you CPU, memory, database, network – a complete picture.</p>
</li>
<li><p>Logging: Only shows what you logged.</p>
</li>
<li><p>DB Analysis: Only shows database queries.</p>
</li>
</ul>
<p><strong>Broader coverage wins.</strong> A profiler might show you that 70% of time is database queries <em>and</em> that 20% is network latency – information you wouldn't get from narrow approaches.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768916912029/ad429b0b-8cda-4af7-86e2-7687396aa401.png" alt="Prioritizing heuristics framework" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>So this is an easy one. <strong>Profiling wins on all three criteria.</strong> That's your first approach to try.</p>
<p>Update your tree:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917127720/b5f2a038-ba28-41b6-9a8c-bd4157c31873.png" alt="Start with profiling" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This doesn't mean the other approaches are bad, or that this one will necessarily turn out to be the best. It means that profiling is the best <em>starting point</em> given what you know right now.</p>
<h4 id="heading-what-if-your-first-choice-doesnt-work">What If Your First Choice Doesn't Work?</h4>
<p>Let's say you try profiling and hit a problem: Your profiler can't attach to the production environment due to security restrictions.</p>
<p><strong>This is valuable information.</strong> Mark Profile as Red and move to your next best option:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917189119/381686ce-c6e5-4ee2-9d09-7eea2d42d305.png" alt="Profiling failed, pivot to logging" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Now you try Logging. But notice: You didn't waste days trying Profile in production. You tried it, hit a blocker, immediately pivoted to Logging. The tree helped you move quickly.</p>
<h4 id="heading-choosing-when-everything-seems-equal">Choosing When Everything Seems Equal</h4>
<p>Sometimes multiple approaches look equally good. Profile and DB Analysis might both be fast, low-cost, and have decent coverage. How do you choose?</p>
<p><strong>Pick one and move on.</strong> Don't spend an hour analyzing which approach to try for 30 minutes. The meta-work (deciding) shouldn't take longer than the actual work (trying it).</p>
<p>When approaches seem equal, ask: "Which one am I more familiar with?" or "Which one does the team have experience with?" Use your judgment, make a choice, and start learning.</p>
<p>The worst decision is no decision.</p>
<p>In general, this approach might feel like overkill. Should you really sketch out trees and compare branches before actually doing something?</p>
<p>The surprising answer is that while almost always it feels like overkill, almost every single time, it turns out to be worth it. Try it a few times and you will see for yourself.</p>
<h4 id="heading-heuristics-can-be-combined">Heuristics Can Be Combined</h4>
<p>Sometimes you don't have to choose just one. You might run Profile <em>and</em> enable DB Analysis simultaneously. If they don't conflict and you have the time, parallel investigations can be powerful.</p>
<p>But be careful: Don't try to do everything at once. Start with your best option. If that doesn't fully answer your question, then add another approach.</p>
<h4 id="heading-how-answers-lead-to-new-questions">How Answers Lead to New Questions</h4>
<p>After marking "Profile" as red, you moved on to "Logging". You added a few indicative log messages and let the system run for a day. You discover: <strong>70% of response time is database queries</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917484811/7f82dd85-01b4-4f6b-a793-842b74103b68.png" alt="Database is the bottleneck" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This answer eliminates the need for other approaches (you don't need DB Analysis now – you found the answer). But more importantly, it reveals new questions:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917538250/5e47f40c-e998-4c8c-afa3-3ad047577504.png" alt="New questions emerge" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>See how the tree grows? One answered question spawns two new questions. Each of these new questions will have its own approaches for answering them.</p>
<p>And you'll apply the same framework to choose which question to answer first: Which gives fastest feedback? Which has lowest cost? Which answers the most questions?</p>
<p>Let's expand "Which queries are slowest?":</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917712109/31c73b0c-aa1b-4e64-965c-1643fb6e8698.png" alt="Research tree expanding" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Again, you'd evaluate: Which approach gives fastest feedback? Enabling slow query log is probably fastest, as you’d just flip a config flag and wait a few minutes.</p>
<p>You decide to enable the slow query log. After investigating, you discover: <strong>User profile queries are slowest: they make 15 separate database calls (N+1 problem)</strong>.</p>
<p>(What is the N+1 problem in this context? It means that when fetching user profiles, the code first queries for a list of users (1 query), then for each user, it makes an additional query to fetch related data (N queries). If there are 15 users, that's 16 queries total. This is inefficient and slows down response time.)</p>
<p>This answer leads to a new question:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917756381/566e2fba-e47d-48b7-aa91-531e7a2855a8.png" alt="New question about fixing N+1" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Now you have three solution approaches. Again, evaluate them:</p>
<ul>
<li><p>Rewrite queries with JOINs: Fast to implement, proven pattern.</p>
</li>
<li><p>Add Eager Loading: Depends on your ORM, might be quick.</p>
</li>
<li><p>DataLoader Pattern: Requires learning new pattern, takes longer.</p>
</li>
</ul>
<p>Rewrite queries with JOINs probably gives the fastest feedback if your team knows SQL well.</p>
<h4 id="heading-the-complete-picture">The Complete Picture</h4>
<p>Let's see how the full tree looks after a few days of investigation:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768917875604/39d6c595-1fb3-4e1d-8be3-e0015fd2e642.png" alt="Completed research tree example" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>(Note: for the "How many queries per request?" node – I skipped the approaches for brevity.)</p>
<p><strong>Reading this tree:</strong></p>
<ol>
<li><p>We started with "Where is the bottleneck?" and chose profiling (fastest feedback).</p>
</li>
<li><p>We found out the profiler can't attach to the production environment due to security restrictions, so we pivoted to logging.</p>
</li>
<li><p>Logging revealed that 70% of response time is database queries.</p>
</li>
<li><p>That answer led to two new questions about specific queries.</p>
</li>
<li><p>For "Which queries are slowest?", we chose slow query log (fastest to enable).</p>
</li>
<li><p>Answering it led to another question about fixing the N+1 problem.</p>
</li>
<li><p>For "How can we fix N+1?", we evaluated the approaches and chose "Rewrite queries with JOINs" (team knows SQL, fastest to implement).</p>
</li>
<li><p>Meanwhile, "Can we reduce query count?" is still open and has its own approaches to investigate.</p>
</li>
</ol>
<h4 id="heading-color-coding-status">Color-Coding Status</h4>
<p>When you're creating your Research Tree, you'll mark both questions and approaches with a particular status. Of course, the following specific colors are just suggestions – the important thing is to keep something consistently so you can quickly see the status at a glance.</p>
<p><strong>For Questions:</strong></p>
<ul>
<li><p><strong>Open</strong>: Not yet answered.</p>
</li>
<li><p><strong>Closed</strong>: Answered (show the answer).</p>
</li>
<li><p><strong>Blocking</strong>: Must answer before proceeding with an approach.</p>
</li>
</ul>
<p><strong>For Approaches:</strong></p>
<ul>
<li><p><strong>Green</strong>: Viable, worth pursuing.</p>
</li>
<li><p><strong>Brown</strong>: Uncertain, needs investigation.</p>
</li>
<li><p><strong>Red</strong>: Dead end or not viable.</p>
</li>
</ul>
<p>In our example above:</p>
<ul>
<li><p>"Rewrite with Joins" is Green because we've identified that it addresses the specific N+1 problem and that the team is confident in implementing it.</p>
</li>
<li><p>"Redesign API" is Red because it would take too long for this project.</p>
</li>
<li><p>Other approaches are Brown because we haven't investigated them yet.</p>
</li>
</ul>
<h4 id="heading-additional-tips">Additional Tips</h4>
<p>Keeping the tree clean and simple is important, and obsessing over its looks and details really misses the point. That said, some readers will find benefits by adding a few more details to the tree, specifically:</p>
<ol>
<li><p><strong>Order</strong>: add a number next to a specific branch when tackling it, so it is easy to track which direction you tried first, which one followed and so on.</p>
</li>
<li><p><strong>Pivot Explanations</strong>: if you chose to pivot from one branch to another, write why. This might help when you revise your decisions later, or when reviewing with your team (as described <a class="post-section-overview" href="#heading-using-the-tree-with-your-team">later in this chapter</a>).</p>
</li>
</ol>
<h4 id="heading-the-research-tree-prevents-common-pitfalls">The Research Tree Prevents Common Pitfalls</h4>
<p>The Research Tree with this decision-making framework addresses five critical failure modes:</p>
<p><strong>1. Jumping on First Idea:</strong> Without a tree, people implement the first approach they think of. The tree forces you to identify alternatives and evaluate them systematically before starting.</p>
<p><strong>2. Tunnel Vision:</strong> Even when considering alternatives in the beginning, people tend to lock onto one approach and not pivot from it even when it turns out to be the wrong choice. The tree makes alternatives visible and helps you not only choose the best starting point, but also reevaluate continuously.</p>
<p><strong>3. Inefficient Learning</strong>: Teams might try expensive, slow approaches first when faster, cheaper ones exist. The decision framework helps you learn quickly.</p>
<p><strong>4. Answering Questions You Don't Need To:</strong> Teams waste time investigating interesting but irrelevant questions. The tree shows how questions connect – you only need to answer questions that lead to your goal.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918009905/39f7577b-9d71-4ef8-b206-ec2d2d1027b6.png" alt="The Research Tree prevents common pitfalls" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-time-to-practice">Time to Practice</h4>
<p>Open your favorite drawing tool, or just grab a piece of paper. Think of a Research problem you're currently facing or recently faced.</p>
<p>Now answer these questions:</p>
<ol>
<li><p>What's your goal? Write it at the top.</p>
</li>
<li><p>What's the first question you need to answer? Write it below the goal.</p>
</li>
<li><p>What are 2-4 approaches to answer that question? Draw them as branches.</p>
</li>
<li><p>For each approach, evaluate:</p>
<ul>
<li><p>How fast is the feedback?</p>
</li>
<li><p>What's the cost?</p>
</li>
<li><p>How much does it answer?</p>
</li>
</ul>
</li>
<li><p>Which approach scores best? Mark it "TRY FIRST".</p>
</li>
</ol>
<p>Actually do this. Don't just read and think "I understand." Drawing the tree and evaluating approaches forces you to be explicit, and you'll immediately see gaps in your thinking.</p>
<p>I'll wait.</p>
<p>...</p>
<p>Don't worry about me, I'm enjoying some really great coffee in the meanwhile.</p>
<p>...</p>
<p>Done? Good. You now have your first Research Tree with a clear starting point.</p>
<h4 id="heading-using-the-tree-with-your-team">Using the Tree with Your Team</h4>
<p>Research Trees become even more powerful when shared with a team. It actually provides you, the Lead, with a way to see what directions the team is executing upon, and why. Your job here is to make sure the framework is used. Help your team stop and ask: are we asking the right questions? Are there approaches that we missed? Are we choosing the right approach?</p>
<p><strong>During Planning:</strong></p>
<ul>
<li><p>Draw the tree together as a group.</p>
</li>
<li><p>Brainstorm questions and approaches.</p>
</li>
<li><p>Evaluate approaches using the framework (fastest feedback, lowest cost, best coverage).</p>
</li>
<li><p>Everyone sees <em>why</em> you're trying a particular approach first.</p>
</li>
</ul>
<p><strong>During Execution:</strong></p>
<ul>
<li><p>Update the tree as you learn.</p>
</li>
<li><p>When stuck, revisit the tree to identify alternative approaches.</p>
</li>
<li><p>Make sure you consider whether you are asking all of the important questions, and whether you are considering all relevant approaches.</p>
</li>
<li><p>If you pivoted from a branch, explain your reason and ask if someone can challenge your logic.</p>
</li>
<li><p>Conduct regular tree reviews (weekly or bi-weekly).</p>
</li>
</ul>
<p>Note that the Research Tree is also useful for one-on-one sessions: you can review the tree with individual team members to understand their progress and help them choose next steps. It actually makes the Control component of Schoenfeld's framework much easier to manage - as you see the variolus questions and approaches laid out visually.</p>
<h4 id="heading-tools">Tools</h4>
<ul>
<li><p>Pen and paper (seriously, this works great).</p>
</li>
<li><p>Whiteboard (for team sessions).</p>
</li>
<li><p>Miro, Mural, or similar digital whiteboards.</p>
</li>
<li><p>Mind mapping software (XMind, MindNode, and so on).</p>
</li>
<li><p>Even a simple text file with indentation.</p>
</li>
</ul>
<p>The tool doesn't matter. What matters is that the tree exists, is visible, and gets updated.</p>
<h4 id="heading-pro-tips">Pro Tips</h4>
<p><strong>Start with the most important question</strong></p>
<p>Don't try to list all possible questions upfront. Start with the one question that, if answered, would most clarify your path forward. Answer it, then see what new questions emerge. More on finding the questions to start from in <a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>.</p>
<p><strong>Show how answers lead to new questions</strong></p>
<p>When you close a question, immediately ask: "What new questions does this answer reveal?" Draw those as branches from the answer.</p>
<p><strong>Update questions weekly</strong></p>
<p>In your weekly check-ins, explicitly review: Which questions did we close? What did we learn? Which new questions emerged? Which questions are blocking progress?</p>
<p><strong>Re-evaluate when context changes</strong></p>
<p>If you learn something new that changes the evaluation (maybe a tool you thought was fast turns out to be slow), re-evaluate your approaches. The tree is living – update it.</p>
<h4 id="heading-recap-the-research-tree">Recap - The Research Tree</h4>
<p>The Research Tree is a living visual framework that:</p>
<ul>
<li><p>Shows questions you need to answer to reach your goal.</p>
</li>
<li><p>Maps approaches for answering each question.</p>
</li>
<li><p>Helps you choose the best starting point for each question.</p>
</li>
<li><p>Prevents jumping on the first idea without considering alternatives.</p>
</li>
<li><p>Captures how answers lead to new questions.</p>
</li>
<li><p>Tracks status of questions (open/closed/blocking) and approaches (green/brown/red).</p>
</li>
<li><p>Documents the investigation path so the team understands why decisions were made.</p>
</li>
<li><p>Evolves as you learn – questions get answered, new questions emerge.</p>
</li>
</ul>
<p><strong>Key structure:</strong></p>
<ul>
<li>Goal → Question → Approaches to answer it → Answer → New questions</li>
</ul>
<p><strong>Decision framework for choosing approaches:</strong></p>
<ol>
<li><p>Which gives fastest feedback?</p>
</li>
<li><p>Which has lowest cost?</p>
</li>
<li><p>Which answers the most questions?</p>
</li>
</ol>
<p>In the next chapter, you'll learn how to manage execution using time-boxing and decision points to keep your Research moving forward without getting stuck.</p>
<h3 id="heading-chapter-5-time-boxing-research-explorations">Chapter 5 - Time-Boxing Research Explorations</h3>
<p>In the previous chapter, you learned about the Research Tree, a powerful tool for visualizing and managing Research efforts. The tree helps you systematically explore different solution paths and keep track of open questions. It also helps you decide which path to try first.</p>
<p>But once you've chosen a branch, how long should you pursue it before stepping back to reconsider?</p>
<h4 id="heading-the-problem-research-without-time-limits">The Problem: Research Without Time Limits</h4>
<p>A researcher investigates whether a machine learning model can predict code complexity. Day one goes well. Day two, they need more features. Day three, a different architecture might work better. They switch. Day four, the new architecture needs different preprocessing.</p>
<p>Two weeks later, they're still on this path. When you ask about trying alternatives, they say "I'm close. Just need a few more days."</p>
<p>Three weeks in, they admit this approach isn't viable. Meanwhile, a simpler approach sat unexplored on the Research Tree.</p>
<p>Without a defined checkpoint, there's no natural moment to ask: "Given what I've learned, is this still the best path?" The sunk cost fallacy (continuing an approach because you've already invested time, rather than because it's still the best option) takes over. This is extremely common by Researchers, who tend to be dedicated, brilliant people who get fixated on problems they try to solve.</p>
<h4 id="heading-time-boxing-creating-decision-points">Time-Boxing: Creating Decision Points</h4>
<p>Let's face it: it's hard, even impossible, to estimate how long a Research task will take. But you should still provide time limits based on how long you're willing to invest before reconsidering.</p>
<p><strong>Time-boxing provides mandatory decision points.</strong></p>
<p>Note that we are not talking about deadlines, but decision points. These are moments where you stop and evaluate: What did I learn? Is this still the most promising path?</p>
<p>As a rule, for every task longer than a day, define a time limit. For example: "I'll spend three days investigating whether we can cluster files into logical folders based on their I/O operations."</p>
<p>Three things can happen:</p>
<ol>
<li><p><strong>Early success:</strong> The researcher figures it out in a few hours. Done early, move to the next question.</p>
</li>
<li><p><strong>Early blocker:</strong> After one hour, they discover they don't have access to filenames. They can immediately reconsider: "Without filenames, is this viable?"</p>
</li>
<li><p><strong>Time box expires:</strong> Three days pass with partial progress. Now comes the mandatory decision point.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918238122/eab625ca-20d9-4c9c-824b-c057d4248fac.png" alt="For every task that is longer than a day, define a time limit" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-the-decision-point">The Decision Point</h4>
<p>When your time box expires, stop. Pull out your Research Tree (yes, you already love that Tree). Ask three questions:</p>
<p><strong>1. What was your goal in pursuing this direction?</strong></p>
<p>Which question were you trying to answer? Why did you choose this approach over alternatives?</p>
<p><strong>2. What did you learn?</strong></p>
<p>Document your discoveries, even if incomplete:</p>
<ul>
<li><p>"The approach works but needs more sophisticated algorithms than we thought."</p>
</li>
<li><p>"We need data we don't currently have."</p>
</li>
<li><p>"This is harder than expected – would take at least 2 more weeks."</p>
</li>
<li><p>"We're 70% there – just need to handle edge cases."</p>
</li>
</ul>
<p><strong>3. Given what you learned, is this still the most promising path?</strong></p>
<p>Look at your Research Tree. You have other branches. Given what you now know, is continuing the best use of time?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918412614/502819a3-508c-4f6f-81da-42ffefcff900.png" alt="When the limit expires, stop to reconsider your next steps" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>You have three options:</p>
<p>You can <strong>continue with a new time box:</strong> "I've solved the core challenge. One more day for edge cases." Define the new time box. The key: you consciously decided to continue based on what you learned, not inertia.</p>
<p>You can <strong>pivot:</strong> "This would take two more weeks, and I'm not confident it'll work. There's a simpler approach on my tree." Mark this branch Red. Move to a different branch.</p>
<p>Or you can <strong>reconsider the question:</strong> "Files in this codebase don't have clear I/O patterns. Maybe I should try clustering by function dependencies instead." Go back to your tree and identify a different question.</p>
<h4 id="heading-example-detecting-god-objects">Example: Detecting God Objects</h4>
<p>You're detecting God Objects (classes that do too much) using static analysis. Your Research Tree shows three approaches: complexity metrics, method naming patterns, or machine learning on AST features.</p>
<p>You choose complexity metrics (fastest feedback, lowest cost) and set a 2-day time box.</p>
<p><strong>Day 1-2:</strong> You implement <a target="_blank" href="https://en.wikipedia.org/wiki/Cyclomatic_complexity">cyclomatic complexity</a> and <a target="_blank" href="https://en.wikipedia.org/wiki/Source_lines_of_code">SLOC</a> metrics. Results: 65% accuracy, but 40% false positives.</p>
<p><strong>Decision point:</strong> You stop. Looking at your tree, method naming patterns might provide complementary information. You decide to spend 1 day exploring whether combining both approaches improves accuracy.</p>
<p><strong>Day 3:</strong> Combined approach: 78% accuracy, 25% false positives. Promising.</p>
<p><strong>New decision:</strong> Time-box 3 more days to refine and test on larger codebases.</p>
<p>Notice what happened: The 2-day time box forced assessment before perfecting the first approach. You learned combining approaches was better. Without time-boxing, you might have spent a week perfecting complexity metrics alone.</p>
<h4 id="heading-how-to-set-time-boxes">How to Set Time Boxes</h4>
<p>When choosing a branch on your Research Tree, ask: Is this shorter than a day? A few days? Longer than a week?</p>
<p><strong>Shorter than a day:</strong> Just do it. Don't overthink time-boxing for tasks this short.</p>
<p><strong>A few days (2-7 days):</strong> Time-box for 2-5 days. I usually time-box for slightly less than my estimate – if I think 4 days, I set 3 days. This forces reflection based on learning, not arbitrary completion.</p>
<p><strong>Longer than a week:</strong> Time-box for one week maximum. Even if you're making progress, a week is long enough that stepping back is valuable.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918460198/8ed7d7c3-b212-4777-927c-09317ed1b97e.png" alt="Time box based on your initial estimate" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Don't overthink the exact duration. The goal is creating natural stopping points. The specific number matters less than having some checkpoint.</p>
<p><strong>Critical:</strong> Time-boxing is not about pressure. You're not failing if the time box expires without solving the problem. That's expected in Research. What time-boxing does is force moments of reflection that prevent weeks spent on directions you'd have abandoned if you'd stopped to reconsider.</p>
<h4 id="heading-using-time-boxing-with-your-team">Using Time-Boxing with Your Team</h4>
<p>When managing researchers, set time boxes together during planning. Make sure they understand it's a decision point, not a deadline. Schedule the review explicitly.</p>
<p>At the review, look at the Research Tree together. Ask the three questions. Make the decision collaboratively. This prevents researchers from getting stuck without asking for help, and makes pivoting feel like a positive decision rather than failure.</p>
<h4 id="heading-integration-with-the-research-tree">Integration with the Research Tree</h4>
<p>Time-boxing combines naturally with the Research Tree (<a class="post-section-overview" href="#heading-chapter-4-the-research-tree">chapter 4</a>): each branch gets a time box, and when it expires, the tree shows your alternatives.</p>
<p>Time-boxing creates moments to ask "given what I've learned, what should I do next?" The Research Tree helps you answer that question.</p>
<h4 id="heading-recap">Recap</h4>
<p>For tasks longer than a day, set a time limit (2-5 days for medium tasks, max 1 week). When time expires, stop and evaluate using your Research Tree: What was my goal? What did I learn? Is this still the best path?</p>
<p>Time boxes acknowledge that research estimation is hard. They prevent sunk cost fallacy and endless exploration. They're not about pressure or finishing "on time" – they're about forcing reflection instead of momentum-driven continuation.</p>
<p>Combined with the Research Tree, time-boxing gives you control over research execution while respecting its inherent uncertainty.</p>
<h3 id="heading-part-2-summary">Part 2 Summary</h3>
<p><strong>Effective Research</strong> requires structured approaches, not just technical skill:</p>
<ul>
<li><p>The Research Tree visualizes solution paths, open questions, and closed questions.</p>
</li>
<li><p>Time-boxing prevents endless exploration while preserving flexibility.</p>
</li>
<li><p>Systematic evaluation helps you choose the best path forward.</p>
</li>
</ul>
<p>In <a class="post-section-overview" href="#heading-chapter-2-research-and-development">chapter 2</a>, I argued that your role as a Research leader is to:</p>
<ol>
<li><p>Ensure Research connects to product impact.</p>
</li>
<li><p>Ensure Research is done effectively.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918564138/25040618-afdf-49e9-bf59-44a9518699f5.png" alt="Your Role as Research Leader" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This part handled the latter part of your role: how to ensure Research is done effectively.</p>
<p>Within this part, your role is to:</p>
<ol>
<li><p>Ensure the team uses these methods consistently.</p>
</li>
<li><p>Help identify when to pivot, when to persist, and which questions matter.</p>
</li>
</ol>
<p><strong>These tools prevent common failure modes</strong>: jumping on the first idea, tunnel vision, inefficient learning, and wasting time answering irrelevant questions.</p>
<p>Part 3 shows how to connect Research to product impact.</p>
<h2 id="heading-part-3-ensuring-product-impact-1">Part 3: Ensuring Product Impact</h2>
<p>In <a class="post-section-overview" href="#heading-chapter-2-research-and-development">chapter 2</a>, I argued that your role as a Research leader is to:</p>
<ol>
<li><p>Ensure Research connects to product impact.</p>
</li>
<li><p>Ensure Research is done effectively.</p>
</li>
</ol>
<p>Part 2 addressed (2) above – ensuring Research is done effectively – with tools that work in ANY research context. This part provides the complete answer to (1) – ensuring Research connects to product impact:</p>
<ul>
<li><p>First, choose research that matters (<a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">chapter 6</a>).</p>
</li>
<li><p>Then, work backwards from product value (<a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>).</p>
</li>
<li><p>Continuously validate with end-to-end iterations (<a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations">chapter 8</a>).</p>
</li>
</ul>
<h3 id="heading-chapter-6-how-to-choose-research-initiatives">Chapter 6 - How to Choose Research Initiatives</h3>
<p>The very first step in making sure your Research impacts the product is choosing the right thing to research. And, just as important, avoiding Research that won't impact the product.</p>
<p>Research initiatives can start from two different places:</p>
<ol>
<li><p>From a problem the product is facing.</p>
</li>
<li><p>From a technological opportunity.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768918734842/5706e595-2264-4162-99a0-9f2aae7c9578.png" alt="Starting research intiatives - either from a product problem, or a technological opportunity" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-1-starting-from-a-concrete-problem">1. Starting From a Concrete Problem</h4>
<p>The most promising way to find research initiatives that will have a big impact on the product is to start from an acute problem that the product is facing.</p>
<p>At <a target="_blank" href="https://swimm.io">Swimm</a>, we allowed users to write documents about their code, but inevitably, the code changed, and the documentation became outdated. This made writing documentation not worth the effort in the first place. We needed to find a way to make sure the documentation stayed up to date automatically, with a good user experience. This was a clear problem we faced, and we didn't know if it was even possible to solve.</p>
<p>Consider a different example: a medical company that wants to diagnose a disease based on a few blood samples. Currently, they have an algorithm in place, but it's not very accurate. Specifically, it yields too many false positives. They need to find a way to improve their prediction accuracy. This is a clear problem the product is facing, and it doesn't have a clear technological solution.</p>
<p>In both cases, the problem is clear, and its impact on the product or company is clear. At the same time, the <em>solution</em> is not clear, and it's not certain that a solution will be technologically feasible.</p>
<h4 id="heading-2-starting-from-a-technological-opportunity">2. Starting From a Technological Opportunity</h4>
<p>When generative AI became popular, many companies started exploring how to leverage it to improve their products. This is an example of an emerging technology that can enable new product features.</p>
<p>The same can happen with smaller, more specific technologies, and not necessarily new technologies – sometimes technologies that the relevant teams just familiarized themselves with. For example, if a researcher reads a paper about a new way to parse source code, that researcher might have an idea for a new product feature that can leverage this technology.</p>
<p>While many good ideas come from technological opportunities, it's important to remember that the real impact of Research is determined by the product, not the technology. It's far more risky to pursue a technological opportunity than a concrete problem. If you do start a Research based on a technological opportunity, your responsibility is to make sure that the technological opportunity, if pursued successfully, will indeed have a big impact on the product.</p>
<h4 id="heading-problem-driven-vs-opportunity-driven-a-comparison">Problem-Driven vs. Opportunity-Driven: A Comparison</h4>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Aspect</td><td>Problem-Driven Research</td><td>Opportunity-Driven Research</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Starting Point</strong></td><td>Customer pain point or product limitation</td><td>New technology or technique becomes available</td></tr>
<tr>
<td><strong>Product Impact Clarity</strong></td><td>High – you know exactly what problem you're solving</td><td>Low to Medium – you're searching for problems this technology can solve</td></tr>
<tr>
<td><strong>Risk Level</strong></td><td>Lower – you know there's demand if you succeed</td><td>Higher – solution might not match any important problem</td></tr>
<tr>
<td><strong>Validation</strong></td><td>Problem already validated through user feedback</td><td>Needs validation that the solution matters to users</td></tr>
<tr>
<td><strong>Examples</strong></td><td>Swimm's auto-updating docs; Reducing false positives in medical diagnosis</td><td>"How can we use LLMs in our product?"; "This new parsing technique could enable..."</td></tr>
<tr>
<td><strong>Success Criteria</strong></td><td>Did we solve the problem?</td><td>Did we find a valuable use case AND solve the problem?</td></tr>
</tbody>
</table>
</div><p>Problem-driven research starts with validated demand: you know that the goal is worth pursuing. Opportunity-driven research starts with a hammer looking for nails. Sometimes you find valuable nails, but it's riskier.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919054708/d526ce83-d052-436f-9bd4-de86cd90e353.png" alt="d526ce83-d052-436f-9bd4-de86cd90e353" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-should-you-pursue-a-research-initiative">Should You Pursue a Research Initiative?</h4>
<p>Say you have a research initiative – an idea you'd like to research. To know whether you should pursue it, you should be able to answer a simple set of questions:</p>
<p><strong>1. Product Impact – If the Research succeeds, how big will the impact be?</strong></p>
<p>This is the most crucial question.</p>
<p>For problem-driven research, this is usually straightforward: "If we solve automatic doc updates, we'll retain 40% more customers who currently churn due to outdated docs."</p>
<p>For opportunity-driven research, you need to work harder: "If we use LLMs for code analysis, we could enable X feature, which would help Y users save Z hours per week, translating to $W in additional revenue."</p>
<p>If you're not convinced a successful Research result would make a huge impact on the product, it's probably not worth pursuing at the moment (until you <em>are</em> convinced). "Huge impact" means:</p>
<ul>
<li><p>Solving a top-3 customer pain point, OR</p>
</li>
<li><p>Enabling a new product capability that significantly expands your market, OR</p>
</li>
<li><p>Reducing a major cost or risk factor</p>
</li>
</ul>
<p>Anything less, and your resources are better spent on Development work with clearer ROI.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919149212/56a55ba5-9339-4cab-b622-2a1a2b21c363.png" alt="Product Impact - will success create huge value?" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>2. Time to Impact – How long until we see product value?</strong></p>
<p>Time estimation is always hard in software. This is true for Development tasks, and even more so for Research. You learned ways to manage this uncertainty <em>during</em> Research in <a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations">chapter 5</a>, but even at this early pre-Research stage, you should consider the timeline.</p>
<p>Ask yourself two related questions:</p>
<ul>
<li><p><strong>How long for the Research itself?</strong> (days? weeks? months?)</p>
</li>
<li><p><strong>How long from successful Research to product impact?</strong> (immediate integration? requires significant Development? needs market validation?)</p>
</li>
</ul>
<p>The total timeline matters because:</p>
<ul>
<li><p>Research that takes 6 months but delivers immediate product value might be worthwhile.</p>
</li>
<li><p>Research that takes 2 months but requires 8 more months of Development might not be worth it if your product roadmap can't accommodate that.</p>
</li>
<li><p>Research that takes 1 year with uncertain outcomes probably isn't worth pursuing unless the potential impact is transformational.</p>
</li>
</ul>
<p>Of course, the actual timespans vary greatly by context (and specifically by the company you work for).</p>
<p>Consider also whether you can achieve <strong>incremental value</strong>. Can you get <em>some</em> product impact in 3 months even if the full solution takes 9 months? This significantly de-risks longer Research initiatives.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919218931/3cdf5c7b-fd5c-4472-be89-e3fed8cda147.png" alt="Time to Impact - how long until we see product results?" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>3. Resources – Do you have what you need?</strong></p>
<p>Research requires specific resources beyond just "engineering time":</p>
<p><strong>Knowledge</strong>: Do you have team members familiar with the relevant:</p>
<ul>
<li><p>Technical domain (for example, NLP, compiler design, distributed systems)?</p>
</li>
<li><p>Business domain (for example, medical diagnostics, financial regulations)?</p>
</li>
<li><p>Similar problems solved elsewhere?</p>
</li>
</ul>
<p>If not, can you acquire this knowledge in reasonable time? (Reading papers for a week: reasonable. Earning a PhD: not reasonable.)</p>
<p><strong>Capacity</strong>: Can you dedicate someone (or multiple people) for the expected duration? Research requires sustained focus – splitting someone 10% on Research and 90% on urgent product work rarely succeeds.</p>
<p><strong>Dependencies</strong>: Do you need:</p>
<ul>
<li><p>Access to specific data or systems?</p>
</li>
<li><p>Collaboration from other teams?</p>
</li>
<li><p>External expertise or consulting?</p>
</li>
<li><p>Budget for tools, cloud resources, or datasets?</p>
</li>
</ul>
<p>If critical resources are unavailable or expensive to obtain, the initiative may not be viable.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919272463/2a6a5d81-a55b-4dc8-bfee-afec9f0175f8.png" alt="Resources - Do we have the knowledge, capacity, and dependencies?" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-pre-research-checks">Pre-Research Checks</h4>
<p>You might not have clear answers to all three questions above. In that case, it makes sense to spend time answering them <em>before</em> actually pursuing the Research. This phase should be limited in time – ideally a few days, at most a week or two.</p>
<p>In this stage you might:</p>
<ol>
<li><p><strong>Interview customers and business stakeholders</strong> to understand the real impact of solving the problem.</p>
</li>
<li><p><strong>Read about the technological aspects</strong> and previous research done in this field to assess feasibility and timeline.</p>
</li>
<li><p><strong>Consult with people</strong> who have faced similar challenges (internal experts, academic contacts, or practitioners in your network).</p>
</li>
<li><p><strong>Run quick feasibility tests</strong> – not full Research, but simple checks like "Can we even access the data we'd need?" or "Does this library exist in our language?"</p>
</li>
</ol>
<p>After pre-research checks, you should have a clear answer: "Yes, we should pursue this because the impact is X, the timeline is roughly Y, and we have (or can get) the resources we need."</p>
<p>If you're not confident about substantial product impact, <em>don't start the Research</em>. This might sound harsh, but it's crucial: unfocused Research that doesn't connect to product needs wastes your most valuable resource – talented engineers' time and attention. One way to enhance your certainty about product impact is described in <a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>.</p>
<p>The next chapters assume you understand the product impact of successful Research outcomes, and will help you ensure you actually achieve this impact as quickly as possible.</p>
<h4 id="heading-how-to-choose-research-initiatives-summary">How to Choose Research Initiatives - Summary</h4>
<p><strong>Research initiatives</strong> start from either:</p>
<ul>
<li><p><strong>Problem-driven</strong>: A clear product need (strongly preferred)</p>
</li>
<li><p><strong>Opportunity-driven</strong>: A new technology (higher risk)</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919679213/0ebc0dd3-4294-4602-9f86-726341b1fc1c.png" alt="Starting research intiatives - either from a product problem, or a technological opportunity" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Before pursuing Research</strong>, answer three questions:</p>
<ol>
<li><p><strong>Product Impact</strong>: Will success create huge value?</p>
</li>
<li><p><strong>Time to Impact</strong>: How long until we see product results?</p>
</li>
<li><p><strong>Resources</strong>: Do we have the knowledge, capacity, and dependencies?</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919785248/179011ec-fed2-4123-b467-95739be62151.png" alt="Three questions to answer before pursuing Research" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Run pre-research checks</strong> (days, not weeks) to answer these questions if unclear.</p>
<p><strong>Only pursue Research</strong> when you're confident about substantial product impact.</p>
<p>The next chapter shows how to maintain that product connection throughout the Research process.</p>
<h3 id="heading-chapter-7-drawing-backwards">Chapter 7 - Drawing Backwards</h3>
<p>So you've chosen a research initiative, and done so correctly (following <a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">chapter 6</a>). Now, how do you start working on it?</p>
<p>Most teams start by diving into technical challenges: parsing COBOL, building callgraphs, implementing algorithms. But there's a more powerful approach that ensures your Research actually impacts the product: <strong>start from the end and work backwards</strong>.</p>
<p>This heuristic – working backwards from your goal – is one of the most valuable problem-solving strategies you can use. Let me show you why with a simple game.</p>
<h4 id="heading-the-spiral-game">The Spiral Game</h4>
<p>Consider this game:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768919878522/eff5e496-f352-4973-b5d6-2ff8dde9c286.jpeg" alt="A spiral board numbered from 1 to 41, with a pawn on spot 41" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>The rules are simple:</p>
<ul>
<li><p>The pawn starts on spot 41.</p>
</li>
<li><p>On each turn, a player moves the pawn backward between 1 to 6 spots. That is, if the pawn is on spot 41, you can move it to any spot from 35 to 40.</p>
</li>
<li><p>The player who moves the pawn to spot 1 wins.</p>
</li>
</ul>
<p>Take a moment: If you go first, how would you play to guarantee a win?</p>
<p>(I do encourage you to take a moment and try this for yourself first.)</p>
<p>Most people start thinking from the current position (spot 41) and try to calculate forward: "If I move 3 spaces, they can move 2, then I can move 4..." This quickly becomes overwhelming – too many possible moves to track.</p>
<p>But if you <strong>work backwards</strong>, the solution becomes clear:</p>
<p><strong>Starting from the end (spot 1):</strong></p>
<ul>
<li><p>To win, you need the pawn on spot 1 on your turn.</p>
</li>
<li><p>Your opponent just moved, so the pawn could be on spots 2-7 (since they moved 1-6 backward from wherever it was).</p>
</li>
<li><p>For any spot from 2-7, you can move directly to spot 1.</p>
</li>
<li><p><strong>Conclusion</strong>: If the pawn is on spots 2-7 at the start of your turn, you win.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768920391528/1b74e6ac-43f1-4dca-9760-f38cf2b849a0.png" alt="You do *not* want to land on spots 2-7" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Continue working backwards (from spots 2-7):</strong></p>
<ul>
<li><p>You want your opponent to land on spots 2-7.</p>
</li>
<li><p>From spot 8, no matter what they do (move 1-6), they land on spots 2-7.</p>
</li>
<li><p><strong>Conclusion</strong>: If you get the pawn to spot 8, you guarantee a win.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768920572462/3f4ca3a4-e037-4b63-89dc-830da52d73ed.png" alt="If you land on spot 8, you win" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Continue working backwards from spot 8:</strong></p>
<p>Notice that you've just created a "new" game: you no longer need to land on spot 1 in order to win. It's enough that you land on spot 8 – as from there, you can win no matter what your opponent does.</p>
<p>So, how do you ensure you can land on spot 8?</p>
<ul>
<li><p>Spots 9-14 all allow moving to spot 8.</p>
</li>
<li><p>So if your opponent starts their turn with pawn on a spot between 9-14, you can force it to 8.</p>
</li>
<li><p>Which means you do <em>not</em> want to land on spots 9-14, but you do want to land on 15 (which will force your opponent, in turn, to land somewhere between 9-14).</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768920735421/e390c664-846d-449e-a3ee-f9907ce2cbcb.png" alt="If you land on spot 15, you win" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Again, you've just created a "new" game: where your goal is to land on spot 15. From there, you already know how to win.</p>
<p>You can keep going like this, drawing backwards – would you want to land on spot 16 or not? How about 17? Until, at some point...</p>
<p><strong>The pattern emerges:</strong></p>
<ul>
<li><p>Safe spots for you: 1, 8, 15, 22, 29, 36</p>
</li>
<li><p>From any of these, your opponent cannot avoid giving you another safe spot</p>
</li>
<li><p>These are all numbers of the form: <code>1 + 7n</code></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921127375/389c1f9b-f5dc-45b6-9e69-ec986d9bd5a8.png" alt="The winning pattern" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>The winning strategy:</strong></p>
<ul>
<li><p>From spot 41, move 5 spots backward to reach spot 36 (a "safe spot").</p>
</li>
<li><p>No matter what your opponent does, you can always move to the next "safe spot".</p>
</li>
<li><p>Eventually, you reach spot 1 and win.</p>
</li>
</ul>
<p>Notice what happened: By working backwards from the goal, you discovered the systematic solution. Working forward from the start position would have been much, much harder.</p>
<p>You actually deployed a second, powerful heuristic here: considering specific cases (1, 8, 15, 22, 29, 36) – and generalizing (<code>1+7n</code>). This heuristic is also very common in research, though not specifically when aiming to ensure product impact.</p>
<h4 id="heading-how-to-apply-drawing-backwards-to-product-led-research">How to Apply Drawing Backwards to Product-led Research</h4>
<p>Let's connect this to Product-led Research. When you face a complex Research challenge, the question isn't "What technical problem should I solve first?" but rather:</p>
<p><strong>"If the Research succeeds, what would the result look like?"</strong></p>
<p>This forces you to:</p>
<ol>
<li><p><strong>Connect to product impact</strong>: You must envision the end state that creates value.</p>
</li>
<li><p><strong>Work systematically</strong>: Like the spiral game, you identify the chain of dependencies backward.</p>
</li>
<li><p><strong>Validate assumptions</strong>: Before solving sub-problems, ensure they lead to your goal.</p>
</li>
</ol>
<p>Let me show you how this worked in practice at Swimm.</p>
<h4 id="heading-case-study-extracting-business-rules-from-cobol">Case Study: Extracting Business Rules from COBOL</h4>
<p>At Swimm, we wanted to automatically generate documents from COBOL codebases that included all the extracted business rules.</p>
<p><strong>Quick context on business rules:</strong> Business rules are the constraints, conditions, and actions embedded within software that reflect organizational policies. For example, in money transfer logic:</p>
<ul>
<li><p>A customer cannot transfer more than their available balance (overdraft limits notwithstanding).</p>
</li>
<li><p>High-value transfers require additional verification.</p>
</li>
<li><p>Cross-currency transfers must apply current exchange rates.</p>
</li>
</ul>
<p>Some sources define business rules with three elements: Event, Condition, Action:</p>
<pre><code class="lang-plaintext">ON &lt;Event&gt;
IF &lt;Condition&gt;
THEN &lt;Action&gt;
ELSE &lt;Action&gt;
</code></pre>
<p>Our goal was to extract all business rules from a COBOL codebase. While challenging in any codebase, it's particularly acute in legacy COBOL code. (If you're interested in the technical details, see <a target="_blank" href="https://swimm.io/blog/blackbox-to-blueprint-extracting-business-logic-from-cobol-applications">this post</a>.) For this book, it's sufficient to know that many research attempts over the last few decades have tried different approaches to face this challenge.</p>
<p><strong>Where Do You Even Start?</strong></p>
<p>Faced with this problem, you might think:</p>
<ul>
<li><p>"Should I build a callgraph of all functions? That means I need to parse COBOL code..."</p>
</li>
<li><p>"Should I create a COBOL parser first?"</p>
</li>
<li><p>"Maybe I should read academic papers about program comprehension?" (Good practice during the pre-Research checks phase from <a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">chapter 6</a>)</p>
</li>
<li><p>"Perhaps I should track COBOL variables through the codebase?"</p>
</li>
<li><p>"Should I distinguish business conditions ('if requested transfer amount &gt; available balance') from technical conditions ('if variable not initialized, show error')?"</p>
</li>
</ul>
<p>Each of these might require its own research effort. Where do you start?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921215403/e663ef18-3ba7-4cec-a3e3-9e432fa781e0.png" alt="Where do you start?" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Drawing Backwards: Start with the End Result</strong></p>
<p>Drawing backwards made us ask:</p>
<p><strong>"If the Research succeeds, what would the result look like?"</strong></p>
<p>When we first asked ourselves this question, we weren't sure. We knew from our clients that they wanted extracted business rules, but we couldn't know what the "ideal" output would look like.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921373545/b604f6dc-5c41-4076-afa9-77299a43c6e7.png" alt="Start with the end result" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>So we decided, <strong>before tackling any technical challenges</strong>, to manually create documents showing extracted business rules from sample programs. We did this completely manually: no parsing, no algorithms, just understanding COBOL code ourselves and writing documentation.</p>
<p>We did this for various types of applications from different codebases, and learned:</p>
<ul>
<li><p>There's no single "right" way to construct such a document.</p>
</li>
<li><p>The output structure differs from one program to another.</p>
</li>
<li><p>Certain patterns appear consistently across business logic.</p>
</li>
</ul>
<p>By creating these documents manually, we formed a hypothesis: <strong>"This is what the output should look like, which means this output would make the biggest impact on the product. This is our north star."</strong></p>
<p>But was it actually the north star?</p>
<p><strong>Validating the Hypothesis</strong></p>
<p>Once we manually wrote the documents, it was time to verify our hypothesis. With concrete output in hand, we could:</p>
<ol>
<li><p>Discuss internally within the team – get feedback from engineers who understand both COBOL and our product.</p>
</li>
<li><p>Reach out to clients – show them the actual output and ask: "Does this solve your problem?"</p>
</li>
</ol>
<p>We deliberately <strong>refrained from solving hard technological challenges</strong> before knowing where we were aiming.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769096476455/2c4b25df-b9d9-4fc1-9b4a-f0704164726c.png" alt="Hypothesize about your end result" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Working Backwards Through Sub-Problems</strong></p>
<p>The manual documents also gave us something crucial: a concrete example to analyze backwards.</p>
<p>For instance, we saw that our documents listed many conditions. This made us realize we would (most probably) need to:</p>
<ol>
<li><p><strong>Find conditions</strong> in the code.</p>
</li>
<li><p><strong>Filter out business-related conditions</strong> (vs. technical conditions).</p>
</li>
<li><p><strong>Explain the condition</strong> in the document.</p>
</li>
</ol>
<p><strong>Here's where drawing backwards becomes powerful:</strong> We tackled (3) before (2), and (2) before (1).</p>
<p>Why? Because we needed to solve (3) to reach our goal – creating impactful documents.</p>
<p>This means we <strong>mocked the first two steps</strong> – we assumed we already had a way to find conditions and filter business-related ones. So we already had our list of business conditions, and now the challenge was: for each condition, explain it clearly in the output document.</p>
<p>This approach prevented us from spending weeks on tasks (1) and (2), only to discover that our explanation approach (3) didn't actually work. If we can't accomplish (3) assuming (1) and (2) are solved, then perhaps this entire approach isn't viable, and we need to reconsider alternatives.</p>
<p>The logic is clear: While solving (3) ultimately requires solving (1) and (2), if we fail at (3) even with (1) and (2) accomplished, then pursuing (1) and (2) might not be worth the effort at all.</p>
<p><strong>What does mocking a dependency look like in practice?</strong> In our case, mocking steps (1) and (2) meant manually identifying a handful of business conditions from the COBOL code ourselves, rather than building automated systems to find them. We created a small, hand-crafted list of conditions that we <em>knew</em> were business-relevant and existed in our sample programs, and used that as input for testing our explanation approach in step (3).</p>
<h4 id="heading-why-drawing-backwards-is-so-powerful">Why Drawing Backwards Is So Powerful</h4>
<p>The advantages of drawing backwards become clear from both the game examples and the COBOL case study:</p>
<p><strong>1. Forces Connection to Product Impact</strong></p>
<p>Like working backwards from spot 1 in the spiral game, starting with "what does successful output look like?" forces you to think about end-user value. You can't start drawing backwards without a clear goal. This prevents the common failure mode of technically interesting Research that doesn't impact the product.</p>
<p><strong>2. Provides a System for Progressing</strong></p>
<p>When Research seems like a huge, daunting task with endless options, working backwards gives you a systematic approach. Just as the spiral game became trivial once you worked backwards to identify the safe spots (1, 8, 15, 22...), Research becomes more manageable when you work backwards from the desired output to identify the dependencies.</p>
<p><strong>3. Validates Each Step Before Investment</strong></p>
<p>Working backwards lets you validate that each sub-problem actually contributes to your goal before you invest significant effort. In the COBOL example, we could verify that our explanation approach (step 3) worked before spending weeks on finding and filtering conditions (steps 1 and 2).</p>
<h4 id="heading-practical-application-your-research-tree">Practical Application: Your Research Tree</h4>
<p>Drawing backwards integrates naturally with the Research Tree from <a class="post-section-overview" href="#heading-chapter-4-the-research-tree">chapter 4</a>. When you create your tree:</p>
<p><strong>Start with the end:</strong></p>
<ul>
<li><p>Root of tree: "Generate impactful business rule documentation".</p>
</li>
<li><p>First question: "What should successful output look like?"</p>
</li>
<li><p>Approach: Create manual examples.</p>
</li>
</ul>
<p><strong>Then work backwards:</strong></p>
<ul>
<li><p>Once you have output, ask: "What do we need to produce this?".</p>
</li>
<li><p>This reveals the actual sub-questions and their dependencies.</p>
</li>
<li><p>Each branch represents a prerequisite you need to solve.</p>
</li>
</ul>
<p><strong>Validate before going deeper:</strong></p>
<ul>
<li><p>Before pursuing any branch deeply, ask: "If I solve this, does it actually get me closer to the goal?"</p>
</li>
<li><p>Mock out dependencies to test approaches cheaply.</p>
</li>
<li><p>Use time-boxing (from <a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations">chapter 5</a>) to limit exploration of any branch.</p>
</li>
</ul>
<h4 id="heading-summary-drawing-backwards">Summary: Drawing Backwards</h4>
<p><strong>Drawing backwards</strong> is the heuristic of starting from your desired end state and working systematically toward your current position.</p>
<p><strong>In Product-led Research</strong>, drawing backwards means:</p>
<ol>
<li><p>Start by defining what successful output looks like (often manually or semi-manually).</p>
</li>
<li><p>Validate the output with stakeholders before technical work.</p>
</li>
<li><p>Work backwards through dependencies, solving them in reverse order.</p>
</li>
<li><p>Validate that each step contributes to the goal before major investment.</p>
</li>
</ol>
<p>This heuristic ensures that Research connects to product impact, since you start with the product goal. It provides systematic progress even when problems seem overwhelming, and makes you validate each step before you invest heavily.</p>
<p><strong>Integration with other tools:</strong></p>
<ul>
<li><p>Use with Research Tree (<a class="post-section-overview" href="#heading-chapter-4-the-research-tree">chapter 4</a>) to map backwards dependencies.</p>
</li>
<li><p>Apply time-boxing (<a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations">chapter 5</a>) to limit exploration of each branch.</p>
</li>
<li><p>Combine with pre-Research checks (<a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">chapter 6</a>) to validate product impact.</p>
</li>
</ul>
<p>In the next chapter, you’ll learn about two limitations of drawing backwards and how to address them with continuous end-to-end iterations.</p>
<h3 id="heading-chapter-8-end-to-end-iterations">Chapter 8 - End-to-End Iterations</h3>
<p>Your most important role is ensuring that Research impacts the product. One major risk: spending weeks on research questions that seem vital, only to discover they don't actually impact the product.</p>
<p>In <a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>, I advocated for drawing backwards – starting from product impact and working your way back to research questions. This is indeed powerful, especially because it forces you to focus on the end result and validate it with users.</p>
<p>But drawing backwards alone has limitations. Two risks emerge:</p>
<p><strong>Risk 1: Infeasibility in practice</strong> Your manually-created "ideal output" might be technically infeasible or impossibly expensive to generate. You won't discover this until you try to build it.</p>
<p><strong>Risk 2: Lack of real-world validation</strong> Since you haven't completed an end-to-end process, you probably haven't run your solution on clients' actual data (assuming you can't access it during the manual phase). Continuing our COBOL example from the previous chapter, what works on carefully-chosen examples might fail on real codebases.</p>
<p>These two risks are why I advocate for <strong>continuous end-to-end iterations</strong>.</p>
<h4 id="heading-drawing-backwards-end-to-end-a-combined-approach">Drawing Backwards + End-to-End: A Combined Approach</h4>
<p>These aren't competing approaches – they're complementary:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Heuristic</td><td>Purpose</td><td>What It Gives You</td><td>Strength</td><td>Limitation</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Drawing Backwards</strong> (<a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>)</td><td>Define target and path</td><td>1. Target output\ 2. Hypothesized chain of steps to get there\ 3. Order of dependencies</td><td>Ensures product focus; reveals what you need to build</td><td>Hypotheses may be wrong; doesn't validate feasibility on real data</td></tr>
<tr>
<td><strong>End-to-End Iterations</strong> (this chapter)</td><td>Validate and build incrementally</td><td>1. Proof the chain works\ 2. Learning from real data\ 3. Prioritized improvements</td><td>Validates feasibility; discovers what actually works</td><td>Can lose direction without clear target and chain</td></tr>
</tbody>
</table>
</div><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921601722/310d3a80-6325-4d0c-849b-cbd39b972a69.png" alt="These are complementary heuristics" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>The recommended flow:</strong></p>
<ol>
<li><p>Use drawing backwards to:</p>
<ul>
<li><p>Define your target output (manually create examples, validate with users).</p>
</li>
<li><p>Identify the chain of intermediary steps needed to produce that output.</p>
</li>
<li><p>Understand the order of dependencies.</p>
</li>
</ul>
</li>
<li><p>Switch to end-to-end iterations to:</p>
<ul>
<li><p>Test whether your hypothesized chain actually works.</p>
</li>
<li><p>Validate on real data (not just your manual examples).</p>
</li>
<li><p>Incrementally build toward the target.</p>
</li>
</ul>
</li>
<li><p>Throughout iterations, keep both the target AND the chain from step 1 as your guide.</p>
</li>
</ol>
<p>Drawing backwards already outlines your end-to-end process (Principle 1 below). End-to-end iterations validate and build that process incrementally, learning what works and what doesn't.</p>
<h4 id="heading-the-five-principles-of-end-to-end-iterations">The Five Principles of End-to-End Iterations</h4>
<p>The end-to-end approach relies on five principles:</p>
<ol>
<li><p>Outline the end-to-end process.</p>
</li>
<li><p>Get to end-to-end by simplifying.</p>
</li>
<li><p>Ship it as fast as you can.</p>
</li>
<li><p>Gradually replace steps.</p>
</li>
<li><p>Get frequent feedback on results.</p>
</li>
</ol>
<p>Let me explain each principle using the COBOL business rules example from <a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>. Since this book isn't about COBOL, I'll keep explanations short while focusing on the methodology.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921744585/677b7220-73f7-4ef3-846c-9b32a14e1f34.png" alt="The five principles of end-to-end iterations" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-principle-1-outline-the-end-to-end-process">Principle 1: Outline the End-to-End Process</h4>
<p>Start by outlining the entire process from input to output. More accurately, outline the <em>hypothesized</em> end-to-end process – you can't know for certain until you test with users.</p>
<p><strong>If you followed drawing backwards from</strong> <a class="post-section-overview" href="#heading-chapter-7-drawing-backwards"><strong>chapter 7</strong></a><strong>, you already have this.</strong> Drawing backwards naturally produces this chain: you started with the target output, asked "what do I need to produce this?", then "what do I need for that?", working your way back to the starting input. That chain IS your end-to-end process outline.</p>
<p>For the COBOL business rules example: We used drawing backwards to identify that our document needed business rule sections, which meant we needed to explain conditions, which meant we needed to filter business conditions, which meant we needed to find conditions, which meant we needed to parse COBOL. Working backwards gave us this chain:</p>
<ol>
<li><p>Start with a COBOL program.</p>
</li>
<li><p>Parse the COBOL program into an Abstract Syntax Tree (AST).</p>
</li>
<li><p>Traverse the AST to find conditions.</p>
</li>
<li><p>Filter out business-related conditions (vs. technical conditions).</p>
</li>
<li><p>For every business rule, create a document section explaining the condition.</p>
</li>
<li><p>Sort document sections according to business rule dependencies.</p>
</li>
</ol>
<p>This is your first draft: the hypothesized process that drawing backwards revealed.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768921827862/4fd0559d-2b08-49ec-8f03-5c4dbad80d17.png" alt="First end-to-end process draft" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>How to outline:</strong></p>
<ul>
<li><p>Draw boxes on a whiteboard.</p>
</li>
<li><p>Use a flowchart if the process isn't linear.</p>
</li>
<li><p>Keep it visible throughout the research.</p>
</li>
<li><p>Update it as you learn.</p>
</li>
</ul>
<p>The outline serves as your map – it shows you where you are and what you're building toward.</p>
<h4 id="heading-principle-2-get-to-end-to-end-by-simplifying">Principle 2: Get to End-to-End by Simplifying</h4>
<p>Your goal: make the process work end-to-end. Start with input (a COBOL program), reach the output (a document with business rules), while passing through the intermediate stages.</p>
<p>This sounds like too much. Don't you need to complete the whole research to achieve this?</p>
<p><strong>Definitely not.</strong> The trick is to find the easiest way to get end-to-end by taking shortcuts and making assumptions that are definitely too generous for production. You should fight your inner engineer who wants to "do it right" from the start. Your goal is to get an end-to-end process working, as this heuristic is far more valuable than perfecting one step.</p>
<p>This means that some of the steps can be completed manually, or with very simple implementations that you know won't work in production. Remember it is an intermediate milestone, not the final product.</p>
<p>For our COBOL example:</p>
<ul>
<li><p>Start with a single, known COBOL program.</p>
</li>
<li><p><strong>Skip parsing</strong> – just manually write a list of conditions for the next stage.</p>
</li>
<li><p>The filtering function returns <code>true</code> if business-related, <code>false</code> otherwise.</p>
<ul>
<li><p>First implementation: a simple mapping between input conditions (that you know of) and whether to return <code>true</code> or <code>false</code>.</p>
</li>
<li><p>Alternative: always return <code>true</code> – yes, you'll get non-relevant rules, but that's a problem for <em>later</em>.</p>
</li>
</ul>
</li>
<li><p>The document generation might also be manual for the first pass.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768922067666/202242c9-fa00-4dcf-9b23-d0b1bce26da8.png" alt="With shortcuts, we get to an end-to-end process quickly" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>End result:</strong> A rough-looking document, generated by a combination of manual work and code that works solely on a single program. This is far from shippable, but it's an extremely important milestone for ensuring research impacts the product.</p>
<p>You might argue that it's overkill, and why waste this time on manual steps when you'll need to automate them eventually? Even if you don't, I promise from experience that many researchers and engineers feel that way.</p>
<p>From my own experience, I learned (the hard way) that this pays off. Getting to a working end-to-end makes sure you:</p>
<ul>
<li><p>Validate that the entire flow works.</p>
</li>
<li><p>Identify bottlenecks and blockers early.</p>
</li>
<li><p>Have something concrete to show and get feedback on.</p>
</li>
<li><p>Prevent spending months on one component that turns out to be unnecessary.</p>
</li>
</ul>
<h4 id="heading-principle-3-ship-it-as-fast-as-you-can">Principle 3: Ship It as Fast as You Can</h4>
<p>By the end of Principle 2, you have a working end-to-end process for a single case. You definitely can't ship it yet – it only works on one specific program, certainly not the client's program.</p>
<p><strong>Next milestone: make it shippable.</strong></p>
<p>Does "shippable" mean it works on <em>any</em> program? That's too hard and takes too long. <strong>You need shortcuts.</strong></p>
<p>This is where creativity matters. For our COBOL example:</p>
<p><strong>Information gathering:</strong></p>
<ul>
<li><p>If running on a client's program, get as much information as possible.</p>
</li>
<li><p>Perhaps assume it's less than 1,000 lines of code.</p>
</li>
<li><p>Perhaps you know which COBOL dialect the client uses, so you don't need to support others (fun fact: <a target="_blank" href="https://www.cs.vu.nl/grammarware/500/500.pdf">COBOL has more than 300 dialects</a>. Well, it's fun for you, not for those who need to support them).</p>
</li>
</ul>
<p><strong>Algorithmic shortcuts:</strong></p>
<ul>
<li><p>Use regular expressions to find conditions instead of a full parser.</p>
</li>
<li><p>Yes, you'll miss some conditions – that's a problem for <em>later</em>.</p>
</li>
</ul>
<p><strong>UX shortcuts:</strong></p>
<ul>
<li><p>Skip the document generation. Just print rules to the console.</p>
</li>
<li><p>Run from the command line without a GUI.</p>
</li>
<li><p>Manual configuration file instead of user interface.</p>
</li>
</ul>
<p><strong>Your goal is clear: ship it.</strong></p>
<p>It doesn't need to be perfect. It needs to be enough to learn from this iteration. If you don't ship, you can only learn from your intuition – a very bad idea.</p>
<p>Unlike in Principle 2, note that here you don't generate an output (partially) manually - you need a working software that can run on real data.</p>
<p><strong>What "shippable" means:</strong></p>
<ul>
<li><p>Works on the client's actual data (even if imperfectly).</p>
</li>
<li><p>Produces output you can get real feedback on.</p>
</li>
<li><p>Doesn't require your manual intervention for each run.</p>
</li>
</ul>
<p><strong>What "shippable" doesn't mean:</strong></p>
<ul>
<li><p>Perfect accuracy.</p>
</li>
<li><p>Handles all edge cases.</p>
</li>
<li><p>Production-quality code.</p>
</li>
<li><p>Beautiful user interface.</p>
</li>
</ul>
<p>You can't ship just <em>anything</em>, though. In our example, if you only have a solution that works on one specific test program you created, generating an irrelevant document for the client wastes time and teaches you nothing.</p>
<p>You can't learn from iteration without shipping. And you can't ship without a working end-to-end process. I know it sounds obvious, but many teams miss this in practice as they get into the rabbit hole of solving one step "the right way" before validating the entire flow.</p>
<h4 id="heading-principle-4-gradually-replace-steps-while-carefully-prioritizing">Principle 4: Gradually Replace Steps, While Carefully Prioritizing</h4>
<p>Now you have a working end-to-end process. You can start replacing various steps' implementations with better ones:</p>
<ul>
<li><p>Replace manual steps with automated ones.</p>
</li>
<li><p>Remove shortcuts and add more robust implementations.</p>
</li>
<li><p>Improve accuracy and coverage</p>
</li>
</ul>
<p>After shipping, you'll have many things you think you <em>must</em> replace immediately. But remember: the goal is making research impact the product. To do that, you need careful prioritization.</p>
<p><strong>The Prioritization Framework</strong></p>
<p>Prioritize changes based on three criteria:</p>
<p><strong>1. Learned Necessity</strong> Did you learn that something doesn't work in the current implementation and <strong>must</strong> be fixed for the product to be viable?</p>
<p><em>Example: "Regular expressions miss nested conditions, and 60% of the client's business rules are in nested conditions. We must use a real parser."</em></p>
<p><strong>2. Learning Potential</strong> Will changing this implementation help you learn more about product impact in the next iteration?</p>
<p><em>Example: "If we improve the filtering accuracy from 40% to 80%, we'll learn whether the document format is actually useful when it contains mostly-correct content."</em></p>
<p><strong>3. Effort Estimation</strong> How much time will this change take?</p>
<p><em>Example: "Building a full parser: 3 weeks. Improving regex to handle nested conditions: 2 days. The latter gives us 80% of the value for 10% of the effort."</em></p>
<p>Continuing with our COBOL example, you may consider and prioritize these changes following the first iteration:</p>
<pre><code class="lang-plaintext">Changes after first iteration:

- Fix parser to handle nested conditions [Learned: Critical, 2 days] → DO FIRST
- Add GUI for document generation [Nice-to-have, 1 week] → DEFER
- Improve filtering accuracy [Learning: Critical, 3 days] → DO SECOND  
- Support additional COBOL dialects [No evidence needed, very long time...] → DEFER
- Better document formatting [Client mentioned it, 1 week] → DEFER (validate content first)
</code></pre>
<p>Iterate fast: change something, ship again, get feedback. Don't solve every issue you find, even issues clients mention. Ask: "What's the most important thing to change to learn something in the very next iteration?"</p>
<h4 id="heading-principle-5-get-frequent-feedback-on-results">Principle 5: Get Frequent Feedback on Results</h4>
<p>The trick is to be obsessed with getting as much feedback as you can, on each and every iteration.</p>
<p><strong>On each iteration:</strong></p>
<ol>
<li><p><strong>Get feedback on the end result</strong></p>
<ul>
<li><p>Show the actual output to users.</p>
</li>
<li><p>When applicable, don't just ask "does this work?" – also watch them try to use it.</p>
</li>
<li><p>Identify what works, what doesn't, what's missing.</p>
</li>
</ul>
</li>
<li><p><strong>Understand the next questions to answer</strong></p>
<ul>
<li><p>What did you learn about product impact?</p>
</li>
<li><p>What assumptions were validated or invalidated?</p>
</li>
<li><p>What new questions emerged?</p>
</li>
</ul>
</li>
<li><p><strong>Plan the next iteration accordingly</strong></p>
<ul>
<li><p>Use the prioritization framework above.</p>
</li>
<li><p>Focus on learning, not building.</p>
</li>
</ul>
</li>
<li><p><strong>Implement minimal changes to answer questions</strong></p>
<ul>
<li><p>Don't fix everything.</p>
</li>
<li><p>Make the smallest changes that will answer your next most important question.</p>
</li>
<li><p>Keep the cycle fast (days to weeks, not months).</p>
</li>
</ul>
</li>
</ol>
<p><strong>Example iteration cycle:</strong></p>
<pre><code class="lang-plaintext">Iteration 1:
- Shipped: Regex-based condition finder, always-true filter, console output.
- Learned: Document structure works, but too many false positives (noise).
- Question: Is filtering accuracy the blocker to usefulness?
- Next: Improve filtering to 80% accuracy, ship again.

Iteration 2:
- Shipped: Same regex finder, smarter filtering (80% accurate), console output.
- Learned: With better filtering, users found the output useful!
- Question: Do we need a parser, or is regex sufficient?
- Next: Test on larger programs to see where regex breaks down.

Iteration 3:
- Shipped: Same pipeline, tested on 10 real programs.
- Learned: Regex fails on 4/10 programs (nested conditions).
- Question: Parser worth the investment now?
- Next: Build parser for nested conditions, ship again.
</code></pre>
<p>Notice: Each cycle is fast, focused on one question, and based on real learning.</p>
<p>In real life, you may want to tackle a few questions per iteration. If two things are clear, fix them before shipping again so you can actually gain valuable feedback rather than hearing the same complaints.</p>
<p>Also, when working with real clients, they might not be as receptive to trying things so many times – so you’ll need to consider that aspect as well. Regardless, the key remains the same: keep cycles short and focused on learning.</p>
<h4 id="heading-integration-with-other-tools">Integration with Other Tools</h4>
<p>End-to-end iterations work best when combined with other research management tools:</p>
<p><strong>Research Tree (</strong><a class="post-section-overview" href="#heading-chapter-4-the-research-tree"><strong>chapter 4</strong></a><strong>):</strong></p>
<ul>
<li><p>The outlined process becomes a branch in your tree.</p>
</li>
<li><p>Each iteration tests different approaches on branches.</p>
</li>
<li><p>Failed iterations mark branches red, successful ones mark green.</p>
</li>
</ul>
<p><strong>Time-boxing (</strong><a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations"><strong>chapter 5</strong></a><strong>):</strong></p>
<ul>
<li><p>Time-box each iteration.</p>
</li>
<li><p>If you can't ship in the time box, you're building too much.</p>
</li>
</ul>
<p><strong>Drawing Backwards (</strong><a class="post-section-overview" href="#heading-chapter-7-drawing-backwards"><strong>chapter 7</strong></a><strong>):</strong></p>
<ul>
<li><p>Drawing backwards (<a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>) defines both:</p>
<ul>
<li><p>The target output.</p>
</li>
<li><p>The hypothesized chain of intermediary steps to reach it.</p>
</li>
</ul>
</li>
<li><p>End-to-end iterations test whether that chain actually works on real data.</p>
</li>
<li><p>The target from drawing backwards acts as your north star throughout iterations.</p>
</li>
<li><p>Each iteration validates or refines the steps that drawing backwards identified.</p>
</li>
<li><p>Use both: drawing backwards reveals what to build, while end-to-end iterations prove it works and let you test it incrementally.</p>
</li>
</ul>
<h4 id="heading-summary-end-to-end-iterations">Summary: End-to-End Iterations</h4>
<p><strong>End-to-end iterations</strong> ensure Research impacts the product by continuously validating feasibility and learning from real data.</p>
<p><strong>The five principles:</strong></p>
<ol>
<li><p><strong>Outline the process</strong>: Draw backwards already gives you this: the chain from input to output.</p>
</li>
<li><p><strong>Simplify to get end-to-end</strong>: Use shortcuts and manual steps to make the whole chain work.</p>
</li>
<li><p><strong>Ship fast</strong>: Real data teaches what theory can't.</p>
</li>
<li><p><strong>Prioritize carefully</strong>: Use the three-criteria framework:</p>
<ul>
<li><p>Learned necessity (is it broken?)</p>
</li>
<li><p>Learning potential (what will you learn?)</p>
</li>
<li><p>Effort estimation (how long will it take?)</p>
</li>
</ul>
</li>
<li><p><strong>Get frequent feedback</strong>: Fast cycles (days to weeks) focused on learning.</p>
</li>
</ol>
<h3 id="heading-part-3-summary">Part 3 Summary</h3>
<p>Back in <a class="post-section-overview" href="#heading-chapter-2-research-and-development">chapter 2</a>, you learned that your role as a Research leader is to:</p>
<ol>
<li><p>Ensure Research connects to product impact.</p>
</li>
<li><p>Ensure Research is done effectively.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768922191304/a1d5bec0-59c4-4414-8a7b-73186057591c.png" alt="Your Role as Research Leader" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><a class="post-section-overview" href="#heading-part-2-research-management-methods">Part 2</a> handled ensuring Research is done effectively.</p>
<p><a class="post-section-overview" href="#heading-part-3-ensuring-product-impact">Part 3</a> handled ensuring Research connects to product impact – your most important responsibility. This part provided a complete methodology for ensuring product impact through three complementary stages:</p>
<h4 id="heading-the-three-stages-of-product-led-research">The Three Stages of Product-Led Research</h4>
<p><strong>Stage 1: Choose research that matters</strong> (<a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">chapter 6</a>)</p>
<p>Before starting any Research, answer three critical questions:</p>
<ol>
<li><p><strong>Product impact</strong>: Will success create huge value?</p>
</li>
<li><p><strong>Time to impact</strong>: How long until we see product results?</p>
</li>
<li><p><strong>Resources</strong>: Do we have the knowledge, capacity, and dependencies?</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768922572960/eaf4d34f-b9cc-4350-8dee-db766bdcbb34.png" alt="Three questions to answer before pursuing Research" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>You learned to distinguish between problem-driven research (starting from validated customer pain points, which is strongly preferred) and opportunity-driven research (starting from new technologies).</p>
<p>Run focused pre-research checks to answer these questions. Only pursue Research when confident about substantial product impact.</p>
<p><strong>Stage 2: Start from product value and work backwards</strong> (<a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">chapter 7</a>)</p>
<p>Once you've chosen what to research, the drawing backwards heuristic ensures that you start right. Instead of diving into technical challenges, start from the end:</p>
<ol>
<li><p><strong>Manually create the desired output</strong>: What should successful Research produce? Create it by hand before solving any technical problems.</p>
</li>
<li><p><strong>Validate with stakeholders or customers</strong>: Show them the output and confirm it solves their problem.</p>
</li>
<li><p><strong>Work backwards through dependencies</strong>: From that validated output, identify what you need to produce it, then what you need for that, working your way back to your starting point.</p>
</li>
<li><p><strong>Solve in reverse order</strong>: Tackle the final step first (with earlier steps mocked), validating that each step contributes to the goal before investing heavily in earlier dependencies.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768922685763/25ac6ca8-088a-48cf-a8d9-1fa877b5536b.png" alt="Hypothesize about your end result" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>The spiral game example showed why this works: working backwards from the goal reveals systematic solutions that working forward obscures.</p>
<p>Drawing backwards forces product connection because you literally start with product output. It integrates with the Research Tree (<a target="_blank" href="%7B#heading-chapter-4-the-research-tree%7D">chapter 4</a>): While drawing backwards identifies <em>what</em> questions matter, the Tree helps you explore approaches for answering them.</p>
<p><strong>Stage 3: Validate and build iteratively</strong> (<a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations">chapter 8</a>)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768922924949/8d294792-5b29-4e42-b309-d613240d91d7.png" alt="The five principles of end-to-end iterations" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Drawing backwards alone has two limitations:</p>
<ul>
<li><p>Your manually-created "ideal output" might be technically infeasible to generate.</p>
</li>
<li><p>You haven't validated on real user data.</p>
</li>
</ul>
<p>End-to-end Iterations address both limitations. These two tools aren't competing approaches – rather, they complement one another:</p>
<h4 id="heading-how-the-three-stages-work-together">How the Three Stages Work Together</h4>
<p>These chapters form a complete methodology for product-led Research:</p>
<p><strong>Choose</strong> → <strong>Start from the end</strong> → <strong>Validate iteratively</strong></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives"><strong>Chapter 6</strong></a> ensures you choose research that COULD have huge impact (strategic decision).</p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-7-drawing-backwards"><strong>Chapter 7</strong></a> ensures you start from product value (planning backward from validated output).</p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations"><strong>Chapter 8</strong></a> ensures you continuously validate with real users.</p>
</li>
</ul>
<p>Each stage prevents different undesired, but painfully common outcomes:</p>
<ul>
<li><p><a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives"><strong>Chapter 6</strong></a> prevents pursuing research that won't matter (even if successful).</p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-7-drawing-backwards"><strong>Chapter 7</strong></a> prevents building technically correct solutions that don't create product value.</p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations"><strong>Chapter 8</strong></a> prevents building infeasible solutions or solutions that fail on real data.</p>
</li>
</ul>
<p>You now have the complete answer to "How do I ensure Research impacts the product?":</p>
<ol>
<li><p><strong>Choose wisely</strong>: Only pursue research with clear, huge product impact.</p>
</li>
<li><p><strong>Start from product value</strong>: Manually create and validate desired output before technical work.</p>
</li>
<li><p><strong>Work backwards</strong>: Identify dependencies from output back to starting point.</p>
</li>
<li><p><strong>Build end-to-end fast</strong>: Get entire chain working with shortcuts and manual steps.</p>
</li>
<li><p><strong>Ship to real users</strong>: Validate on actual data, not just examples.</p>
</li>
<li><p><strong>Iterate based on learning</strong>: Improve the chain incrementally, prioritizing what teaches you most.</p>
</li>
</ol>
<p>This methodology keeps product impact central at every stage: choosing, planning, and executing. It prevents the most expensive failure: "successful" Research that doesn't affect the product.</p>
<h2 id="heading-book-summary-1">Book Summary</h2>
<p>You picked up this book because managing Research is different from managing Development – and you needed concrete tools to handle that difference.</p>
<h3 id="heading-what-you-learned-about-research">What You Learned About Research</h3>
<p>In <a class="post-section-overview" href="#heading-chapter-1-what-is-research">chapter 1</a>, you learned that Research isn't about difficulty or technical sophistication. It's about <strong>uncertainty of approach</strong> – that is, confronting problems where you don't know if a solution exists, where multiple approaches might work but you're not sure which, and where the path to success isn't immediately clear.</p>
<p>You saw how Alan Schoenfeld's problem-solving framework breaks down the Research process into four components:</p>
<ul>
<li><p><strong>Knowledge base</strong> – what you know.</p>
</li>
<li><p><strong>Heuristics</strong> – strategies for approaching problems.</p>
</li>
<li><p><strong>Control</strong> – monitoring and adjusting your approach.</p>
</li>
<li><p><strong>Beliefs</strong> – your mindset toward the problem.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768923077868/e6e88335-e990-40bc-b64b-dda8a07b989b.png" alt="Schoenfeld's Framework" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>The good news: all four can be improved with the right management and methods.</p>
<p>In <a class="post-section-overview" href="#heading-chapter-2-research-and-development">chapter 2</a>, you explored the distinction between Research and Development more deeply. You learned that your role as a Research leader has two parts:</p>
<ol>
<li><p><strong>Ensure Research connects to product impact</strong>: "Successful" Research that doesn't affect the product is a failed project. This is the most important part in Product-led companies.</p>
</li>
<li><p><strong>Ensure Research is done effectively</strong>: Even brilliant researchers benefit from structured approaches.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768923207501/5a8ba41f-247b-4831-9ccd-0f92185c7cf1.png" alt="Your Role as Research Leader" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This two-part framework organized everything that followed.</p>
<h3 id="heading-how-to-do-research-effectively">How to Do Research Effectively</h3>
<p><strong>Part 2</strong> gave you concrete methods for effective Research execution – tools that work in <em>any</em> research context (whether it's Product-led or not).</p>
<p>In <a class="post-section-overview" href="#heading-chapter-3-why-methodology-matters-a-true-story">chapter 3</a>, I shared with you a personal reverse engineering classroom story. Students with sophisticated technical skills missed the obvious solution (checking the Help menu) because they lacked structured methodology. The story clearly showed that the problem isn't capability, it's often approach. This illustrated why you need the methods that follow.</p>
<p><a class="post-section-overview" href="#heading-chapter-4-the-research-tree">Chapter 4</a> introduced the <strong>Research Tree</strong> method – a living visual framework for systematically exploring solution paths. You learned:</p>
<ul>
<li><p>How to map questions you need to answer and approaches for answering them.</p>
</li>
<li><p>A decision framework for choosing which approach to try first: fastest feedback, lowest cost, best coverage.</p>
</li>
<li><p>How using the tree helps avoid common failure modes: jumping on the first idea, tunnel vision, inefficient learning, answering questions you don't need to, and lost context.</p>
</li>
</ul>
<p>The Research Tree helps you implement Schoenfeld's "control" component – helping you monitor and adjust your approach systematically rather than randomly trying things. It is helpful for a researcher, but as a Research leader, it allows you to guide your team effectively.</p>
<p>In <a class="post-section-overview" href="#heading-chapter-5-time-boxing-research-explorations">chapter 5</a>, you learned how to manage exploration without killing creativity. Since Research estimation is inherently difficult, time-boxing provides structure by setting time limits for specific research directions. After the allocated time, you stop to reconsider: What did you learn? Is this still the most promising path? This tool acknowledges uncertainty while preventing endless exploration, or diving too deep into rabbit holes that don't necessarily help your Product goals.</p>
<h3 id="heading-how-to-ensure-product-impact">How to Ensure Product Impact</h3>
<p><strong>Part 3</strong> focused on your most important responsibility: ensuring Research creates product value.</p>
<p><a class="post-section-overview" href="#heading-chapter-6-how-to-choose-research-initiatives">Chapter 6</a> showed you how to choose what directions to research – and more importantly, what <em>not</em> to pursue. You learned the distinction between:</p>
<ul>
<li><p><strong>Problem-driven research</strong> – starting from customer pain points (strongly preferred, lower risk).</p>
</li>
<li><p><strong>Opportunity-driven research</strong> – starting from new technologies (higher risk, needs validation).</p>
</li>
</ul>
<p>Before pursuing any Research initiative, you need to answer three questions:</p>
<ol>
<li><p><strong>Product impact</strong>: Will success create huge value?</p>
</li>
<li><p><strong>Time to impact</strong>: How long until we see product results?</p>
</li>
<li><p><strong>Resources</strong>: Do you and your team have the knowledge, capacity, and dependencies needed?</p>
</li>
</ol>
<p>You saw how to run focused pre-research checks to answer these questions.</p>
<p><a class="post-section-overview" href="#heading-chapter-7-drawing-backwards">Chapter 7</a> introduced a powerful heuristic for ensuring product connection: <strong>start from the end and work backwards</strong>. Through the spiral game example, you saw how working backwards reveals systematic solutions that working forward obscures.</p>
<p>In the COBOL business rules case study, you saw a practical application:</p>
<ol>
<li><p>Start by manually creating the desired output (before solving any technical challenges).</p>
</li>
<li><p>Validate that output with stakeholders.</p>
</li>
<li><p>Work backwards through dependencies, solving them in reverse order.</p>
</li>
<li><p>Validate that each step contributes to the goal before major investment.</p>
</li>
</ol>
<p>Drawing backwards forces connection to product impact because you must start with the product goal.</p>
<p><a class="post-section-overview" href="#heading-chapter-8-end-to-end-iterations">Chapter 8</a> showed you how to address two limitations of the drawing backwards heuristic through <strong>continuous end-to-end iterations</strong>. Your manually-created "ideal output" might be infeasible to generate, and you haven't validated it on real data. End-to-end iterations solve both problems.</p>
<p>You learned five principles to run effective end-to-end iterations:</p>
<ol>
<li><p><strong>Outline the end-to-end process</strong>: Drawing backwards already gives you this chain.</p>
</li>
<li><p><strong>Get to end-to-end by simplifying</strong>: Use shortcuts and manual steps to make the whole chain work.</p>
</li>
<li><p><strong>Ship it as fast as you can</strong>: Real data teaches what theory can't.</p>
</li>
<li><p><strong>Gradually replace steps</strong>: Prioritize based on learned necessity, learning potential, and effort.</p>
</li>
<li><p><strong>Get frequent feedback</strong>: Fast cycles focused on learning.</p>
</li>
</ol>
<p>Drawing backwards reveals what to build and in what order, while end-to-end iterations prove it works and build it incrementally.</p>
<h3 id="heading-your-toolkit-for-research-management">Your Toolkit for Research Management</h3>
<p>You now have a complete toolkit:</p>
<p><strong>From Part 2 (works for <em>any</em> research):</strong></p>
<ul>
<li><p><strong>Research Tree</strong> – maps solution space, chooses approaches systematically.</p>
</li>
<li><p><strong>Time-boxing</strong> – manages exploration with structure.</p>
</li>
</ul>
<p><strong>From Part 3 (specifically for product impact):</strong></p>
<ul>
<li><p><strong>Choosing frameworks</strong> – decides what deserves Research effort.</p>
</li>
<li><p><strong>Drawing backwards</strong> – forces product connection from the start.</p>
</li>
<li><p><strong>End-to-end iterations</strong> – validates feasibility and learns from real users.</p>
</li>
</ul>
<p>These methods work together. Drawing backwards identifies your goal and the chain of steps. The Research Tree maps approaches for each step. Time-boxing prevents getting deep into a rabbit hole when you should reconsider based on what you've learned, while acknowledging the inability to provide exact time estimates on Research tasks. End-to-end iterations validate and build incrementally.</p>
<h3 id="heading-my-message-to-you">My Message To You</h3>
<p>Research is fundamentally uncertain work. Applying traditional Development management practices fails because it assumes known solution paths, predictable timelines, and steady progress.</p>
<p>But Research doesn't have to be mystical or random. With the right frameworks, you can manage it systematically while maintaining focus on what matters: creating product value. You learned to ensure that Research is done effectively (part 2) and that it connects to product impact (part 3). You have concrete tools, real examples, and a clear framework for both responsibilities.</p>
<p>Now go turn your team's uncertain Research into systematic progress toward measurable product impact. I am confident that you can lead Research teams to success, and I would be happy to hear about your experiences applying these methods.</p>
<p>If you liked this book, please share it with more people.</p>
<h3 id="heading-acknowledgements">Acknowledgements</h3>
<p>I am extremely lucky to have such wonderful people supporting me in this journey.</p>
<p>Abbey Rennemeyer has been a wonderful editor. Abbey had edited my posts for freeCodeCamp over the past few years, as well as my previous book Gitting Things Done, so I knew she was the perfect fit for this book as well. Her insights both on the content and the writing style have greatly improved this book.</p>
<p>Quincy Larson founded the amazing community at freeCodeCamp. I thank him for starting this incredible community, his ongoing support, and for his friendship.</p>
<p>Estefania Cassingena Navone designed the cover of this book. I am grateful for her professional work and her patience with my perfectionism and requests.</p>
<p>Beta readers who contributed their time and mind to read through an unfinished version of this book to improve it for all of you have helped me get it to its current shape. Specifically, I would like to thank Jason S. Shapiro and Omer Gull for their insights.</p>
<p>Dr. David Ginat introduced me first to Alan Schoenfeld's problem-solving research during my time at Tel Aviv University. His teaching inspired me to apply these ideas in practical contexts, including Research management.</p>
<p>I was privileged to work with many brilliant researchers and engineering leaders over the years, too many to name here.</p>
<p>To readers of my previous book, <a target="_blank" href="https://www.freecodecamp.org/news/gitting-things-done-book/">Gitting Things Done</a>, who were kind enough to provide feedback and support – you are awesome. Receiving your emails and comments made me feel like there is a real reason to keep writing.</p>
<h3 id="heading-if-you-wish-to-support-this-book">If You Wish to Support This Book</h3>
<p>If you would like to support this book, you are welcome to buy <a target="_blank" href="https://buymeacoffee.com/omerr/e/505520">E-Book version</a>, <a target="_blank" href="https://amzn.to/46aCxnO">Paperback</a>, <a target="_blank" href="https://amzn.to/4tD1T7O">Hardc</a><a target="_blank" href="https://amzn.to/46aCxnO">over</a> , or <a target="_blank" href="https://buymeacoffee.com/omerr">buy me a coffee</a>. Thank you!</p>
<h3 id="heading-contact-me">Contact Me</h3>
<p>If you liked something about this book, or felt that something was missing or needed improvement – I would love to hear from you. Please reach out at: <code>gitting.things@gmail.com</code>.</p>
<p>Thank you for learning and allowing me to be a part of your journey.</p>
<p>- Omer Rosenbaum</p>
<h1 id="heading-about-the-author"><strong>About the Author</strong></h1>
<p><a target="_blank" href="https://www.linkedin.com/in/omer-rosenbaum-034a08b9/">Omer Rosenbaum</a> is an established technologist and writer. He's the author of the <a target="_blank" href="https://youtube.com/@BriefVid">Brief YouTube Channel</a>, and the books <a target="_blank" href="https://www.freecodecamp.org/news/gitting-things-done-book/">Gitting Things Done</a> and <a target="_blank" href="https://data.cyber.org.il/networks/networks.pdf"><strong>Computer Networks (in Hebrew)</strong></a><strong>.</strong> He's also a cyber training expert and founder of Checkpoint Security Academy.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Run LaTeX Projects Locally (for Free) On Windows ]]>
                </title>
                <description>
                    <![CDATA[ LaTeX is a high-quality typesetting system that is widely used in technical, academic, and scientific writing. It’s very popular in academia, especially in fields like mathematics, physics, computer science, and engineering. LaTeX is not a word proce... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-run-latex-projects-locally-for-free-on-windows/</link>
                <guid isPermaLink="false">67bde54468de46f577ed25f8</guid>
                
                    <category>
                        <![CDATA[ latex ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mathematics ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Windows ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Md. Fahim Bin Amin ]]>
                </dc:creator>
                <pubDate>Tue, 25 Feb 2025 15:44:04 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740494599916/ce7cfadb-985c-4245-9cc8-1ccba483ba69.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>LaTeX is a high-quality typesetting system that is widely used in technical, academic, and scientific writing. It’s very popular in academia, especially in fields like mathematics, physics, computer science, and engineering.</p>
<p>LaTeX is not a word processor like Microsoft Word – rather, it’s a document preparation system that allows you to focus on the content of your writing while it handles the formatting. If you use LaTeX to write your formal documents (like a CV, résumé, or research paper), then you don’t need to worry about the formatting and structure, as everything can be done using LaTeX scripts.</p>
<p>If you use LaTeX to write your academic or research papers, you might be familiar with website-based applications like <a target="_blank" href="https://www.overleaf.com/">Overleaf</a>. Overleaf is a website that allows anyone to read, write, and compile LaTeX scripts online.</p>
<p>These sites are okay for small tasks or compilations, or if you need only a little bit of free collaboration. But if you need to work on bigger projects or need to conduct many collaborative tasks, then the free tier may be insufficient. And in my opinion, the paid subscription costs too much.</p>
<p>But don’t worry: running LaTeX locally may be the perfect solution for you. I know this because I also faced a similar situation, and this simply changed my life! I also keep all of the tracks in Git (GitHub, GitLab, and so on) along with unlimited collaboration opportunities and compilation. And the great thing is, all of these are completely free as it’s all happening on my local machine.</p>
<p>So in this article, I am going to discuss the methods in detail. I have also created an in-depth video for you to understand how this works.</p>
<h3 id="heading-video-tutorial">Video Tutorial</h3>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/A45lWrndVHA" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p> </p>
<h2 id="heading-resources-youll-need">Resources You’ll Need:</h2>
<h3 id="heading-1-github-repository">1. GitHub Repository</h3>
<p>This entire guide is available in one of my GitHub projects named <a target="_blank" href="https://github.com/FahimFBA/Install-LaTeX">Install-LaTeX</a>. The live website is available <a target="_blank" href="https://fahimfba.github.io/install-latex/">here</a> (<a target="_blank" href="https://fahimfba.github.io/Install-LaTeX/">fahimfba.github.io/Install-LaTeX</a>) as well. I would highly appreciate it if you star (⭐) the repository. Also, you can create issues <a target="_blank" href="https://github.com/FahimFBA/Install-LaTeX/issues">there</a> if you face any problems. Any kind of good contribution is also welcome here.</p>
<h3 id="heading-2-operating-system">2. Operating System</h3>
<p>You can install LaTeX on any major operating system (Windows, MacOS, and Linux-based OSes). But in this article, I am only going to talk about the Windows operating system.</p>
<p>Here, I’m using the latest Windows 11 operating system, but the same procedure should be applicable to all of the Windows-based operating systems that are going to come out in the future. Windows 10 should also be okay too.</p>
<h3 id="heading-3-editor">3. Editor</h3>
<p>I am going to use the popular <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> as my editor. It is a 100% free and robust editor that’s very popular among devs all over the world. If you don’t already have it, go ahead and install it before proceeding further.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972339481/729ecab1-b87e-43d6-baf5-dbda170bcefc.png" alt="VS Code" class="image--center mx-auto" width="1761" height="921" loading="lazy"></p>
<h3 id="heading-4-latex-compileride">4. LaTeX Compiler/IDE</h3>
<p>To work on LaTeX files, you’ll need a specific compiler. I am going to use <a target="_blank" href="https://miktex.org/">MikTeX</a>. There are other tools out there, but this is the best tool right now (according to me!). It is completely free and supports all major operating systems as well. It also has a built-in IDE, but we are going to use VS Code as our main editor.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972305065/8119b362-3c95-42a0-9458-be211d2ead35.png" alt="MiKTeX" class="image--center mx-auto" width="1631" height="905" loading="lazy"></p>
<p>Download the Windows executable file from the Download section.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972408494/71b39032-3adc-426e-8bd9-3a18dc454cf5.png" alt="Download MiKTeX" class="image--center mx-auto" width="1312" height="838" loading="lazy"></p>
<p>After the download is finished, install the executable. At the end of the installation, keep the tick in “Check for updates now”.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972492255/a59f7000-8137-46c5-89f1-4f7151a751b6.png" alt="Check for update" class="image--center mx-auto" width="524" height="403" loading="lazy"></p>
<p>You will find the MikTeX console in your taskbar. Open that.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972541856/e7bad89a-4920-4175-a361-ba8fb51f6b20.png" alt="MiKTeX console" class="image--center mx-auto" width="856" height="669" loading="lazy"></p>
<p>Go to the “Updates” tab and click “Update now”. It will install all of those packages.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972581283/6d585388-0218-4792-b78e-798c75dee6a6.png" alt="6d585388-0218-4792-b78e-798c75dee6a6" class="image--center mx-auto" width="821" height="645" loading="lazy"></p>
<p>At the end, it will prompt you to close the console. Click “OK”. Open MiKTeX again.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972610846/926b5aba-0a3a-4c80-a103-fef5a5aafc38.png" alt="926b5aba-0a3a-4c80-a103-fef5a5aafc38" class="image--center mx-auto" width="841" height="663" loading="lazy"></p>
<p>That’s it for this tool.</p>
<h3 id="heading-5-perl">5. Perl</h3>
<p>The commands we are going to execute for building the LaTeX files are dependent on Perl. As the Windows operating system doesn’t come with a built-in Perl compiler, we are going to install the <a target="_blank" href="https://strawberryperl.com/">Strawberry Perl</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972724660/7a6ad623-c2cc-45bd-bac6-08afdd5512c1.png" alt="Perl" class="image--center mx-auto" width="1902" height="897" loading="lazy"></p>
<p>Download the latest MSI package from it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972749178/33c95897-37af-4be7-a24f-3520c3c1486e.png" alt="Download Strawberry perl" class="image--center mx-auto" width="1361" height="815" loading="lazy"></p>
<p>Install the executable after it gets finished downloading the application.</p>
<p>We need to add Perl’s path to the system environment. To do that, go into the location where it has been installed. By default, it gets installed inside <code>C:\Strawberry\perl\bin</code> directory. Copy the path.</p>
<p>Now search for “env” in the Windows search bar until you find something called “Edit the system environment variable”.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972898818/7cfdab3a-9ad0-47a7-b0ed-7721b589de97.png" alt="env" class="image--center mx-auto" width="810" height="678" loading="lazy"></p>
<p>Now click on “Environment Variables…”.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739972945973/832e011b-0841-4318-a9b8-8b7a8ae42819.png" alt="System Properties" class="image--center mx-auto" width="434" height="485" loading="lazy"></p>
<p>Now select “Path” from “System variables” and click “Edit”.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739973034756/df3d91f0-907e-42bf-9f1d-883172abd268.png" alt="System variables" class="image--center mx-auto" width="656" height="605" loading="lazy"></p>
<p>Click “New”. Paste the path. Now exit every windows sequentially by clicking on “OK” in each window.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739973087965/b73dd5e2-5c35-4399-a645-cb92ba43fe7b.png" alt="add var inside system path" class="image--center mx-auto" width="541" height="497" loading="lazy"></p>
<h2 id="heading-visual-code-studio-extensions">Visual Code Studio Extensions</h2>
<p>We need some extensions in VS Code to streamline our workflow.</p>
<p>First, let’s get <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop">LaTeX Workshop</a>. It is the core extension for working with LaTeX files inside VS Code Studio.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739973174197/2311c19b-d56e-4363-a3c0-75a9b0a323ee.png" alt="2311c19b-d56e-4363-a3c0-75a9b0a323ee" class="image--center mx-auto" width="791" height="518" loading="lazy"></p>
<p>Next, you’ll need <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=stkb.rewrap">Rewrap</a>. It is an amazing tool that lets you wrap longer lines. It helps you work in a long line in separate lines without breaking any structure or sentence.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739973216887/86bacaa6-77ff-441c-acca-08ee6a74d354.png" alt="86bacaa6-77ff-441c-acca-08ee6a74d354" class="image--center mx-auto" width="797" height="641" loading="lazy"></p>
<h2 id="heading-build-the-latex-file">Build the LaTeX File</h2>
<p>Whenever you want to build any LaTeX file inside VS Code studio, simply open that file in it. Then open the command palette using <code>Ctrl</code> + <code>Shift</code> + <code>P</code>.</p>
<p>Search for “LaTeX Workshop: Build with recipe” and go there. It will start building the file. Whenever it prompts you to install any missing package, untick the box that says “Always show this dialog” and press “Install”. I do this because clicking on “Install” on hundreds of prompt windows for building a LaTeX file is very difficult for me.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739973393900/0ec3a626-38bb-4fbd-8f98-658cb6bc4853.png" alt="package installation" class="image--center mx-auto" width="516" height="371" loading="lazy"></p>
<p>After it finishes building the LaTeX file, you will get the output PDF file inside VS Code. You can open the PDF file directly in VS Code.</p>
<p>If you want to go into any specific line in the code from the output PDF file like Overleaf, simply click on that specific portion in the PDF by pressing the <code>Ctrl</code> key. It will immediately take you to the code part where it belongs.</p>
<p>That’s it! It’s now running on your local machine and there are no restrictions or limitation to it, literally! Also, for collaboration and keeping track of the history, using Git is the best option, like I do.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Thanks for reading this short tutorial. I hope it helped you interact more easily with LaTeX.</p>
<p>You can follow me on <a target="_blank" href="https://github.com/FahimFBA">GitHub</a>, <a target="_blank" href="https://www.linkedin.com/in/fahimfba/">LinkedIn</a>, and <a target="_blank" href="https://www.linkedin.com/in/fahimfba/">You</a><a target="_blank" href="https://youtube.com/@FahimAmin">Tube</a> to get more content like this. Also, my <a target="_blank" href="https://www.fahimbinamin.com/">website</a> is always available for you!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Business of Technology Research – Who Funds It, And What's Being Done ]]>
                </title>
                <description>
                    <![CDATA[ Getting a new technology out to consumers will usually require good people and boat loads of resources – including money. Generally, lots of money.  A lot of that money will be spent on research. And, more often than not, the hard research needed to ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-business-of-technology-research-5-10/</link>
                <guid isPermaLink="false">66b9964555f17e3ddda0e865</guid>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ David Clinton ]]>
                </dc:creator>
                <pubDate>Tue, 07 Mar 2023 17:07:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/03/pexels-pixabay-2156.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Getting a new technology out to consumers will usually require good people and boat loads of resources – including money. Generally, lots of money. </p>
<p>A lot of that money will be spent on research. And, more often than not, the hard research needed to translate a great idea into a usable product will be performed by someone whose job title isn't "entrepreneur." Sometimes, in fact, the research will be done by individuals who are barely aware that their innovations have any commercial value at all.</p>
<p>If you're here because you want to get the jump on cutting edge technologies, then you may want to keep an eye on the organizations that are known to produce practical research. </p>
<p>Knowing who's big in research, who's funding it, and where the big bucks are being spent can give you useful insights into what might be coming next. From there, you're just a step away from, say, spending time learning the tools that'll come with the new tech or positioning yourself to profit when it finally shows up.</p>
<p>This chapter was taken from the book, <a target="_blank" href="https://amzn.to/3FXXAfb">Keeping Up: Backgrounders to All the Big Technology Trends You Can't Afford to Ignore</a>. If you'd prefer to watch this chapter as a video, feel free to follow along here:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/vvUUbVq5x5w" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h1 id="heading-who-funds-commercial-science-and-why">Who Funds Commercial Science and Why?</h1>
<p>Once upon a time, major breakthroughs in serious scientific research were the products of private patronages. The Italian Medici family, for instance, famously supported many individuals whose work would prove to be pivotal, including Leonardo da Vinci and Galileo. </p>
<p>But the years leading up to the Second World War saw the scope and complexity of research projects growing far beyond the capacity of private support. The war's dependence on unprecedented technological complexity – exemplified by the work of the Manhattan Project building the atom bomb – pushed more and more research under government charge.</p>
<p>Government involvement in research has continued in the generations since the war. Still, it's been estimated that universities and governments are responsible for only 30% of research funding between them, with most of the rest provided by private industry (see <a target="_blank" href="https://en.wikipedia.org/wiki/Funding_of_science">this article for more info</a>).</p>
<p>Let's see how that breaks down.</p>
<h2 id="heading-funding-from-taxpayers">Funding from Taxpayers</h2>
<p>Democratic governments, of course, don't spend their own money, of which they traditionally have none. Their many programs and services are funded by revenues raised, one way or another, from their capital assets and from their populations. In modern nation states, "populations" would mean those individuals and corporations who pay taxes.</p>
<p>Public research and development can be performed within government agencies. According to the terms of some agency mandates, research results must immediately enter the public domain. </p>
<p>But even those who retain rights to their research will often point their work towards businesses and institutions that can use it productively. The US National Science Foundation (NSF), for instance, uses its $8 billion annual budget to fund "approximately 25 percent of all federally supported basic research conducted by America's colleges and universities" (<a target="_blank" href="https://www.nsf.gov/about/">Source</a>).</p>
<p>Other American agencies do much or all of their research in-house. Here are some examples:</p>
<ul>
<li>The <em>National Institute of Standards and Technology (NIST)</em> has a mandate to "promote innovation and industrial competitiveness." One very important part of that mission is maintaining the National Vulnerability Database (NVD) which plays a foundational role in the management of the vulnerability assessment and detection systems protecting our IT infrastructure.</li>
<li>The US military's Defense Advanced Research Projects Agency (DARPA) collaborates with private and public sector partners to aid in the development of emerging technologies. Work in recent years has included research into robotics and autonomous vehicles, but you might be more familiar with a DARPA innovation from a few decades ago: the internet.</li>
<li>The National Institutes of Health (NIH) employs 6,000 research scientists across 27 research institutes and centers. Their "mission is to seek fundamental knowledge about the nature and behavior of living systems and the application of that knowledge to enhance health, lengthen life, and reduce illness and disability."</li>
</ul>
<p>The <a target="_blank" href="https://en.wikipedia.org/wiki/List_of_United_States_federal_research_and_development_agencies">complete list of US government research agencies</a> makes for quite a read. Take a look for yourself.</p>
<p>Naturally, governments of other countries have their own research agencies. One example is Canada's National Research Council (NRC), which has evolved from its military technology origins through the two world wars, to its current focus on partnerships with private and public-sector technology companies. </p>
<p>The NRC now divides its work into four "business lines:"</p>
<ul>
<li>Strategic research and development</li>
<li>Technical services</li>
<li>Management of science and technology infrastructure</li>
<li>NRC-Industrial Research Assistance Program (IRAP)</li>
</ul>
<p>As I mentioned when discussing the NSF, a significant proportion of taxpayer funds directed towards research and development are granted to public and private colleges and universities. </p>
<p>But, from the college perspective, how much academic R&amp;D funding comes from government sources? </p>
<p>A 2016 review of the 20 US colleges that spent the most on R&amp;D found that they each spent between $837,000 and $2.4 million. It also found that between 47-87% of their total spending came from government sources of one sort or another (see <a target="_blank" href="https://www.freecodecamp.org/news/p/7ec0795c-d73f-44dc-932b-5cc1085d0e23/bestcolleges.com/features/colleges-with-highest-research-and-development-expenditures/">this article for more info</a>). By contrast, businesses only provided between 2 and 22% of that funding.</p>
<h2 id="heading-private-charitable-funding">Private Charitable Funding</h2>
<p>While we're on the subject of academic research, we shouldn't ignore a third source of funding: private endowments. Some – although not all – permanent endowments were targeted by their donors at research activities. Although the fund capital can't be spent each year, the income that capital generates can. </p>
<p>Harvard university famously – or perhaps infamously – has a total endowment greater than 40 billion dollars. Some of that undoubtedly finds its way to R&amp;D.</p>
<p>Curiously, according to that 2016 study, Harvard's total R&amp;D spending that year – including activities funded by governments (52.1%), businesses (4.7%), and endowments – was just over one million dollars.</p>
<p>Of course, donations support plenty of research outside of academic settings, too. Most serious diseases have associated charitable foundations that exist to raise money for both victim care and medical research. </p>
<p>Also, many thousands of registered non-profits exist throughout the world supporting non-medical causes, including many that involving technology-related research. The Bill &amp; Melinda Gates Foundation is a particularly well-known example.</p>
<h2 id="heading-funding-from-corporations">Funding from Corporations</h2>
<p>Technology-oriented companies have a strong interest in getting their hands on innovations before their competition. To improve their chances, many will run their own research labs in-house. </p>
<p>The Bell Telephone Company, for instance – and its successors including American Telephone &amp; Telegraph Company (AT&amp;T) – maintained the active and enormously creative Bell Labs. Bell Labs, under various names, was responsible for many innovations, including the transistor, lasers, and the Unix operating system.</p>
<p>Individual technologists at some companies are often sources of innovation. 3M, for instance, has what they call a "15% Culture," where employees are allowed to use company time and space to pursue research based on their own ideas and interests. Over the years, the program has generated successful products for the company, including their sticky paper Post-its. </p>
<p>In another example, Percy Spencer, working on radar for US defense contractor Raytheon, accidentally discovered that microwaves could cook food.</p>
<p>It should be noted that not all corporate innovation is truly home-grown. A lot of it is actually funded indirectly through government money in the form of tax incentives or credits. Under such programs, companies may be permitted to use research-related spending (including salary expenses) to reduce the income taxes they would otherwise pay.</p>
<h1 id="heading-major-fields-of-commercial-technology-research">Major Fields of Commercial Technology Research</h1>
<p>Trying to grasp the full scope of technology development at this point in history is an unforgivable waste of time. There's serious innovation going on every minute of the day, in every time zone, through countless labs, office towers, warehouses, garages, basements, bedrooms and, of course, invisibly within creative people's minds. </p>
<p>No one's keeping track of it all because it's not possible. Not to mention the fact that much of that innovation happens under a thick shroud of secrecy.</p>
<p>But it's probably worth offering just a couple of examples to give you a feel for where to look.</p>
<h2 id="heading-quantum-computing-and-why-we-should-care">Quantum Computing (and Why We Should Care)</h2>
<p>A cousin of mine with an advanced physics degree from Cambridge University once tried to explain quantum mechanics to me. He failed. Miserably. My poor old brain just couldn't absorb it. So don't expect any full, measured descriptions of the underlying science here. </p>
<p>Instead, I'll try to show you how experimental <em>compute</em> technologies that depend on the physics might work, and what can be done with them.</p>
<p>The super-quick executive summary version of this is that computers powered by one quantum technology or other will work <em>a lot</em> faster than any of the super-est of super computers we have now. </p>
<p>So much faster, in fact, that they may be able to solve problems that would be simply unfeasible using traditional computers (an achievement known as <em>quantum supremacy</em>). This would mean that some long-held assumptions about the way software works will no longer apply.</p>
<p>For instance, the reason the best encryption tools we currently use to protect sensitive data work, is because it would take hundreds or even thousands of hours of high-performance compute time to successfully break the encryption key. In most cases, it's just not worth the effort and expense.</p>
<p>But if you could easily buy time on a computer that processed operations exponentially faster, then two things would immediately happen:</p>
<ul>
<li>Cracking encryption algorithms would become trivial</li>
<li>Honest folk would have to seriously look for a new way to protect their data</li>
</ul>
<p>Currently, Google and IBM are among the major companies that have invested heavily in quantum compute research projects.</p>
<p>As well as I can understand it, quantum computers would measure the state of subatomic particles and use that binary measurement to represent a computational value. The description of that state is known as a <em>qubit</em>, which is effectively the quantum equivalent of traditional computing's <em>bit</em>. </p>
<p>But because a qubit can also exist within what's known as <em>coherent superposition</em> – meaning that its value can exist in a <em>superposition</em> of two possible states – it can be used to represent a more complex range of values.</p>
<p>And <em>that</em>, I'm given to believe, means that such computers will be able to do stuff much, much faster than they can now. If this actually happens, it'll be big.</p>
<h2 id="heading-energy-technologies">Energy Technologies</h2>
<p>The modern world consumes an awful lot of energy. We're constantly moving about, controlling our indoor (and in-transit) climate conditions, exchanging information, and expecting that all the world's riches be delivered to our doorsteps. By tomorrow. </p>
<p>But those energy-thirsty activities come with costs, not the least of which from the emissions they leave behind. The search for reliable, steady, and affordable energy sources that can help us find a healthy balance between consumption and emissions is ongoing – and unimaginably expensive.</p>
<p>Small modular nuclear reactors (SMRs) have been the focus of some serious developments in recent years. They appear to promise reliable, steady, and affordable energy in ways that their expensive and complex nuclear predecessors couldn't. </p>
<p>First and second generation reactors were, overall, reliable and steady – and they were clean – but their massive capital costs and large physical footprints made them more than a bit inflexible.</p>
<p>The idea behind SMRs is that highly efficient reactors can be manufactured off-site and delivered on trucks one module at a time for on-site assembly. The design makes the per megawatt generation of power far cheaper and project completion much faster. And it allows the deployment of nuclear power to service smaller markets that previously couldn't consider it as a realistic option.</p>
<p>As the name implies, SMRs are smaller than traditional reactors. They're designed to deliver between 50 and 300 MW of electricity each, compared with the 800 to 1,200 MW outputs that were previously common.</p>
<p>Companies heavily involved in this research include Britain's Rolls-Royce and an American company with historical connections to the US Department of Energy called NuScale Power. Various governments around the world have also invested in the technology one way or another.</p>
<h2 id="heading-medical-technology-research">Medical Technology Research</h2>
<p>If you think we're spending a lot of money on energy, wait 'till you see how much health care costs. </p>
<p>Across the 37 Organisation for Economic Co-operation and Development (OECD) nations, health care industry spending accounts for around 10% of the total gross domestic product. That's more than $3,000 a year for every single living person.</p>
<p>On the one hand, with all that money being thrown around, there are undoubtedly many business opportunities waiting to be discovered. But there's also a lot of room for new and innovative technologies that can improve the delivery of health care while reducing the costs. Here are two excellent candidates:</p>
<p>Telehealth involves the provision of health services (like patient-doctor consultations) through a telecommunication medium. This might mean having a simple telephone conversation rather than a visit to the office, but it could also incorporate video conferencing tools or even the use of remote diagnostic equipment. </p>
<p>For example, small, remote communities could maintain imaging facilities and technicians even many hundreds of miles away from the nearest medical labs and radiologist specialists. Digital connections can permit distant doctors to view, say, ultrasound results, speak directly with patients, and confidently reach diagnoses. And all without the need for anyone to undertake exhausting and expensive travel. </p>
<p>Telehealth also allows for meaningful patient-doctor contact without the risk of spreading disease.</p>
<p>Telesurgery is an extension of telehealth which can allow some surgical procedures even when doctors are many miles away from their patients. The technology makes use of high-definition video feeds and purpose-built robotic arms that can be controlled by doctors remotely. </p>
<p>Telesurgery tools have the potential to save money for cash-strapped health systems but, more importantly, they can improve health care and save lives.</p>
<p>So whether you're thinking about building the tech behind the next mega business model, learning a new technology, or looking for a good investment, having a good sense of where the serious tech research happens and who pays for it can be useful.</p>
<p><em>YouTube videos of all ten chapters from this book <a target="_blank" href="https://www.youtube.com/playlist?list=PLSiZCpRYoTZ6UWl4xialvwLOKyHYYJUiC">are available here</a>. Lots more tech goodness - in the form of books, courses, and articles - <a target="_blank" href="https://bootstrap-it.com">can be had here</a>. And consider taking my <a target="_blank" href="https://www.udemy.com/user/david-clinton-12/">AWS, security, and container technology courses here</a>.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is the Difference Between an Independent Variable and a Dependent Variable? ]]>
                </title>
                <description>
                    <![CDATA[ The meaning of the word "variable" depends on the field where it's being used.  In programming, a variable is a particular piece of data that holds a value. Depending on the configuration, that value can change or remain fixed.  For instance, in Java... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/independent-variable-vs-dependent-variable/</link>
                <guid isPermaLink="false">66adf1867550d4f37c2019b7</guid>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ statistics ]]>
                    </category>
                
                    <category>
                        <![CDATA[ variables ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kolade Chris ]]>
                </dc:creator>
                <pubDate>Thu, 15 Dec 2022 17:32:36 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/12/snowy-4689675_1280.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The meaning of the word "variable" depends on the field where it's being used. </p>
<p>In programming, a variable is a particular piece of data that holds a value. Depending on the configuration, that value can change or remain fixed. </p>
<p>For instance, in JavaScript, you can implement a variable to change over time with the "var" and "let" keywords. But if you want, you can implement a variable so it doesn't change with the "const" keyword.</p>
<p>In this article, the kind of variable we’ll be looking at is not the one in programming but the one you'll deal with in research. Precisely, we’ll look at the differences between the two main types of variables in research – dependent and independent variables.</p>
<p>But before we look at the differences between dependent and independent variables, we need to understand what a variable is first.</p>
<h2 id="heading-what-well-cover">What We'll Cover</h2>
<ul>
<li><a class="post-section-overview" href="#heading-what-is-a-variable-in-research">What is a Variable in Research?</a></li>
<li><a class="post-section-overview" href="#heading-what-are-dependent-and-independent-variables">What are Dependent and Independent Variables?</a></li>
<li><a class="post-section-overview" href="#heading-what-are-the-differences-between-dependent-and-independent-variables">What are the Differences between Dependent and Independent Variables?</a></li>
<li><a class="post-section-overview" href="#heading-how-to-identify-a-dependent-variable-from-an-independent-variable">How to Identify a Dependent Variable from an Independent Variable</a></li>
<li><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></li>
<li><a class="post-section-overview" href="#morereadings">More Readings</a></li>
</ul>
<h2 id="heading-what-is-a-variable-in-research">What is a Variable in Research?</h2>
<p>If you’re conducting research, you’ll be measuring a lot of values. So, in research, a variable is anything you’re trying to measure. It could be age, temperature, length, height, mass, weight, or any other thing that can have a value.</p>
<p>In addition, you’ll be measuring those variables in different units – centimeters (cm), meters (m), grams (g), kilograms (kg), and many more. </p>
<p>These units can’t be neglected, but as far as variables are concerned, whether dependent or independent, the values are what really matter.</p>
<h2 id="heading-what-are-dependent-and-independent-variables">What are Dependent and Independent Variables?</h2>
<p>Dependent and independent variables depend on whether one variable determines the outcome of the other or not.</p>
<p>A dependent variable is a variable whose changes and its outcome depend on another variable. On almost all occasions, the variable the dependent variable depends on is an independent variable.</p>
<p>Dependent variables are also called the response or outcome variables because they represent the outcome of the values you're measuring. That is, what you record after manipulating the independent variables.</p>
<p>An independent variable is a variable whose outcome or changes do not depend on another variable. It is the exact opposite of the dependent variable, at least according to what the name implies.</p>
<p>Independent variables are also called predictor variables because you can use them to predict the outcome of a dependent variable. That is, when you manipulate independent variables, they can give you the outcome of a dependent variable.</p>
<h2 id="heading-what-are-the-differences-between-dependent-and-independent-variables">What are the Differences between Dependent and Independent Variables?</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Basis</strong></td><td><strong>Dependent Variable</strong></td><td><strong>Independent Variable</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Type</strong></td><td>It is the "response" variable</td><td>It is the "effect" variable</td></tr>
<tr>
<td><strong>Outcome</strong></td><td>Outcome depends on another variable (usually the independent variable)</td><td>Outcome does not depend on another variable</td></tr>
<tr>
<td><strong>Changes</strong></td><td>This variable changes over time. Consider the dependent variable as a variable you declare with the "let" or "var" keyword in JavaScript. You can later change it.</td><td>This variable never changes. Consider the independent variable as the variable you declare with the "const" keyword in JavaScript. It is fixed unless you explicitly change the value.</td></tr>
<tr>
<td><strong>Manipulation</strong></td><td>Dependent variables cannot be manipulated because their value depends on the independent variable.</td><td>Independent variables can be manipulated to determine the outcome of a dependent variable.</td></tr>
<tr>
<td><strong>Position on a Graph</strong></td><td>Dependent variables are placed on the y-axis (vertical axis) on a graph</td><td>Independent variables are placed on the x-axis (horizontal axis) on a graph</td></tr>
</tbody>
</table>
</div><h2 id="heading-how-to-identify-a-dependent-variable-from-an-independent-variable">How to Identify a Dependent Variable from an Independent Variable</h2>
<p>We've taken a look at what variables are, what dependent and independent variables are, and the exact differences between dependent and independent variables. </p>
<p>But how exactly would you differentiate a dependent variable from an independent variable? We are going to look at two experiments or examples:</p>
<ul>
<li><p>how Vitamin A helps mothers produce milk</p>
</li>
<li><p>the level of light nocturnal insects (insects active at night) are attracted to</p>
</li>
</ul>
<p>For the first experiment, the sources of vitamin A the mother takes in from foods like fish oil and green vegetables are the independent variable. That's because the researcher can change [decrease or increase] the amount given to the mothers. How the body of the mother responds in producing more milk is the dependent variable.</p>
<p>For the second experiment, the level of light is the independent variable because the researcher can change it. How nocturnal insects react to that level of light is the dependent variable.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this article, you learned about the differences between dependent and independent variables. We looked at:</p>
<ul>
<li><p>what a variable is in research</p>
</li>
<li><p>the two main types of variables (dependent and independent variables)</p>
</li>
<li><p>what dependent and independent variables are</p>
</li>
<li><p>and how to differentiate a dependent variable from an independent variable.</p>
</li>
</ul>
<p>I hope this article gives you a knowledge of what research variables are and how to differentiate a dependent variable from an independent variable.</p>
<p>Thank you for reading.</p>
<h3 id="heading-further-reading">Further Reading</h3>
<ul>
<li><a target="_blank" href="https://www.scribbr.com/methodology/types-of-variables/">Types of Variables in Research and Statistics</a></li>
<li><a target="_blank" href="https://www.scribbr.com/methodology/independent-and-dependent-variables/">Independent Variables v Dependent Variables</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Google like a Pro – 10 Tips for More Effective Googling ]]>
                </title>
                <description>
                    <![CDATA[ Pretty much everything is available on the internet, and Google is one of the main ways people search for information.  And while you might think it's obvious, many internet users don't know how to use Google search efficiently and effectively. In tr... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-google-like-a-pro-10-tips-for-effective-googling/</link>
                <guid isPermaLink="false">66ba5d46e5ad5bacb410af20</guid>
                
                    <category>
                        <![CDATA[ Google ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ search ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Soham De Roy ]]>
                </dc:creator>
                <pubDate>Fri, 12 Aug 2022 18:19:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/08/Group-61.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Pretty much everything is available on the internet, and Google is one of the main ways people search for information. </p>
<p>And while you might think it's obvious, many internet users don't know how to use Google search <strong>efficiently</strong> and <strong>effectively</strong>.</p>
<p>In truth, Googling is an art. </p>
<p>To get the right answers, you need to ask the right questions. And to get the right answers quickly, you must know <strong>how</strong> to ask the right questions. </p>
<p>Everyone should learn the <strong>how</strong> part, and that's what this tutorial is all about. Below are some helpful tips and tricks you can use to find correct answers to your questions effectively and efficiently.</p>
<h2 id="heading-how-to-search-google-effectively">How to Search Google Effectively</h2>
<h3 id="heading-1-use-quotes-to-get-an-exact-match">1. Use quotes to get an "EXACT" match</h3>
<p>Generally, when we do a regular search on Google, it makes a <strong>shallow</strong> search. This may result in pages that may or may not contain all the words you mentioned in your search query. </p>
<p>But if you wrap your search query or question (either a term or a phrase) in quotes like this: <code>"your question goes here"</code> then Google will do a deep search. This means that all the results will include pages that <strong>contain all the terms</strong> in your question that you put within quotes. </p>
<p>This is helpful when you absolutely want a particular term or phrase to be there in your search results.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img1.PNG" alt="img1" width="600" height="400" loading="lazy"></p>
<h3 id="heading-2-search-within-a-specific-site-with-site">2. Search within a specific site with <code>site:</code></h3>
<p>If you want Google to return results from within a particular website, just add <code>site:</code> before the question you are searching. </p>
<p>This is also helpful when you want to search for something within a website that doesn't have an internal search option or perhaps doesn't have a very effective one. </p>
<p>For example, searching for <strong>site:freecodecamp.org react</strong> will populate search results only from the <a target="_blank" href="https://www.freecodecamp.org/">www.freecodecamp.org</a> website on the topic of React.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img2.PNG" alt="img2" width="600" height="400" loading="lazy"></p>
<h3 id="heading-3-exclude-a-term-from-search-results-with">3. Exclude a term from search results with <code>-</code></h3>
<p>If you don't want a term or phrase to appear in your search results, then just add <code>-</code> in front of that word. </p>
<p>For e.g. a search on =&gt; <strong>how to write components in React -class</strong> will return all the search results that don't have the term "class" in them. So, (if you know a bit of React) it'll give you only ways to write functional components in React.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img3.PNG" alt="img3" width="600" height="400" loading="lazy"></p>
<h3 id="heading-4-search-images-of-a-particular-size-with-imagesize">4. Search images of a particular size with <code>imagesize:</code></h3>
<p>If you want to search images of a particular size, then use the tag <code>imagesize:</code> in your search query along with the width and height in <strong>pixels</strong>. </p>
<p>Dimension should be in <strong>pixels</strong> only – for example, <code>imagesize:500x500</code> will populate image results which have a dimension of 500px x 500px. So a search on =&gt; "cute dog images imagesize:500x600" (coz why not) will result in pictures of cute dogs with an image size of <code>500px x 600px</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img4.PNG" alt="img4" width="600" height="400" loading="lazy"></p>
<h3 id="heading-5-search-for-a-particular-filetype-with-filetype">5. Search for a particular filetype with <code>filetype:</code></h3>
<p>If you want to get search results that contain a particular file type such as PDF or PPT, then add <code>filetype:&lt;extension&gt;</code> (without the angular brackets). For example, <strong>react tutorial filetype:pdf</strong> will generate results that contains PDF in them, as seen in the following image:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img5.PNG" alt="img5" width="600" height="400" loading="lazy"></p>
<h3 id="heading-6-use-wildcard-to-make-searches">6. Use wildcard <code>*</code> to make searches</h3>
<p>If you are unsure about or have forgotten any term in your search query/ question, then use the wildcard <code>*</code> charachter. Google will replace it for you with relevant terms. </p>
<p>For example, a search on =&gt; the <em> of money will populate the following results. It will be a bunch of pages that include the phrase such as "the </em>exchange<em> of money", "the </em>use<em> of money", "the </em>role<em> of money", "the </em>psychology* of money", and so on.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img6.PNG" alt="img6" width="600" height="400" loading="lazy"></p>
<h3 id="heading-7-combine-searches-with-or-and-logic">7. Combine searches with <code>OR</code>, <code>AND</code> logic</h3>
<p>If you want your search results to contain two terms, then put the <code>AND</code> keyword in between them. For example, the search on =&gt; <strong>React AND Angular</strong> will fetch results that have both the terms react and angular in it. </p>
<p>Similarly, if you want either of the terms in your search results, then use the <code>OR</code> keyword in between them. For example, the search on =&gt; <strong>React OR Angular</strong> will fetch results that have either of the terms or even both.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img7.PNG" alt="img7" width="600" height="400" loading="lazy"></p>
<h3 id="heading-8-filter-out-searches-with-after-before-or-between-two-numbers">8. Filter out searches with <code>AFTER:</code>, <code>BEFORE:</code> or <code>..</code> between two numbers</h3>
<p>If you want Google to populate search results that were published after a particular year, then use the tag <code>AFTER:</code>. For example, the search on =&gt; <strong>React tutorials AFTER:2020</strong> will populate search results published after 2020. </p>
<p>Similarly adding the tag <code>BEFORE:</code> will return results published before a particular year. </p>
<p>You can also search for results published in a certain year range, or for that matter between any numbers. Just add <code>..</code> between the two numbers you want to search between along with the units, if any.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img8.PNG" alt="img8" width="600" height="400" loading="lazy"></p>
<h3 id="heading-9-check-out-related-websites-using-related">9. Check out related websites using <code>related:</code></h3>
<p>If you want to know what all other websites are available on the internet that are similar to a particular website, then use the <code>related:</code> tag. </p>
<p>For example, a search on <strong>related:google.com</strong> will fetch all the websites that are similar to Google like Bing, Yahoo, DuckDuckGo, and so on.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img9.PNG" alt="img9" width="600" height="400" loading="lazy"></p>
<h3 id="heading-10-use-cache-to-see-googles-cached-version-of-a-website">10. Use <code>cache:</code> to see Google's cached version of a website</h3>
<p>Google stores a cached version of websites to provide search results quickly. To see if Google has cached any site or not, just use the tag <code>cache:</code> in front of the website's URL. </p>
<p>This is especially helpful for <strong>web developers</strong> if they want to check if they are currently viewing a cached site or the latest version of a website after they have pushed some changes to the website. For example, a search for =&gt; <strong>cache:www.sohamderoy.dev</strong> on the day of writing this tutorial (that is, 4th Aug 2022) returns the following result:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/img10a.png" alt="img10a" width="600" height="400" loading="lazy"></p>
<p>As you see, even though I am searching for the site on 4th August 2022, I still see a copy of the site from 3rd August 2022, as that is when Google has cached the website.</p>
<p>It is important to note that "Not all search operators return exhaustive results." as mentioned by <a target="_blank" href="https://support.google.com/websearch/answer/2466433?visit_id=637790664879774647-1036329470&amp;p=adv_pages_similar&amp;hl=en&amp;rd=1">Google</a> itself. </p>
<p>Still, I believe that these are some really handy tips that help you make an effective and efficient Google search. I hope I've explained them properly and have encouraged you to use them in your regular Google search.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Thanks for reading! I really hope you enjoyed reading this short article about how to google efficeiently and effectively and found this tutorial useful. </p>
<p>Do consider sharing it with your friends – I'd really appreciate that. Follow me on LinkedIn and Twitter and stay tuned for more amazing content! Peace out! 🖖</p>
<h3 id="heading-social-links">Social Links</h3>
<ul>
<li><a target="_blank" href="https://www.linkedin.com/feed/">LinkedIn</a></li>
<li><a target="_blank" href="https://www.sohamderoy.dev/">Website</a></li>
<li><a target="_blank" href="https://blogs.sohamderoy.dev">Other Blogs by me</a></li>
<li><a target="_blank" href="https://twitter.com/_sohamderoy">Twitter</a></li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How Search Google Like a Pro – Tips to Get Better Search Results ]]>
                </title>
                <description>
                    <![CDATA[ If you want to find the right answer to a problem you have, you need to know how to ask the right question. For most people this is the most difficult thing to do – asking the right question without beating around the bush.  To find your answer, you ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-search-google-like-a-pro/</link>
                <guid isPermaLink="false">66b8dbdcabe19f6180038a2d</guid>
                
                    <category>
                        <![CDATA[ Google ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ search ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 10 Mar 2021 16:53:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/HOW-TO-MASTER-GOOGLE-SEARCH--3-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you want to find the right answer to a problem you have, you need to know how to ask the right question. For most people this is the most difficult thing to do – asking the right question without beating around the bush. </p>
<p>To find your answer, you have to be able to point straight at what you want. You will also need a good search engine to help you out. </p>
<h2 id="heading-what-is-a-search-engine">What is a Search Engine?</h2>
<p>According to the OED, </p>
<blockquote>
<p>"A search engine is a program that searches for and identifies items in a database that correspond to keywords or characters specified by the user, used especially for finding particular sites on the World Wide Web."  </p>
</blockquote>
<p>Yep you read that right – items that correspond to keywords we search for. Now there are different types of search engine like:</p>
<ul>
<li>Google  </li>
<li>DuckDuckGo</li>
<li>Yahoo </li>
<li>and many more...  </li>
</ul>
<p>Our main focus for this article is <strong>GOOGLE</strong> and how to learn how to use it like the pro you are.</p>
<p>So, what is Google? It's one of the most used and popular internet search engines. And it uses its own secret algorithm to fetch and organize search results in order to give you the most relevant and reliable sources of data possible.  </p>
<p>Let's have a look at some tricks to change how you use it.</p>
<h2 id="heading-how-to-search-google-like-a-pro">How to Search Google Like a Pro</h2>
<p>Searching Google is a skill, believe it or not. It takes practice, but if you employ these techniques you'll soon be finding answers to even your trickiest questions.</p>
<p>1) Use the Keyword <mark>related:</mark> to find similar websites.<br>If you were to search anything related to <code>freeCodeCamp</code> it would look something like the below, showing all related sites to freeCodeCamp.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture1.PNG" alt="Capture1" width="600" height="400" loading="lazy"></p>
<p>2) Use the Keyword <mark>search:</mark> to search within a website.<br>Let's say you wanted to find something related to web development on freeCodeCamp this is how to use the <code>search:</code> keyword to get right answers:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture2.PNG" alt="Capture2" width="600" height="400" loading="lazy"></p>
<p>3) Use the Keyword <mark>...</mark> to search within a time frame.<br>For example say you wanted to find an article about developers or anything to do with developers between 1992 and 1999, this is what it would look like : <code>Developer 1992...1999</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture3.PNG" alt="Capture3" width="600" height="400" loading="lazy"></p>
<p>4) Use the Keyword <mark>-</mark> to exclude a word.<br>If I wanted to know more about Android development but didn't want to include <code>flutter</code> related skills in my search results, I would search it like this: <code>android development -flutter</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture4.PNG" alt="Capture4" width="600" height="400" loading="lazy"></p>
<p>5) Use the keyword <mark><em></em></mark> to replace missing words.
Trying to search for something but you happen to have forgotten some words? Don't worry, try using the `` to replace the missing word that you have forgotten. Like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture5.PNG" alt="Capture5" width="600" height="400" loading="lazy"></p>
<p>6) If you're looking for a definition of a word, use the keyword <mark>define:</mark> to find a definition.<br>If I wanted to find the definition of <code>object oriented programming</code>, this would give results of all articles with definitions of object oriented programming. This is how I would do it:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture6-1.PNG" alt="Capture6-1" width="600" height="400" loading="lazy"></p>
<p>7) You can search for an exact phrase using double quotation marks <mark>" "</mark>
If I wanted to find free tutorial on Python I would do it like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture7.PNG" alt="Capture7" width="600" height="400" loading="lazy"></p>
<p>8) Use <mark> site: </mark> to search for a particular website or content.
For example if I wanted to find a site with blogs related to web development this how we would do the search:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Capture8.PNG" alt="Capture8" width="600" height="400" loading="lazy"></p>
<h3 id="heading-and-heres-some-extra-tips-for-you">And here's some extra tips for you:</h3>
<ul>
<li>Want to go Incognito without having to use your mouse to find the option? Try pressing <mark>Ctrl + Shift + N</mark>.</li>
<li>Are you in an open tab and you want to easily close it without using the mouse to click the <code>x</code>? Try pressing <mark>Ctrl + W</mark>. </li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>There you have it – 8 Google search tricks to make you a Google search wizard. </p>
<p>Now get out there and start using your newfound magical search powers to conquer the world! Or at least, to find better search results. Either way, I hope you found this article helpful. If you did, don’t forget to share it!    </p>
<p>Connect With me at <a target="_blank" href="https://twitter.com/larymak1">Twitter</a> | <a target="_blank" href="https://www.instagram.com/nextgencoders/">Insta</a> | <a target="_blank" href="https://www.youtube.com/channel/UCrT1ARRZfLOuf6nc_97eXEg">YouTube</a> | <a target="_blank" href="https://www.linkedin.com/in/hillary-nyakundi-3a64b11ab/">LinkedIn</a>  | <a target="_blank" href="https://github.com/larymak">GitHub</a></p>
<p>Do share your valuable opinion, I appreciate your honest feedback!    </p>
<p>Enjoy Coding ❤ </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Read a Research Paper – A Guide to Setting Research Goals, Finding Papers to Read, and More ]]>
                </title>
                <description>
                    <![CDATA[ If you work in a scientific field, you should try to build a deep and unbiased understanding of that field. This not only educates you in the best possible way but also helps you envision the opportunities in your space. A research paper is often the... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/building-a-habit-of-reading-research-papers/</link>
                <guid isPermaLink="false">66d45f359208fb118cc6cfc5</guid>
                
                    <category>
                        <![CDATA[ Data Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ reading ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Science  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technical writing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Harshit Tyagi ]]>
                </dc:creator>
                <pubDate>Thu, 04 Mar 2021 19:01:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/03/October-AI.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you work in a scientific field, you should try to build a deep and unbiased understanding of that field. This not only educates you in the best possible way but also helps you envision the opportunities in your space.</p>
<p>A research paper is often the culmination of a wide range of deep and authentic practices surrounding a topic. When writing a research paper, the author thinks critically about the problem, performs rigorous research, evaluates their processes and sources, organizes their thoughts, and then writes. These genuinely-executed practices make for a good research paper.</p>
<p>If you’re struggling to build a habit of reading papers (like I am) on a regular basis, I’ve tried to break down the whole process. I've talked to researchers in the field, read a bunch of papers and blogs from distinguished researchers, and jotted down some techniques that you can follow.</p>
<p>Let’s start off by understanding what a research paper is and what it is NOT!</p>
<h2 id="heading-what-is-a-research-paper">What is a Research Paper?</h2>
<p>A research paper is a dense and detailed manuscript that compiles a thorough understanding of a problem or topic. It offers a proposed solution and further research along with the conditions under which it was deduced and carried out, the efficacy of the solution and the research performed, and potential loopholes in the study.</p>
<p>A research paper is written not only to provide an exceptional learning opportunity but also to pave the way for further advancements in the field. These papers help other scholars germinate the thought seed that can either lead to a new world of ideas or an innovative method of solving a longstanding problem.</p>
<h2 id="heading-what-research-papers-are-not">What Research Papers are NOT</h2>
<p>There is a common notion that a research paper is a well-informed summary of a problem or topic written by means of other sources.</p>
<p>But you shouldn't mistake it for a book or an opinionated account of an individual’s interpretation of a particular topic.</p>
<h2 id="heading-why-should-you-read-research-papers">Why Should You Read Research Papers?</h2>
<p>What I find fascinating about reading a good research paper is that you can draw on a profound study of a topic and engage with the community on a new perspective to understand what can be achieved in and around that topic.</p>
<p>I work at the intersection of instructional design and data science. Learning is part of my day-to-day responsibilities. If the source of my education is flawed or inefficient, I’d fail at my job in the long term. This applies to many other jobs in Science with a special focus on research.</p>
<p>There are three important reasons to read a research paper:</p>
<ol>
<li><p><strong>Knowledge —</strong> Understanding the problem from the eyes of someone who has probably spent years solving it and has taken care of all the edge cases that you might not think of at the beginning.</p>
</li>
<li><p><strong>Exploration —</strong> Whether you have a pinpointed agenda or not, there is a very high chance that you will stumble upon an edge case or a shortcoming that is worth following up. With persistent efforts over a considerable amount of time, you can learn to use that knowledge to make a living.</p>
</li>
<li><p><strong>Research and review —</strong> One of the main reasons for writing a research paper is to further the development in the field. Researchers read papers to review them for conferences or to do a literature survey of a new field. For example, <a target="_blank" href="http://yann.lecun.com/exdb/publis/pdf/lecun-89e.pdf">Yann LeCun’</a>s paper on integrating domain constraints into backpropagation set the foundation of modern computer vision back in 1989. After decades of research and development work, we have come so far that we're now perfecting problems like object detection and optimizing autonomous vehicles.</p>
</li>
</ol>
<p>Not only that, with the help of the internet, you can extrapolate all of these reasons or benefits onto multiple business models. It can be an innovative state-of-the-art product, an efficient service model, a content creator, or a dream job where you are solving problems that matter to you.</p>
<h2 id="heading-goals-for-reading-a-research-paper-what-should-you-read-about">Goals for Reading a Research Paper — What Should You Read About?</h2>
<p>The first thing to do is to figure out your motivation for reading the paper. There are two main scenarios that might lead you to read a paper:</p>
<ol>
<li><p><strong>Scenario 1 —</strong> You have a well-defined agenda/goal and you are deeply invested in a particular field. For example, you’re an NLP practitioner and you want to learn how GPT-4 has given us a breakthrough in NLP. This is always a nice scenario to be in as it offers clarity.</p>
</li>
<li><p><strong>Scenario 2 —</strong> You want to keep abreast of the developments in a host of areas, say <a target="_blank" href="https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology">how a new deep learning architecture has helped us solve a 50-year old biological problem of understanding protein structures.</a> This is often the case for beginners or for people who consume their daily dose of news from research papers (yes, they exist!).</p>
</li>
</ol>
<p>If you’re an inquisitive beginner with no starting point in mind, start with scenario 2. Shortlist a few topics you want to read about until you find an area that you find intriguing. This will eventually lead you to scenario 1.</p>
<h3 id="heading-ml-reproducibility-challenge">ML Reproducibility Challenge</h3>
<p>In addition to these generic goals, if you need an end goal for your habit-building exercise of reading research papers, you should check out the <a target="_blank" href="https://openreview.net/group?id=ML_Reproducibility_Challenge/2020">ML reproducibility challenge.</a></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>[https://openreview.net/group?id=ML_Reproducibility_Challenge/2020](https://openreview.net/group?id=ML_Reproducibility_Challenge/2020" rel="nofollow noopener)</em></p>
<p>You’ll find top-class papers from world-class conferences that are worth diving deep into and reproducing the results.</p>
<p>They conduct this challenge twice a year and they have one coming up in <a target="_blank" href="https://paperswithcode.com/rc2020">Spring 2021.</a> You should study the past three versions of the challenge, and I’ll write a detailed post on what to expect, how to prepare, and so on.</p>
<p><strong>Now you must be wondering – how can you find the right paper to read?</strong></p>
<h2 id="heading-how-to-find-the-right-paper-to-read">How to Find the Right Paper to Read</h2>
<p>In order to get some ideas around this, I reached out to my friend, <a target="_blank" href="https://scholar.google.com/citations?user=zd0-SNQAAAAJ&amp;hl=en&amp;oi=ao">Anurag Ghosh</a> who is a researcher at Microsoft. Anurag has been working at the crossover of computer vision, machine learning, and systems engineering.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-04-at-12.08.31-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>https://anuragxel.github.io/</em></p>
<p>Here are a few of his tips for getting started:</p>
<ul>
<li><p>Always pick an area you're interested in.</p>
</li>
<li><p>Read a few good books or detailed blog posts on that topic and start diving deep by reading the papers referenced in those resources.</p>
</li>
<li><p>Look for seminal papers around that topic. These are papers that report a major breakthrough in the field and offer a new method perspective with a huge potential for subsequent research in that field. Check out papers from <a target="_blank" href="https://blog.acolyer.org/">the morning paper</a> or <a target="_blank" href="https://www.thecvf.com/?page_id=413#Helmholtz">C</a>VF - test of time award/Helmholtz prize (if you're interested in computer vision).</p>
</li>
<li><p>Check out books like <strong>Computer Vision: Algorithms and Applications</strong> by Richard Szeliski and look for the papers referenced there.</p>
</li>
<li><p>Have and build a sense of community. Find people who share similar interests, and join groups/subreddits/discord channels where such activities are promoted.</p>
</li>
</ul>
<p>In addition to these invaluable tips, there are a number of web applications that I’ve shortlisted that help me narrow my search for the right papers to read:</p>
<ul>
<li><a target="_blank" href="https://www.reddit.com/r/MachineLearning/">r/MachineLearning</a> — there are many researchers, practitioners, and engineers who share their work along with the papers they've found useful in achieving those results.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-01-at-10.55.53-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>[https://www.reddit.com/r/MachineLearning/](https://www.reddit.com/r/MachineLearning/" rel="nofollow noopener)</em></p>
<ul>
<li><a target="_blank" href="http://www.arxiv-sanity.com/top">Arxiv Sanity Preserver</a> — built by Andrej Karpathy to accelerate research. It is a repository of 142,846 papers from computer science, machine learning, systems, AI, Stats, CV, and so on. It also offers a bunch of filters, powerful search functionality, and a discussion forum to make for a super useful research platform.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-01-at-10.59.41-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<ul>
<li><a target="_blank" href="https://research.google/">Google Research</a> — the research teams at Google are working on problems that have an impact on our everyday lives. They share their publications for individuals and teams to learn from, contribute to, and expedite research. They also have a Google AI blog that you can check out.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-01-at-11.13.31-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-read-a-research-paper">How to Read a Research Paper</h2>
<p>After you have stocked your to-read list, then comes the process of reading these papers. Remember that NOT every paper is useful to read and we need a mechanism that can help us quickly screen papers that are worth reading.</p>
<p>To tackle this challenge, you can use this <a target="_blank" href="http://ccr.sigcomm.org/online/files/p83-keshavA.pdf"><strong>Three-Pass Approach</strong> by <strong>S. Keshav</strong></a>. This approach proposes that you read the paper in three passes instead of starting from the beginning and diving in deep until the end.</p>
<h3 id="heading-the-three-pass-approach">The three pass approach</h3>
<ol>
<li><p><strong>The first pass —</strong> is a quick scan to capture a high-level view of the paper. Read the title, abstract, and introduction carefully followed by the headings of the sections and subsections and lastly the conclusion. It should take you no more than 5–10 mins to figure out if you want to move to the second pass.</p>
</li>
<li><p><strong>The second pass —</strong> is a more focused read without checking for the technical proofs. You take down all the crucial notes, underline the key points in the margins. Carefully study the figures, diagrams, and illustrations. Review the graphs, mark relevant unread references for further reading. This helps you understand the background of the paper.</p>
</li>
<li><p><strong>The third pass —</strong> reaching this pass denotes that you’ve found a paper that you want to deeply understand or review. The key to the third pass is to reproduce the results of the paper. Check it for all the assumptions and jot down all the variations in your re-implementation and the original results. Make a note of all the ideas for future analysis. It should take 5–6 hours for beginners and 1–2 hours for experienced readers.</p>
</li>
</ol>
<h2 id="heading-tools-and-software-to-keep-track-of-your-pipeline-of-papers">Tools and Software to Keep Track of Your Pipeline of Papers</h2>
<p>If you’re sincere about reading research papers, your list of papers will soon grow into an overwhelming stack that is hard to keep track of. Fortunately, we have software that can help us set up a mechanism to manage our research.</p>
<p>Here are a bunch of them that you can use:</p>
<ul>
<li><a target="_blank" href="https://www.mendeley.com/?interaction_required=true"><strong>Mendeley</strong></a> <strong>[not free]</strong> — you can add papers directly to your library from your browser, import documents, generate references and citations, collaborate with fellow researchers, and access your library from anywhere. This is mostly used by experienced researchers.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-02-at-1.28.19-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>https://www.mendeley.com/?interaction_required=true</em></p>
<ul>
<li><strong>Zotero [free &amp; open source] —</strong> Along the same lines as Mendeley but free of cost. You can make use of all the features but with limited storage space.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screenshot-2021-03-02-at-1.42.28-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>https://www.zotero.org/</em></p>
<ul>
<li><strong>Notion —</strong> this is great if you are just starting out and want to use something lightweight with the option to organize your papers, jot down notes, and manage everything in one workspace. It might not stand anywhere in comparison with the above tools but I personally feel comfortable using Notion and I have created <a target="_blank" href="https://www.notion.so/My-paper-pipeline-ec3ff02ce9c641d2953f6cdbc431a55a">this board</a> to keep track of my progress for now that you can duplicate:</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/03/2.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-symptoms-of-reading-a-research-paper">⚠️ Symptoms of Reading a Research Paper</h2>
<p>Reading a research paper can turn out to be frustrating, challenging, and time-consuming especially when you’re a beginner. You might face the following common symptoms:</p>
<ul>
<li><p>You might start feeling dumb for not understanding a thing a paper says.</p>
</li>
<li><p>Finding yourself pushing too hard to understand the math behind those proofs.</p>
</li>
<li><p>Beating your head against the wall to wrap it around the number of acronyms used in the paper. Just kidding, you’ll have to look up those acronyms every now and then.</p>
</li>
<li><p>Being stuck on one paragraph for more than an hour.</p>
</li>
</ul>
<p>Here’s a complete list of emotions that you might undergo as explained by Adam Ruben in <a target="_blank" href="https://www.sciencemag.org/careers/2016/01/how-read-scientific-paper">this article</a>.</p>
<h2 id="heading-key-takeaways">Key Takeaways</h2>
<p>We should be all set to dive right in. Here’s a quick summary of what we have covered here:</p>
<ul>
<li><p>A research paper is an in-depth study that offers an detailed explanation of a topic or problem along with the research process, proofs, explained results, and ideas for future work.</p>
</li>
<li><p>Read research papers to develop a deep understanding of a topic/problem. Then you can either review papers as part of being a researcher, explore the domain and the kind of problems to build a solution or startup around it, or you can simply read them to keep abreast of the developments in your domain of interest.</p>
</li>
<li><p>If you’re a beginner, start with exploration to soon find your path to goal-oriented research.</p>
</li>
<li><p>In order to find good papers to read, you can use websites like arxiv-sanity, google research, and subreddits like r/MachineLearning.</p>
</li>
<li><p>Reading approach — Use the 3-pass method to find a paper.</p>
</li>
<li><p>Keep track of your research, notes, developments by using tools like Zotero/Notion.</p>
</li>
<li><p>This can get overwhelming in no time. Make sure you start off easy and increment your load progressively.</p>
</li>
</ul>
<p><strong>Remember: Art is not a single method or step done over a weekend but a process of accomplishing remarkable results over time.</strong></p>
<p>You can also watch the video on this topic on my <a target="_blank" href="https://www.youtube.com/channel/UCH-xwLTKQaABNs2QmGxK2bQ">YouTube channel</a>:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/FukV7n8ztT8" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p> </p>
<p>Feel free to respond to this blog or comment on the video if you have some tips, questions, or thoughts!</p>
<p>If this tutorial was helpful, you should check out my data science and machine learning courses on <a target="_blank" href="https://www.wiplane.com/">Wiplane Academy</a>. They are comprehensive yet compact and helps you build a solid foundation of work to showcase.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Inductive VS Deductive Reasoning – The Meaning of Induction and Deduction, with Argument Examples ]]>
                </title>
                <description>
                    <![CDATA[ If you're conducting research on a topic, you'll use various strategies and methods to gather information and come to a conclusion. Two of those methods are inductive and deductive reasoning. So what's the difference between inductive and deductive r... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/inductive-vs-deductive-reasoning/</link>
                <guid isPermaLink="false">66b1fa5201079c4f2679de8c</guid>
                
                    <category>
                        <![CDATA[ Philosophy ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Abigail Rennemeyer ]]>
                </dc:creator>
                <pubDate>Sun, 29 Nov 2020 19:05:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9632740569d1a4ca1062.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're conducting research on a topic, you'll use various strategies and methods to gather information and come to a conclusion.</p>
<p>Two of those methods are <strong>inductive</strong> and <strong>deductive</strong> reasoning.</p>
<p>So what's the difference between inductive and deductive reasoning, when should you use each method, and is one better than the other?</p>
<p>We'll answer those questions and give you some examples of both types of reasoning in this article.</p>
<h2 id="heading-what-is-inductive-reasoning">What is Inductive Reasoning?</h2>
<h3 id="heading-the-method-behind-inductive-reasoning">The method behind inductive reasoning</h3>
<p>When you're using inductive reasoning to conduct research, you're basing your conclusions off your observations. You gather information - from talking to people, reading old newspapers, observing people, animals, or objects in their natural habitat, and so on.</p>
<p>Inductive reasoning helps you take these observations and form them into a theory. So you're starting with some more specific information (what you've seen/heard) and you're using it to form a more general theory about the way things are.</p>
<h3 id="heading-what-does-the-inductive-reasoning-process-look-like">What does the inductive reasoning process look like?</h3>
<p>You can think of this process as a reverse funnel – starting with more specifics and getting broader as you reach your conclusions (theory).</p>
<p>Some people like to think of it as a "bottom up" approach (meaning you're starting at the bottom with the info and are going up to the top where the theory forms).</p>
<h3 id="heading-heres-an-example-of-an-inductive-argument">Here's an example of an inductive argument:</h3>
<p>Observation (premise): My Welsh Corgis were incredibly stubborn and independent (specific observation of behavior).<br>Observation (premise): My neighbor's Corgis are the same way (another specific observation of behavior).<br>Theory: All Welsh Corgis are incredibly stubborn and independent (general statement about the behavior of Corgis).</p>
<p>As you can see, I'm basing my theory on my observations of the behavior of a number of Corgis. Since I only have a small amount of data, my conclusion or theory will be quite weak.</p>
<p>If I was able to observe the behavior of 1000 Corgis (omg that would be amazing), my conclusion would be stronger – but still not certain. Because what if 10 of them were extremely well-behaved and obedient? Or what if the 1001st Corgi was?</p>
<p>So, as you can see, I can make a general statement about Corgis being stubborn, but I can't say that ALL of them are.</p>
<h3 id="heading-what-can-you-conclude-with-inductive-reasoning">What can you conclude with inductive reasoning?</h3>
<p>As I just discussed, one of the main things to know about inductive reasoning is that any conclusions you make from inductive research will not be 100% certain or confirmed.</p>
<p>Let's talk about the language we use to describe inductive arguments and conclusions. You can have a <strong>strong</strong> argument (if your premise(s) are true, meaning your conclusion is probably true). And that argument becomes <strong>cogent</strong> if the conclusion ends up being true. </p>
<p>Still, even if the premises of your argument are true, and that means that your conclusion is probably true, or likely true, or true much of the time – it's not certain.</p>
<p>And – weirdly enough – your conclusion can still be false even if all your premises are true (my Corgis were stubborn, my neighbor's corgis were stubborn, perhaps a friend's Corgis and the Queen of England's Corgis were stubborn...but that doesn't guarantee that all Corgis are stubborn).</p>
<h3 id="heading-how-to-make-your-inductive-arguments-stronger">How to make your inductive arguments stronger</h3>
<p>If you want to make sure your inductive arguments are as strong as possible, there are a couple things you can do.</p>
<p>First of all, make sure you have a large data set to work with. The larger your sample size, the stronger (and more certain/conclusive) your results will be. Again, thousands of Corgis are better than four (I mean, always, amiright?).</p>
<p>Second, make sure you're taking a random and representative sample of the population you're studying. So, for example, don't just study Corgi puppies (cute as they may be). Or show Corgis (theoretically they're better trained). You'd want to make sure you looked at Corgis from all walks of life and of all ages.</p>
<p>If you want to dig deeper into inductive reasoning, look into the three different types – generalization, analogy, and causal inference. You can also look into the two main methods of inductive reasoning, enumerative and eliminative. But those things are a bit out of the scope of this beginner's guide. :)</p>
<h2 id="heading-what-is-deductive-reasoning">What is Deductive Reasoning?</h2>
<h3 id="heading-the-method-behind-deductive-reasoning">The method behind deductive reasoning</h3>
<p>In order to use deductive reasoning, you have to have a theory to begin with. So inductive reasoning usually comes before deductive in your research process.</p>
<p>Once you have a theory, you'll want to test it to see if it's valid and your conclusions are sound. You do this by performing experiments and testing your theory, narrowing down your ideas as the results come in. You perform these tests until only valid conclusions remain.</p>
<h3 id="heading-what-does-the-deductive-reasoning-process-look-like">What does the deductive reasoning process look like?</h3>
<p>You can think of this as a proper funnel – you start with the broad open top end of the funnel and get more specific and narrower as you conduct your deductive research. </p>
<p>Some people like to think of this as a "top down" approach (meaning you're starting at the top with your theory, and are working your way down to the bottom/specifics). I think it helps to think of this as "<strong>reductive</strong>" reasoning – you're reducing your theories and hypotheses down into certain conclusions.</p>
<h3 id="heading-heres-an-example-of-a-deductive-argument">Here's an example of a deductive argument:</h3>
<p>We'll use a classic example of deductive reasoning here – because I used to study Greek Archaeology, history, and language:</p>
<p>Theory: All men are mortal<br>Premise: Socrates is a man<br>Conclusion: Therefore, Socrates is mortal</p>
<p>As you can see here, we start off with a general theory – that all men are mortal. (This is assuming you don't believe in elves, fairies, and other beings...) </p>
<p>Then we make an observation (develop a premise) about a particular example of our data set (Socrates). That is, we say that he is a man, which we can establish as a fact. </p>
<p>Finally, because Socrates is a man, and based on our theory, we conclude that Socrates is therefore mortal (since all men are mortal, and he's a man).</p>
<p>You'll notice that deductive reasoning relies less on information that could be biased or uncertain. It uses facts to prove the theory you're trying to prove. If any of your facts lead to false premises, then the conclusion is invalid. And you start the process over.</p>
<h3 id="heading-what-can-you-conclude-with-deductive-reasoning">What can you conclude with deductive reasoning?</h3>
<p>Deductive reasoning gives you a certain and conclusive answer to your original question or theory. A deductive argument is only <strong>valid</strong> if the premises are true. And the arguments are <strong>sound</strong> when the conclusion, following those valid arguments, is true.</p>
<p>To me, this sounds a bit more like the scientific method. You have a theory, test that theory, and then confirm it with conclusive/valid results.</p>
<p>To boil it all down, in deductive reasoning:</p>
<blockquote>
<p>"If all premises are true, the terms are <a target="_blank" href="https://en.wikipedia.org/wiki/Unambiguous">clear</a>, and the rules of deductive <a target="_blank" href="https://en.wikipedia.org/wiki/Logic">logic</a> are followed, then the conclusion reached is <a target="_blank" href="https://en.wikipedia.org/wiki/Logical_necessity">necessarily true</a>." (<a target="_blank" href="https://en.wikipedia.org/wiki/Deductive_reasoning">Source</a>)</p>
</blockquote>
<h2 id="heading-so-does-sherlock-holmes-use-inductive-or-deductive-reasoning">So Does Sherlock Holmes Use Inductive or Deductive Reasoning?</h2>
<p>Sherlock Holmes is famous for using his deductive reasoning to solve crimes. But really, he mostly uses inductive reasoning. Now that we've gone through what inductive and deductive reasoning are, we can see why this is the case.</p>
<p>Let's say Sherlock Holmes is called in to work a case where a woman was found dead in her bed, under the covers, and appeared to be sleeping peacefully. There are no footprints in the carpet, no obvious forced entry, and no immediately apparent signs of struggle, injury, and so on.</p>
<p>Sherlock observes all this as he looks in, and then enters the room. He walks around the crime scene making observations and taking notes. He might talk to anyone who lives with her, her neighbors, or others who might have information that could help him out.</p>
<p>Then, once he has all the info he needs, he'll come to a conclusion about how the woman died.</p>
<p>That pretty clearly sounds like an inductive reasoning process to me.</p>
<p>Now you might say - what if Sherlock found the "smoking gun" so to speak? Perhaps this makes his arguments and process seem more deductive. </p>
<p>But still, remember how he gets to his conclusions: starting with observations and evidence, processing that evidence to come up with a hypothesis, and then forming a theory (however strong/true-seeming) about what happened.</p>
<h2 id="heading-how-to-use-inductive-and-deductive-reasoning-together">How to Use Inductive and Deductive Reasoning Together</h2>
<p>As you might be able to tell, researchers rarely just use one of these methods in isolation. So it's not that deductive reasoning is better than inductive reasoning, or vice versa – they work best when used in tandem.</p>
<p>Often times, research will begin inductively. The researcher will make their observations, take notes, and come up with a theory that they want to test.</p>
<p>Then, they'll come up with ways to definitively test that theory. They'll perform their tests, sort through the results, and deductively come to a sure conclusion.</p>
<p>So if you ever hear someone say "I deduce that x happened", they better make sure they're working from facts and not just observations. :)</p>
<h2 id="heading-tldr-inductive-vs-deductive-reasoning-what-are-the-main-differences">TL;DR: Inductive vs Deductive Reasoning – What are the Main Differences?</h2>
<h3 id="heading-inductive-reasoning">Inductive reasoning:</h3>
<ul>
<li>Based on observations, conversations, stuff you've read</li>
<li>Starts with information/evidence and works towards a broader theory</li>
<li>Arguments can be strong and cogent, but never valid or sound (that is, certain)</li>
<li>Premises can all be true, but conclusion doesn't have to be true</li>
</ul>
<h3 id="heading-deductive-reasoning">Deductive reasoning:</h3>
<ul>
<li>Based on testing a theory, narrowing down the results, and ending with a conclusion</li>
<li>Starts with a broader theory and works towards certain conclusion</li>
<li>Arguments can be valid/invalid or sound/unsound, because they're based on facts</li>
<li>If premises are true, conclusion has to be true</li>
</ul>
<p>And here's a cool and helpful chart if you're a visual learner: </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/12/Argument_terminology_used_in_logic_-en-.svg" alt="Image" width="600" height="400" loading="lazy">
<em>Image <a target="_blank" href="https://commons.wikimedia.org/w/index.php?curid=88640183">source</a></em></p>
<h2 id="heading-thats-about-it">That's about it!</h2>
<p>Now, if you need to conduct some research, you should have a better idea of where to start – and where to go from there.</p>
<p>Just remember that induction is all about observing, hypothesizing, and forming a theory. Deducing is all about taking that (or any) theory, boiling it down, and testing until a certain conclusion(s) is all that remains.</p>
<p>Happy reasoning!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Qualitative VS Quantitative Definition – Research Methods and Data ]]>
                </title>
                <description>
                    <![CDATA[ When you’re conducting research, your data will fall into two categories: qualitative or quantitative. So what’s the difference between these two data types? Well, here’s a quick and easy way to remember at least the basic difference: quantitative da... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/qualitative-vs-quantitative-definition-research-methods-and-data/</link>
                <guid isPermaLink="false">66b1fa73eea9870582e16bdf</guid>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ User Research ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Abigail Rennemeyer ]]>
                </dc:creator>
                <pubDate>Tue, 03 Nov 2020 04:04:18 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9580740569d1a4ca0d56.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When you’re conducting research, your data will fall into two categories: qualitative or quantitative. So what’s the difference between these two data types?</p>
<p>Well, here’s a quick and easy way to remember at least the basic difference: <strong>quantitative data</strong> deals with <strong>quan</strong>tities of things – numbers and measurable information, like how many people visit a website each day. That’s all about quantity (sounds like quantitative, right?).</p>
<p>On the other hand, <strong>qualitative data</strong> gives you more insight into what people think, feel, and believe – the <strong>qual</strong>ity of a thing, person, or situation. Alright that one’s a bit more of a stretch, but it works.</p>
<p>Now let’s get more into the details of qualitative and quantitative research so you know how to conduct each.</p>
<h2 id="heading-what-is-qualitative-research">What is Qualitative research?</h2>
<p>Qualitative research focuses on the human perspective, and usually answers the question “why?” If you want to learn how people perceive their environment, why they hold certain beliefs, or how they understand their problems, you’ll conduct qualitative research.</p>
<p>It’s also all about context. When you’re researching a group, you want to study them in their natural environment. This gives you insights into their behavior, beliefs, opinions, and so on.</p>
<h3 id="heading-how-do-you-conduct-qualitative-research">How do you conduct qualitative research?</h3>
<p>You can conduct qualitative research in a few different ways. Doing interviews, setting up focus groups, giving people open-ended questionnaires, studying photo collections, and observing people in their daily routines are all forms of qualitative data collection.</p>
<p>When you engage with people in these ways, you’re giving the opportunity to give more in-depth, elaborate responses. They’re not just responding “yes” or “no” – they’re telling you what they think.</p>
<p>You can also make observations from photographs or from watching people – things like the way people are looking at each other lovingly, or how two old people might hold hands while they watch TV.</p>
<p>From these observations, you can theorize that those people love each other, are close to each other, know each other well and are comfortable around each other, and so on. Things that are hard to quantify with numbers or measure with figures.</p>
<h2 id="heading-what-is-quantitative-research">What is Quantitative research?</h2>
<p>Quantitative research, on the other hand, involves collecting facts and figures and often results in numerical, structured data. Think data you can put in a spreadsheet and analyze.</p>
<p>Instead of talking to people and getting their opinions, you’re asking them yes or no questions. Instead of asking someone why they do something, you’re finding out what they do, or how many people do that thing, or how often – and so on.</p>
<h3 id="heading-real-quick-what-is-structured-data">Real quick - what is structured data?</h3>
<p>Let's say you're looking at a recipe on your favorite online cooking blog. The structured data are things like the ingredients, the oven temperature, how many calories a serving has, and how long you cook the food. These are all quantifiable (and measurable with numbers/facts) things.</p>
<p>Unstructured data, on the other hand, would include the food blogger's little story about how they discovered or created the recipe, what people have said about how delicious it is, and how much they love the texture of those soft, gooey cookies. You can't measure these data – they're opinion and experience-based.</p>
<h3 id="heading-how-do-you-conduct-quantitative-research">How do you conduct quantitative research?</h3>
<p>You can conduct quantitative research by looking at statistical data (how many people did x), giving people multiple choice or true/false tests, asking them yes/no questions on a survey, and so on.</p>
<p>All in all, you’re trying to answer the question “what” or “how” – what something is, what’s the number of people who order from Amazon every day, how many cars are in that parking lot.</p>
<p>Because of the nature of the data and collection methods, context isn’t a factor in this type of research.</p>
<p>With quantitative research, you’re interested in gathering data that support and prove or disprove a hypothesis or theory you already have.</p>
<p>So instead of observing and talking to people and then forming a theory about what’s going on, you collect your data, and then make conclusions about the validity of your hypothesis based on that data.</p>
<h2 id="heading-is-qualitative-or-quantitative-research-better">Is Qualitative or Quantitative research better?</h2>
<p>Alright, so you have these two methods of research – which is better?</p>
<p>Well, most people would argue that they’re better when used together. They’re complementary. Each has its pros and cons (which we’ll discuss), but each method definitely brings important information to the table.</p>
<p>Before we discuss just how they can work together, let’s look at the good and the bad of each.</p>
<h3 id="heading-pros-and-cons-of-qualitative-research">Pros and Cons of Qualitative research</h3>
<p>Let's start with the good. Qualitative research lets you dig deeper into a problem, situation, or context and see why things are happening. You get personal insights from your subjects that can't necessarily come from numbers and figures.</p>
<p>You also have the benefit of context, which can shed light on why a person said certain things or was feeling a certain way (for example if they live in a war zone or in a small village in the middle of nowhere or in the largest city in the world).</p>
<p>On the other hand, qualitative research is more time-consuming and therefore expensive. It takes a lot more time to interview people or set up focus groups than it does to send someone a simple yes/no survey.</p>
<p>It can also be harder to get people to participate in qualitative research. They might not have the time or energy (or desire) to share extensively.</p>
<p>Finally, qualitative research is never really definitive. People are always changing, as are their perceptions of the world around them. So while qualitative data can help inform your hypothesis and fill in gaps in your research, it should usually be supported by quantitative data.</p>
<h3 id="heading-pros-and-cons-of-quantitative-research">Pros and Cons of Quantitative research</h3>
<p>Quantitative research produces hard facts, numbers, and other measurable things. Which can be very useful when you're trying to prove a theory or understand what you're dealing with.</p>
<p>It's also independent of changeable things, like researcher bias or people's current opinions or moods. So quantitative research is repeatable and can be tested and re-tested again and again.</p>
<p>And, practically speaking, quantitative data analysis can be performed much more quickly than qualitative research. You can simply send someone a survey, collect the response data, and dump that data into a spreadsheet or database. From there, running various queries and analyses is easy (assuming you know what you want to ask).</p>
<p>Still, quantitative research is limiting in certain ways. People can't explain their answers to a multiple choice test or yes/no survey (again, lack of context). This means you can't take human factors into account.</p>
<p>So while you have the facts and numbers, you have to decide how to interpret them and use them in your research. (This can be both good and bad.)</p>
<h2 id="heading-how-to-use-qualitative-and-quantitative-research-together">How to use Qualitative and Quantitative research together</h2>
<p>Sometimes it’s best to start with qualitative research – gather information, talk to people, try to understand their problems/perceptions/opinions, then form a hypothesis.</p>
<p>Then, once you have your hypothesis, use quantitative methods to confirm (or disprove) it with data analysis. This will show you whether the issue/problem/situation exists in general, or was just part of someone’s perception.</p>
<p>But qualitative research/insights can also help round out your structured data/conclusions – if you’ve learned that x people use your site every day, quotes from people about why they use it (as opposed to another company) can teach you more about what’s working (or not) and why.</p>
<h2 id="heading-examples-of-qualitative-and-quantitative-research">Examples of Qualitative and Quantitative research</h2>
<h3 id="heading-first-example">First example</h3>
<p>Say you want to learn more about people who visit Paris on vacation. You could look at flight data, museum admission numbers, tourist info to figure out how many people visit Paris each year. But that won’t tell you why they’re visiting.</p>
<p>To learn why, you have to ask people why they wanted to visit Paris, what was their favorite part of the city, what was their experience like as a tourist in Paris, and so on. This will give you insights into what motivates people to travel there in the first place.</p>
<h3 id="heading-another-example">Another example</h3>
<p>Let’s say you run an e-commerce site that helps people resell their gently used clothing. </p>
<p>You can gather information about how many people sell clothes on your site, how many items the average person has sold, how many people visit the site to buy those clothes, and so on. All that’s right there in the analytics.</p>
<p>But if you want to know why people choose to use your site – either to sell or buy clothes – you’d want to start by conducting an open-ended questionnaire or ask for feedback on a survey. </p>
<p>Also, if you want to know what they like about your site, and how that influences their decision to use it, you could ask them to describe their experience using the site, and so on.</p>
<p>Ultimately, you’ll want to use both qualitative and quantitative research to get the whole picture. And you won’t just use one, and then just use the other. You can go back and forth between the two methods as your research evolves and you gather more information.</p>
<p>This will help you get a more complete picture, form a stronger and deeper hypothesis, and establish both facts about and insights into the situation.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Ask Effective Questions: A Practical Guide for Developers ]]>
                </title>
                <description>
                    <![CDATA[ Learning is a journey that never ends. At every point in your career, you will keep learning, re-learning, and un-learning. The ability to find answers to problems is key, and these answers can be gotten by either debugging, googling or asking questi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/asking-effective-questions-a-practical-guide-for-developers/</link>
                <guid isPermaLink="false">66d84e095a0b456f4d321437</guid>
                
                    <category>
                        <![CDATA[ 100DaysOfCode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ career advice ]]>
                    </category>
                
                    <category>
                        <![CDATA[ debugging ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Developer ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Google ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Problem Solving ]]>
                    </category>
                
                    <category>
                        <![CDATA[ programing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Bolaji Ayodeji ]]>
                </dc:creator>
                <pubDate>Tue, 12 May 2020 08:20:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/05/asking-effectively.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Learning is a journey that never ends. At every point in your career, you will keep learning, re-learning, and un-learning.</p>
<p>The ability to find answers to problems is key, and these answers can be gotten by either debugging, googling or asking questions. These are skills everyone should learn.</p>
<p>While asking questions is great, doing it the wrong or less effective way might lead to many hours of unproductive work. In this article show you how to ask effective questions, become a better googler, and hone your problem-solving skills.</p>
<h2 id="heading-the-read-search-ask-method">The Read Search Ask Method</h2>
<p>freeCodeCamp came up with this amazing method for their students called the <a target="_blank" href="https://www.freecodecamp.org/forum/t/how-to-get-help-when-you-are-stuck-coding/19514">Read Search Ask</a> method where you can solve your problems efficiently while respecting other people’s time, too.</p>
<p>It is expected that you follow these steps in order before you ask a question.</p>
<ul>
<li><p><strong>Read</strong> the error or documentation</p>
</li>
<li><p><strong>Search</strong> Google or Stackoverflow</p>
</li>
<li><p><strong>Ask</strong> for help</p>
</li>
</ul>
<h3 id="heading-read-your-errors">Read your errors</h3>
<p>The first step to finding a solution(s) to your problem is to understand the problem itself. Many developers ask questions without understanding the problem. Remember you want to ask questions efficiently and also respect the time of the individual you will be asking.</p>
<p>Most often, the answers to your bugs are in the errors itself. It's not considerate to ask questions that you could have solved yourself if you had read the error itself.</p>
<p>One great way to debug your errors is to log the error on your console or terminal and read the errors. Five things can happen at this stage:</p>
<ul>
<li><p>You identify the bug</p>
</li>
<li><p>You determine the location of the bug (possible a file or section of your code)</p>
</li>
<li><p>You understand the cause(s) of the bug</p>
</li>
<li><p>You outline possible fixes of the bug</p>
</li>
<li><p>You implement the possible fixes</p>
</li>
</ul>
<p>Most often, just this step alone can help you solve your problem. The more you practice this, the better you become at debugging and fixing issues. Some bugs might be more complex than your capacity, and then you need to seek external help or resources.</p>
<h3 id="heading-read-the-documentation">Read the Documentation</h3>
<p>Let's assume you couldn't fix your issues from the first step (but you were able to identify the bug at least). Then you need to read some documentation.</p>
<p>This might not apply to all bugs, but make sure to run your issue through this step before moving to the next. After identifying your bug, it's time to determine the cause and outline possible fixes.</p>
<blockquote>
<p>Documentation is a set of documents provided on paper, or online, or on digital or analogue media, such as audio tape or CDs. Examples are user guides, white papers, on-line help, quick-reference guides. Paper or hard-copy documentation has become less common. ~ <a target="_blank" href="https://en.wikipedia.org/wiki/Documentation">Wikipedia</a></p>
</blockquote>
<p>Documentation serves as the official guide of a particular programming language, framework, library or technology. The best place to get the first-hand resource on a specific issue is to check the official help guide of the technology.</p>
<p>You might have misconfigured something, installed some wrong package or forgot to import something. But when you read the docs of the tech responsible for the bug it can help you find a fix quickly.</p>
<p>Recently I was working on a Gatsby project, and I ran into some console errors and blank white page in production. But this didn't occur in development.</p>
<pre><code class="lang-python">TypeError: t.test <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> a function
</code></pre>
<p>So vague right? After identifying the bug location, reading the docs and trying out several fixes, I discovered something: in the Gatsby Google analytics plugin configuration, I left the array meant to avoid sending pageview hits from custom paths empty.</p>
<pre><code class="lang-python">plugins: [
    {
      resolve: `gatsby-plugin-google-analytics`,
      options: {
        trackingId: <span class="hljs-string">'UA-XXXXXXXX-1'</span>,
        head: false,
        anonymize: true,
        respectDNT: true,
        exclude: [<span class="hljs-string">''</span>],
        pageTransitionDelay: <span class="hljs-number">0</span>,
      }
]
</code></pre>
<p>After 3 hours of reading the error, trying to identify the bug and reading Gatsby docs, I figured out that the <code>exclude[]</code> option had no values in it. Removing this fixed my issue since I didn't need to exclude any page after all.</p>
<p>This shows why you should spend some time debugging. It might take some time, and it will be frustrating. The bug might look stupid, the fix might be simple, but it's worth it. The more time you spend debugging, the better you become and the faster you will fix even more complex bugs next time.</p>
<h3 id="heading-search">Search</h3>
<p>Now if you have read your errors and several docs, but your bug is becoming more complex, it's time to search the web "effectively".</p>
<p>One of the best places to search for solutions to your issues is <a target="_blank" href="https://google.com">Google</a> since it already crawls content from numerous webpages, dev communities, and docs like <a target="_blank" href="https://stackoverflow.com/">StackOverflow</a>, <a target="_blank" href="https://hashnode.com/">Hashnode</a>, <a target="_blank" href="https://www.freecodecamp.org/news/">freeCodeCamp News</a>, <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web">MDN</a>, <a target="_blank" href="https://css-tricks.com/">CSS tricks</a>, <a target="_blank" href="https://hackernoon.com/">Hackernoon</a>, and many others.</p>
<p>Here are some helpful Google search tips you can try to get answers more efficiently:</p>
<ul>
<li>Add a specific domain to channel your search to a particular website and save some time. You can append the <code>site: sitename</code> to your search, and it'll return only results from that website.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1589268176790/vwk3EmzK9.png" alt="Screen Shot 2020-05-12 at 12.49.06 PM.png" width="3104" height="1978" loading="lazy"></p>
<ul>
<li>Search for specific title and text in specific sites. This will allow your results to include resources related to the title or text keyword you specified.</li>
</ul>
<blockquote>
<p>intitle:axe</p>
<p>intitle:axe intext:web ui testing</p>
<p>intitle:axe intext:web ui testing site:bolajiayodeji.com</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1589268185857/KA_B5_TTq.png" alt="Screen Shot 2020-05-12 at 12.48.59 PM.png" width="3104" height="1978" loading="lazy"></p>
<ul>
<li><p>Add specific keywords to your search and pull out individual details like file paths. If your bug is related to Python, add it to your search query. If it is related to objects, add that too. This will streamline the results to a wider range of possible resources related to your bug, since there are objects in just about every programming language.</p>
</li>
<li><p>Google automatically omits most non-alphanumeric characters from your queries. Symbols like <strong>`!@#$%^&amp;*(){}[]&lt;&gt;</strong> are not included in your search. So you can focus on more specific keywords, as discussed above.</p>
</li>
<li><p>Copy and paste your errors (removing specific information); there is a 99.9% chance that someone else has encountered the same error and has maybe opened some issue or written an article about it. Never underestimate the power of StackOverflow and GitHub issues.</p>
</li>
<li><p>Search within the past few years since programming changes pretty quickly. This will ensure you don't hit redundant resources.</p>
</li>
<li><p>Reiterate, try different keywords and more general keywords multiple times, and open multiple tabs until you find an answer. This might be awkward at first, but as you consistently do this, you'll get better, and with time it will take you less time and fewer tabs to find an answer.</p>
</li>
</ul>
<h3 id="heading-ask">Ask</h3>
<p>Now comes the sought-after diamond. I would advise, before you ask ANY questions, that you make sure you have completed steps 1 and 2.</p>
<p>This might be hard, but the earlier you get used to this, the better you grow. I've had people ask me questions, and when I copy and paste their question into Google, the first result answers the question 100%. This doesn't feel great.</p>
<p>Most often, I'll have to send the link to them. Meanwhile, they could have done this themselves and saved me some time while increasing their problem-solving skills.</p>
<p>Even if your next-door neighbour works at Google, if your dad is a Software Engineer, if your close friend has two more years experience beyond you, try not to ask them questions until you have invested time into finding solutions yourself. This will help you:</p>
<ul>
<li><p>Build more self-confidence, as you won't need to rely so much on others. (What if that close friend is unavailable to respond to you someday, what will you do?!)</p>
</li>
<li><p>Save the time of whomever you are planning to ask questions. There are tons of developers around the world, and you might not be the only one asking that same person questions. By completing steps 1 and 2 first, you are also helping others with less experience or more complex problems get answers quickly.</p>
</li>
<li><p>Build your problem-solving, debugging, research and googling skills. These are essential skills that will help you become a better developer. You only master a skill when you consistently practice it, so try to practice this regularly and watch yourself grow and master the art.</p>
</li>
</ul>
<div class="embed-wrapper">
        <blockquote class="twitter-tweet">
          <a href="https://twitter.com/iambolajiayo/status/1255694731482365952"></a>
        </blockquote>
        <script defer="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<p> </p>
<p>But let's say that you have completed both steps, and you still need external help from a mentor, senior developer, team lead, the local community, group, or friend. How then do you ask questions effectively?</p>
<ul>
<li><p>Complete step 1 and make sure you understand the problem already</p>
</li>
<li><p>Complete step 2 so you might at least have gotten some insights into possible causes and solutions of the problem</p>
</li>
<li><p>Now do some research: you are either asking the question in dev communities like <a target="_blank" href="https://stackoverflow.com/">Stackoverflow</a> or <a target="_blank" href="https://hashnode.com/">Hashnode</a> or requesting help from an individual you feel has more experience than you.</p>
</li>
<li><p>Developers answering questions on dev communities are sacrificing their time to help you. Help them also by asking "clear and concise questions". You should choose your words deliberately and precisely, constructing your sentences carefully to avoid confusion. From step 1 and step 2, properly draft your questions based on:</p>
<ul>
<li><p>The "problem" you have encountered</p>
</li>
<li><p>Your thoughts on what you think might be wrong "based on your research."</p>
</li>
<li><p>Proof of research efforts (Devs will be happier to help you once they see you have made some effort already). Add links to resources you have checked and solutions you have tried already.</p>
</li>
<li><p>Be conversant with tools like <a target="_blank" href="https://codepen.io/">CodePen</a>, <a target="_blank" href="https://codesandbox.io/">CodeSandBox</a>, <a target="_blank" href="https://gist.github.com/">GitHub Gist</a>, <a target="_blank" href="https://repl.it/">Repl.it</a>, and <a target="_blank" href="https://github.com/">GitHub</a> so you can easily provide a link to a snippet of your code, a working project or <a target="_blank" href="https://gist.github.com/Rich-Harris/88c5fc2ac6dc941b22e7996af05d70ff">mimimal reproduction</a> without having to type so much text. <strong>Please try as much as possible not to paste code that is more than one line in chat.</strong></p>
</li>
<li><p>Take clean and clear screenshots where necessary. Most often, you can take a snapshot of your console errors for smaller issues. Try not to strain your helper's eyes. Take specific and clear screenshots related to your error.</p>
</li>
</ul>
</li>
<li><p>Be sure you're asking the right person or community. Don't ask a python related question to someone who knows just Java. Your research from the previous step will help you here. It's also great to bookmark specific communities, individuals or groups where you will regularly ask questions based on how helpful their responses have been to you.</p>
</li>
<li><p>Now don't be afraid to ask. I've had my share of toxic responses from people who respond with comments like "this is simple", "come on, google it", "you should know this", and you might get that too :(. The internet is a combination of good and toxic individuals who might be or not welcoming. Be confident in yourself, you have done your part by completing steps 1 and 2, so ask the question freely.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>You don't need to "know it all", you just need to "know it and know how and where to find more knowledge."</p>
<p>Dear 10x, Senior, "It's Simple", Engineer: please note that you're discouraging developers who are asking these questions. I had to battle so much with my self-confidence some years ago, and it took me a while to get over it.</p>
<p>There is so much for learners to battle with already (learning, imposter syndrome, and personal issues), so please don't add to it. Be welcoming, make them feel like they belong here, and support them.</p>
<p>Your response can intentionally or unintentionally influence someone's decision to ask questions freely next time. If you can't or won't be available, you can either not respond at all or respond in a friendly way with feedback.</p>
<p>Refer people to your friends if you don't have the time or capabilities to attend to them, give constructive criticism, and try not to leave a question without feedback or impact.</p>
<blockquote>
<p>Beginner developers need support. Learning to code is hard, especially if you're doing it alone. If you're learning in a traditional classroom, be sure to network with the other students. Do homework together. Discuss the problems. If you're learned online, it's very easy to get discouraged. Find chat spaces with others who are on a similar journey and use that space to encourage one another. Twitter also makes the experts accessible to you (reason #49948 why I love Twitter). Find the experts in whatever it is you're learning and consume their content. Ask them questions if you need to. The key is not to do it alone. ~ <a target="_blank" href="https://townhall.hashnode.com/women-in-tech-angie-jones-cjyodxwfc003ls8s10syrzvq7">Angie Jones</a></p>
</blockquote>
<p>The industry is growing daily. We are all trying to learn and get better at different levels. A lot of developer <a target="_blank" href="https://bolajiayodeji.com/best-developer-communities-to-be-part-of-in-2020-ck7ugplig01a9zis174d7zrnk">communities</a> are supportive and make their resources available for consumption. Make sure you are a part of this movement, consume those available resources, contribute to these resources, and be a helper in any way you can.</p>
<p>Thank you to all the amazing developers across the globe, creating and sharing contents/ projects. Your contributions are the pillars holding up the tech ecosystem today. ??</p>
<blockquote>
<p>Quick note, I interview awesome women in tech on the <a target="_blank" href="https://hashnode.com/series/she-inspires-cjt0d02lq001e7ps2wo420g15">She Inspires</a> at <a target="_blank" href="https://hasnode.com">Hashnode</a> where I understand the current health of the tech industry, get insights from their personal and career growth, and inspire other women to become better. Read all past interviews <a target="_blank" href="https://hashnode.com/series/she-inspires-cjt0d02lq001e7ps2wo420g15">here</a>, trust me it's worth your time. :)</p>
</blockquote>
<p>Don't spend your entire life waiting for the best time to make that move – write that article, build that side-project, apply for that job or ask that question today. The best time is always now!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ There is a real connection between technical interview performance and salary. Here’s the data. ]]>
                </title>
                <description>
                    <![CDATA[ By Cat Hicks At the end of the day, money is a huge driver for the decisions we make about what jobs to go after. In the past, we’ve written about how to negotiate your salary, and there are a lot of labor statistics and reports out there looking at ]]>
                </description>
                <link>https://www.freecodecamp.org/news/there-is-a-real-connection-between-technical-interview-performance-and-salary-heres-the-data-35dc28b6967a/</link>
                <guid isPermaLink="false">66c362dcef766eb77cd787ec</guid>
                
                    <category>
                        <![CDATA[ interview ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ salary ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Engineering ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 12 Mar 2019 15:43:04 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*e1hE-C-WLWb7IcgPu_iulQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Cat Hicks</p>
<p>At the end of the day, money is a huge driver for the decisions we make about what jobs to go after. In the past, we’ve written about <a target="_blank" href="http://blog.interviewing.io/exactly-what-to-say-when-recruiters-ask-you-to-name-the-first-number/">how to negotiate your salary</a>, and there are a lot of <a target="_blank" href="https://www.bls.gov/opub/btn/volume-7/high-tech-industries-an-analysis-of-employment-wages-and-output.htm">labor statistics</a> and reports out there looking at salaries in the tech industry as a whole. But as with many things in eng hiring, there’s very little concrete data on whether technical interview performance plays a role in compensation offers.</p>
<p>So we set out to gather the data and asked our users who had gone on to successfully get jobs after using our platform to share their salary info. With our unique dataset of real coding interviews, we could ask questions like:</p>
<ul>
<li><strong>Does interview performance matter when it comes to compensation packages?</strong></li>
<li><strong>Do engineers who prioritize other parts of a role over compensation (e.g. values alignment) end up with lower salaries?</strong></li>
<li><strong>What else seems to matter in getting a higher salary?</strong></li>
</ul>
<p>To be clear, this is an exploration of past average interview performance and its connection with current salary, versus looking at how someone did in an interview and then what salary they got when they took that specific job. In other words, we haven’t paired job interviews with the salary for that same job. We believe that looking at these more general measures is more informative than trying to match single interviews and job offers, given <a target="_blank" href="http://blog.interviewing.io/after-a-lot-more-data-technical-interview-performance-really-is-kind-of-arbitrary/">how volatile individual interview performance can be</a>. But our interviewing platform allowed us to look at performance across multiple interviews for respondents, which gave us more stability and more data.</p>
<h3 id="heading-the-setup">The setup</h3>
<p>On the interviewing.io platform, people can practice technical interviews online and anonymously, with real engineers on the other side.</p>
<p>When an interviewer and an interviewee match on our platform, they meet in a collaborative coding environment with voice, text chat, and a whiteboard and jump right into a technical question. Check out our <a target="_blank" href="https://interviewing.io/recordings/">recordings</a> page to see this process in action.</p>
<p>Interview questions on the platform tend to fall into the category of what you’d encounter at a phone screen for a back-end software engineering role, and interviewers typically come from top companies like Google, Facebook, Dropbox, Airbnb, and more.</p>
<p>After every interview, interviewers rate interviewees on a few different dimensions: technical skills, communication skills, and problem solving skills. These each get rated on a scale of 1 to 4, where 1 is “poor” and 4 is “amazing!”. On our platform, a score of 3 or above has generally meant that the person was good enough to move forward. You can see what our feedback form looks like below:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/MookWFvqheOI-cFDaIb3qAxXoD4rtgkY7Kj8" alt="Image" width="699" height="620" loading="lazy"></p>
<p>With this in mind, we surveyed interviewing.io users about their current roles, including salary, bonuses, and how satisfied they felt in their job. We then tied their comp back to how they did in interviews on our platform.</p>
<p>We ended up with responses from <a target="_blank" href="http://blog.interviewing.io/#perfcomp-fn1">494 engineers</a>, and because compensation packages are so complex and vary from company to company, we analyzed the data in several different ways, looking at annual salary numbers, bonuses, and equity. Then we tied compensation data to performance in technical interviews to see whether it matters, and if so, how much.</p>
<h3 id="heading-the-results">The results</h3>
<p>We looked at the relationships between interview performance (technical skills, communication ability, and problem solving ability) and the following: base salary, bonuses, and equity. In all cases, we corrected for location (being in the Bay Area means a higher salary) and experience (senior engineers make senior salaries), and where we could, we corrected for company size (bigger companies can generally pay bigger salaries).</p>
<p>The mean yearly salary for all survey participants was around $130k, and 57% of them reported a yearly bonus. For that group, the average yearly bonus was $20k. For people who reported a dollar amount for equity, the average was $54k. Below is the distribution of experience level/seniority of survey respondents.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/il3CxfIfbXk45uSD5Mm75KZhzP4wPcRnqI7M" alt="Image" width="800" height="560" loading="lazy"></p>
<h3 id="heading-heres-what-we-found">Here’s what we found.</h3>
<p>Better technical skills correlate with higher compensation</p>
<p>As probably comes as no surprise, people who score higher on technical skills during interviews do make more money. First, let’s look at base salary. [<a target="_blank" href="http://blog.interviewing.io/#perfcomp-fn2">2</a>]</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/x0SWlVnwkoF52Aucdj-wbeRiZ8xVeCbxHoEd" alt="Image" width="800" height="583" loading="lazy"></p>
<p>Bonuses, too, correlate with technical skills, with an additional point in performance potentially worth about 10k. [<a target="_blank" href="http://blog.interviewing.io/#perfcomp-fn3">3</a>]</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/vezSelskCD7svFMEEMd0-3jHttZMOyi6VnzZ" alt="Image" width="800" height="588" loading="lazy"></p>
<h3 id="heading-the-relationship-between-compensation-and-other-interviewing-skills">The relationship between compensation and other interviewing skills</h3>
<p>We also looked at the two other ratings that interviewers give after interviews: communication and problem solving. <strong>Better communication scores had a small but statistically significant correlation with salaries</strong> (r = .15, p &lt; .01), but we found no significant relationships for problem solving scores.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/wWh1gmABIkUHXlBOmJzJJ4X6aIRA9rMKWFyb" alt="Image" width="800" height="535" loading="lazy"></p>
<p>We also didn’t see a relationship between either communication ability or problem solving ability when it came to bonuses.</p>
<p>The non-relationships didn’t surprise us too much, to be honest, because with a relatively small sample size it’s notoriously difficult to get subcomponents of ratings to show a relationship to something distal and complicated like salaries. It’s very possible these relationships do exist, and with many determiners besides actual interview performance, like seniority and market salary norms, we’d like to repeat this survey at a bigger scale to inform this question.</p>
<h3 id="heading-what-else">What else?</h3>
<p>We asked engineers whether they felt satisfied with their role, and found that engineers who felt satisfied earned an average $14k more than engineers who felt dissatisfied. [<a target="_blank" href="http://blog.interviewing.io/#perfcomp-fn4">4</a>]</p>
<p>We also looked at people’s perceptions of their own performance. <a target="_blank" href="http://blog.interviewing.io/impostor-syndrome-strikes-men-just-as-hard-as-women-and-other-findings-from-thousands-of-technical-interviews/">In a previous post</a>, we explored how people rated their own technical performance after an interview compared to how the interviewer rated them, and found that even experienced engineers aren’t great at guessing how they did.</p>
<p>For this project, <strong>we were curious about whether overconfident engineers might net higher salaries</strong> (perhaps they negotiate harder!). So we also looked at people who rated their performance higher than their actual interview score — <strong>but found no difference in their compensation packages.</strong></p>
<p>Another thing we were curious about was whether people who valued money over other factors while making a job decision would have higher salaries. So we asked people to rank the most important variables in their job decisions. 32% of respondents said that a compensation package was the most important part of their decision; the next highest response was “matches my interests and values.”</p>
<p>But these questions didn’t have any predictive value for the actual salary amount: <strong>people who said money matters the most didn’t have significantly different salaries from people who said money matters the least.</strong></p>
<p>It’s possible that with salaries being impacted by so many outside factors, like location and role type, candidates don’t truly have a lot of negotiating power over that salary number.</p>
<p>We looked at equity as well, and the average reported equity package size was 54k. We did not find any significant association between interview performance and reported equity packages. That said, enormous amounts of research have documented various salary gaps based on gender, race, and other important sociocultural and demographic factors, and we hope to repeat this analysis when we have more data.</p>
<h3 id="heading-what-do-these-findings-mean-for-you">What do these findings mean for you?</h3>
<p>Interview performance doesn’t just get you in the door or not: it can have a demonstrable connection to your eventual compensation. For instance, <strong>doing just a point better in your technical interview could be worth 10k or more, and with bonus, it could add 20k to your annual comp.</strong></p>
<p>Given how much technical interview performance matters, we’d be remiss if we didn’t suggest <a target="_blank" href="https://interviewing.io/signup">signing up for free, anonymous mock interviews</a> on our platform. So, please go do that.</p>
<p>And, if you’re curious about what <a target="_blank" href="https://interviewingio.wufoo.com/forms/salary-survey">our salary survey</a> looked like or want to participate and contribute to v2 of this post, please do so too!</p>
<p><em>Want to become awesome at technical interviews and land your next job in the process? <a target="_blank" href="http://www.interviewing.io">Join interviewing.io</a>!</em></p>
<p><a target="_blank" href="https://www.drcathicks.com/"><em>Cat Hicks</em></a><em>, the author of this guest post, is a researcher and data scientist with a focus on learning. She consults in research, has published empirical research on learning environments, and has led research on the cognitive work of engineering teams at Google and Travr.se. She holds a PhD in Psychology from UC San Diego.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Robustness in Complex Systems: an academic article summary ]]>
                </title>
                <description>
                    <![CDATA[ By Shubheksha Jalan Today, we’re going to look at the paper titled “Robustness in Complex Systems” published in 2001 by Steven D. Gribble. All pull quotes and figures are from the paper. This paper argues that a common design paradigm for systems is... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/robustness-in-complex-systems-a-summary-95d6f4067116/</link>
                <guid isPermaLink="false">66d4610851f567b42d9f84c4</guid>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 22 Mar 2018 15:43:29 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*hHLvV3GwQhGGhPF0G8-MHw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Shubheksha Jalan</p>
<p>Today, we’re going to look at the paper titled “<a target="_blank" href="https://www.gribble.org/papers/robust.pdf">Robustness in Complex Systems</a>” published in 2001 by Steven D. Gribble. All pull quotes and figures are from the paper.</p>
<blockquote>
<p>This paper argues that a common design paradigm for systems is fundamentally flawed, resulting in unstable, unpredictable behavior as the complexity of the system grows.</p>
</blockquote>
<p>The “common design paradigm” refers to the practice of predicting the environment the system will operate in and its failure modes. The paper states that a system will deal with conditions that weren’t predicted as it becomes more complex, so it should be designed to cope with failure gracefully. The paper explores these ideas with the help of “distributed data structures (DDD), a scalable, cluster-based storage server.”</p>
<blockquote>
<p>By their very nature, large systems operate through the complex interaction of many components. This interaction leads to a pervasive coupling of the elements of the system; this coupling may be strong (e.g., packets sent between adjacent routers in a network) or subtle (e.g., synchronization of routing advertisements across a wide area network).</p>
</blockquote>
<p>A common characteristic that such large systems exhibit is something known as the <a target="_blank" href="https://en.wikipedia.org/wiki/Butterfly_effect">Butterfly Effect</a>. This refers to a small unexpected disturbance in the system resulting from the intricate interaction of various components that causes a widespread change.</p>
<p>A common goal for system design is robustness: the ability of a system to operate correctly in various conditions and fail gracefully in an unexpected situation. The paper argues against the common pattern of trying to predict a certain set of operation conditions for the system and architecting it to work well in <strong>only those</strong> conditions.</p>
<blockquote>
<p>It is also effectively impossible to predict all of the perturbations that a system will experience as a result of changes in environmental conditions, such as hardware failures, load bursts, or the introduction of misbehaving software. Given this, we believe that any system that attempts to gain robustness solely through precognition is prone to fragility.</p>
</blockquote>
<h3 id="heading-dds-a-case-study">DDS: A Case Study</h3>
<p>The hypothesis stated above is explored using a scalable, cluster-based storage system, Distributed Data Structures (DDD) — “a high-capacity, high-throughput virtual hash table that is partitioned and replicated across many individual storage nodes called bricks.”</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/pCMHFuUnLdELprmvHYYW8ZuJ4F-3bKymp1YJ" alt="Image" width="800" height="840" loading="lazy"></p>
<p>This system was built using a predictive design philosophy as the one described above.</p>
<blockquote>
<p>Based on extensive experience with such systems, we attempted to reason about the behavior of the software components, algorithms, protocols, and hardware elements of the system, as well as the workloads it would receive.</p>
</blockquote>
<p>When the system operated within the scope of the assumptions made by the designers, it worked fine. They were able to scale it and improve performance. However, in the case when one or more of the assumptions about the operating conditions were violated, the system behaved in unexpected ways resulting in data loss or inconsistencies.</p>
<p>Next, we talk about several such anomalies.</p>
<h4 id="heading-garbage-collection-thrashing-and-bounded-synchrony"><strong>Garbage Collection Thrashing and Bounded Synchrony</strong></h4>
<p>The system designers used timeouts to detect failure of components in the system. If a particular component didn’t respond within the specified time, it was considered dead. They assumed bounded synchrony in the system.</p>
<blockquote>
<p>The DDS was implemented in Java, and therefore made use of garbage collection. The garbage collector in our JVM was a mark-and-sweep collector; as a result, as more active objects were resident in the JVM heap, the duration that the garbage collector would run in order to reclaim a fixed amount of memory would increase.</p>
</blockquote>
<p>When the system was at saturation, even slight variations in load on the bricks would increase the time taken by the garbage collector in turn dropping the throughput of the brick. This is called <strong>GC thrashing</strong>. The affected bricks would lag behind their counterparts leading to a further degradation in performance of the system.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/9dhVsogmVj7xeTLMrAC-MB4iE7RjXYZE2hXF" alt="Image" width="800" height="734" loading="lazy"></p>
<p>Hence, garbage collection violated the assumption of bounded synchrony when it was nearing or beyond the saturation point.</p>
<h4 id="heading-slow-leaks-and-co-related-failure"><strong>Slow Leaks and Co-related Failure</strong></h4>
<p>Another assumption made while designing the system was that the failures are independent. DDS used replication to make the system fault-tolerant. The probability of multiple replicas failing simultaneously was very small.</p>
<p>However, this assumption was violated when they encountered a race condition in their code that caused a memory leak without affecting correctness.</p>
<blockquote>
<p>Whenever we launched our system, we would tend to launch all bricks at the same time. Given roughly balanced load across the system, all bricks therefore would run out of heap space at nearly the same time, several days after they were launched. We also speculated that our automatic failover mechanisms exacerbated this situation by increasing the load on a replica after a peer had failed, increase the rate at which the replica leaked memory.</p>
</blockquote>
<p>Since all the replicas were subjected to a uniform load without taking performance degradation and other issues into consideration, this created a coupling between the replicas and…</p>
<blockquote>
<p>…when combined with a slow memory leak, lead to the violation of our assumption of independent failures, which in turn caused our system to experience unavailability and partial data loss</p>
</blockquote>
<h4 id="heading-unchecked-dependencies-and-fail-stop"><strong>Unchecked Dependencies and Fail-stop</strong></h4>
<p>Based on the assumption that if a component timed out, it has failed, the designers also assumed “fail-stop” failures, that is a component that has failed will not resume functioning after a while. The bricks in the system performed all long-latency work (disk I/O) in an asynchronous way.</p>
<p>However, they failed to notice that some parts of their code made use of blocking function calls. This caused the main event-handling thread to be randomly borrowed leading to bricks seizing inexplicably for a couple of minutes and resuming post.</p>
<blockquote>
<p>While this error was due to our own failure to verify the behavior of code we were using, it serves to demonstrate that the low-level interaction between independently built components can have profound implications on the overall behavior of the system. A very subtle change in behavior resulted in the violation of our fail-stop assumption across the entire cluster, which eventually lead to the corruption of data in our system.</p>
</blockquote>
<h3 id="heading-towards-robust-systems">Towards Robust Systems</h3>
<blockquote>
<p>..small changes to a complex, coupled system can result in large, unexpected changes in behavior, possibly taking the system outside of its designers’ expected operating regime.</p>
</blockquote>
<p>A few solutions which can help us make more robust systems:</p>
<h4 id="heading-systematic-over-provisioning">Systematic Over-provisioning</h4>
<p>When approaching the saturation point, systems tend to become fragile when trying to accommodate unexpected behavior. One way to combat this is to deliberately over-provision the system.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/eOxFAEt5Vdd1dOchH6GpyfpXb2-ZXKOHLcwx" alt="Image" width="800" height="592" loading="lazy"></p>
<p>However, this has its own set of issues: it leads to the under-utilization of resources. It also requires predicting the expected operating environment and hence the saturation point of the system. This can’t be done in an accurate manner in most cases.</p>
<h4 id="heading-use-admission-control">Use Admission Control</h4>
<p>Another technique is to start rejecting load once the system starts approaching the saturation point. However, this requires predicting the saturation point — something that’s not always possible, especially with large systems which have a lot of contributing variables.</p>
<p>Rejecting requests also consumes some resources from the system. Services designed with admission control in mind usually have two operating modes: normal where the requests are processed and an extremely lightweight mode where they’re rejected.</p>
<h4 id="heading-build-introspection-into-the-system">Build Introspection into the system</h4>
<blockquote>
<p>an introspective system is one in which the ability to monitor the system is designed in from the beginning.</p>
</blockquote>
<p>When a system can be monitored, and designers and operators can derive meaningful measurements about its operation, it’s much more robust than a black-box system. It’s easier to adapt such a system to change in its environment, as well as manage and maintain it.</p>
<h4 id="heading-introduce-adaptivity-by-closing-the-control-loop">Introduce adaptivity by closing the control loop</h4>
<p>An example of a control loop is human designers and operators adapting the design in response to a change in its operating environment indicated through various measurements. However, the timeline for such a control loop isn’t very predictable. The authors argue that systems should be built with internal control loops.</p>
<blockquote>
<p>These systems incorporate the results of introspection, and attempt to adapt control variables dynamically to keep the system operating in a stable or well-performing regime.</p>
<p>All such systems have the property that the component performing the adaptation is able to hypothesize somewhat precisely about the effects of the adaptation; without this ability, the system would be “operating in the dark”, and likely would become unpredictable. A new, interesting approach to hypothesizing about the effects of adaptation is to use statistical machine learning; given this, a system can experiment with changes in order to build up a model of their effects.</p>
</blockquote>
<h4 id="heading-plan-for-failure">Plan for failure</h4>
<blockquote>
<p>Complex systems must expect failure and plan for it accordingly.</p>
</blockquote>
<p>A couple of techniques to do this:</p>
<ol>
<li>decoupling of components to contain failures locally</li>
<li>minimize damage by using robust abstractions such as transactions</li>
<li>minimize amount of time in failure state (using checkpointing to recover rapidly)</li>
</ol>
<p>In this paper, the authors argue that designing systems by assuming the constraints and nature of its operation, failures, and behavior often leads to fragile and unpredictable systems. We need a radically different approach to build systems that are more robust in the face of failure.</p>
<blockquote>
<p>This different design paradigm is one in which systems are given the best possible chance of stable behavior (through techniques such as over-provisioning, admission control, and introspection), as well as the ability to adapt to unexpected situations (by treating introspection as feedback to a closed control loop). Ultimately, systems must be designed to handle failures gracefully, as complexity seems to lead to an inevitable unpredictability.</p>
</blockquote>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Building on Quicksand: A Summary ]]>
                </title>
                <description>
                    <![CDATA[ By Shubheksha Jalan Let’s try to break down the paper “Building On Quicksand” published by Pat Helland and David Campbell in 2009. All pull quotes are from the paper. The paper focuses on the design of large, fault-tolerant, replicated distributed sy... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/building-on-quicksand-a-summary-bc4e9e7c347/</link>
                <guid isPermaLink="false">66d460f7ffe6b1f641b5fa89</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ distributed systems ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ summary ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 04 Dec 2017 17:11:21 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9cb210740569d1a4cabf7a.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Shubheksha Jalan</p>
<p>Let’s try to break down the paper “<a target="_blank" href="http://arxiv.org/ftp/arxiv/papers/0909/0909.1788.pdf">Building On Quicksand</a>” published by Pat Helland and David Campbell in 2009. All pull quotes are from the paper.</p>
<p>The paper focuses on the design of large, fault-tolerant, replicated distributed systems. It also discusses its evolving based on changing requirements over time. It starts off by stating “Reliable systems have always been built out of unreliable components”.</p>
<blockquote>
<p>As the granularity of the unreliable component grows (from a mirrored disk to a system to a data center), the latency to communicate with a backup becomes unpalatable. This leads to a more relaxed model for fault tolerance. The primary system will acknowledge the work request and its actions without waiting to ensure that the backup is notified of the work. This improves the responsiveness of the system because the user is not delayed behind a slow interaction with the backup.</p>
</blockquote>
<p>Fault-tolerant systems can be made of many components. Their goal is keep functioning when one of those components fail. We don’t consider <strong><em>Byzantine</em></strong>failures in this discussion. Instead, the <strong><em>fail fast</em></strong> model where either a component works correctly or it fails.</p>
<p>The paper goes on to compare two versions of the Tandem NonStop system. One that used synchronous <a target="_blank" href="https://en.wikipedia.org/wiki/Application_checkpointing">checkpointing</a> and one that used asynchronous checkpointing. Refer section 3 of the paper for all the details. I’d like to touch upon the difference between the two checkpointing strategies.</p>
<ul>
<li>Synchronous checkpointing: in this case, with every write to the primary, state needed to be sent to the backup. Only after the backup acknowledged the write, did the primary send a response to the client who issued the write request. This ensured that when the primary fails, the backup can take over without losing any work.</li>
<li>Asynchronous checkpointing: in this strategy, the primary acknowledges and commits the write. This is done as soon as it processes it without waiting for a reply from the backup. This technique has improved latency but also poses other challenges addressed later.</li>
</ul>
<h4 id="heading-log-shipping">Log Shipping</h4>
<blockquote>
<p>A classic database system has a process that reads the log and ships it to a backup data-center. The normal implementation of this mechanism commits transactions at the primary system (acknowledging the user’s commit request) and asynchronously ships the log. The backup database replays the log, constantly playing catch-up.</p>
</blockquote>
<p>The mechanism described above is termed as log shipping. The main problem this poses is that when the primary fails and the back up takes over, some recent transactions might be lost.</p>
<blockquote>
<p>This inherently opens up a window in which the work is acknowledged to the client but it has not yet been shipped to the backup. A failure of the primary during this window will lock the work inside the primary for an unknown period of time. The backup will move ahead without knowledge of the locked-up work.</p>
</blockquote>
<p>The introduction of asynchrony into the system has an advantage in latency, response time and performance. However, it makes the system more prone to the possibility of losing work when the primary fails. There are two ways to deal with this:</p>
<ol>
<li>Discard the work locked in the primary when it fails. Whether a system can do that or not depends on the requirements and business rules.</li>
<li>Have a recovery mechanism to sync the primary with backups when it comes back up and retries lost work. This is possible only if the operations can be retried in an idempotent way and the out-of-order retries are possible.</li>
</ol>
<p>The system loses the notion of what the authors call “an authoritative truth”. Nobody knows the accurate state of the system at any given point in time if the work is locked in an unavailable backup or primary.</p>
<p>The authors conclude that business rules in a system with asynchronous checkpointing are probabilistic.</p>
<blockquote>
<p>If a primary uses asynchronous checkpointing and applies a business rule on the incoming work, it is necessarily a probabilistic rule. The primary, despite its best intentions, cannot know it will be alive to enforce the business rules.</p>
<p>When the backup system that participates in the enforcement of these business rules is asynchronously tied to the primary, the enforcement of these rules inevitably becomes probabilistic!</p>
</blockquote>
<p>The authors state that commutative operations, operations that can be reordered, can be executed independently, as long as the operation preserves business rules. However, this is hard to do with storage systems because the write operation isn’t commutative.</p>
<p>Another consideration is that work of a single operation is idempotent. For example, executing the operation any number of time should result in the same state of the system.</p>
<blockquote>
<p>To ensure this, applications typically assign a unique number or ID to the work. This is assigned at the ingress to the system (i.e. whichever replica first handles the work). As the work request rattles around the network, it is easy for a replica to detect that it has already seen that operation and, hence, not do the work twice.</p>
</blockquote>
<p>The authors suggest that different operations within a system provide different consistency guarantees. Yet, this depends on the business requirements. Some operations can choose classic consistency over availability and vice versa.</p>
<p>Next, the authors argue that as soon there is no notion of authoritative truth in a system. All computing boils down to three things: memories, guesses, and apologies.</p>
<ol>
<li>Memories: you can only hope that your replica remembers what it has already seen.</li>
<li>Guesses: Due to only partial knowledge being available, the replicas take actions based on local state and may be wrong. “In any system which allows a degradation of the absolute truth, any action is, at best, a guess.” Any action in such a system has a high probability of being successful, but it’s still a guess.</li>
<li>Apologies: Mistakes are inevitable. Hence, every business needs to have an apology mechanism in place either through human intervention or by automating it.</li>
</ol>
<p>The paper next discusses the topic of eventual consistency. The authors do this by taking the Amazon shopping cart built using Dynamo &amp; a system for clearing checks as examples. A single replica identifies and processes the work coming into these systems. It flows to other replicas as and when connectivity permits. The requests coming into these systems are commutative (reorderable). They can be processed at different replicas in different orders.</p>
<blockquote>
<p>Storage systems alone cannot provide the commutativity we need to create robust systems that function with asynchronous checkpointing. We need the business operations to reorder. Amazon’s Dynamo does not do this by itself. The shopping cart application on top of the Dynamo storage system is responsible for the semantics of eventual consistency and commutativity. The authors think it is time for us to move past the examination of eventual consistency in terms of updates and storage systems. The real action comes when examining application based operation semantics.</p>
</blockquote>
<p>Next, they discuss two strategies for allocating resources in replicas that might not be able to communicate with each other:</p>
<ol>
<li>Over-provisioning: the resources are partitioned between replicas. Each has a fixed subset of resources they can allocate. No replica can allocate a resource that’s not actually available.</li>
<li>Over-booking: the resources can be individually allocated without ensuring strict partitioning. This may lead to the replicas allocating a resource that’s not available, promising something they can’t deliver.</li>
</ol>
<p>The paper talks also about something termed as the “seat reservation pattern”. This is a compromise between over-provisioning and over-booking:</p>
<blockquote>
<p>Anyone who has purchased tickets online will recognize the “Seat Reservation” pattern where you can identify potential seats and then you have a bounded period of time, (typically minutes), to complete the transaction. If the transaction is not successfully concluded within the time period, the seats are once again marked as “available”.</p>
</blockquote>
<h4 id="heading-acid-20">ACID 2.0</h4>
<p>The classic definition of ACID stands for “Atomic, Consistent, Isolated, and Durable”. Its goal is to make the application think that there is a single computer which isn’t doing anything else when the transaction is being processed. The authors talk about a new definition for ACID. which stands for Associative, Commutative, Idempotent, and Distributed.</p>
<blockquote>
<p>The goal for ACID2.0 is to succeed if the pieces of the work happen: At least once, anywhere in the system, in any order. This defines a new KIND of consistency. The individual steps happen at one or more system. The application is explicitly tolerant of work happening out of order. It is tolerant of the work happening more than once per machine, too.</p>
</blockquote>
<p>Going by the classic definition of ACID, a linear history is a basis for fault tolerance. If we want to achieve the same guarantees in a distributed system, it’ll require concurrency control mechanisms which “tend to be fragile”.</p>
<blockquote>
<p>When the application is constrained to the additional requirements of commutativity and associativity, the world gets a LOT easier. No longer must the state be checkpointed across failure units in a synchronous fashion. Instead, it is possible to be very lazy about the sharing of information. This opens up offline, slow links, low-quality datacenters, and more.</p>
</blockquote>
<p>In conclusion:</p>
<blockquote>
<p>We have attempted to describe the patterns in use by many applications today as they cope with failures in widely distributed systems. It is the reorderability of work and repeatability of work that is essential to allowing successful application execution on top of the chaos of a distributed world in which systems come and go when they feel like it.</p>
</blockquote>
<p>P.S. — If you made it this far and would like to receive a mail whenever I publish one of these posts, sign up <a target="_blank" href="http://eepurl.com/dcHGFP">here</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Harvest, Yield, and Scalable Tolerant Systems: A Summary ]]>
                </title>
                <description>
                    <![CDATA[ By Shubheksha Jalan This article presents a summary of the paper “Harvest, Yield, and Scalable Tolerant Systems” published by Eric Brewer & Amando Fox in 1999. All unattributed quotes are from this paper. The paper deals with the trade-offs between c... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/harvest-yield-and-scalable-tolerant-systems-a-summary-5609a088bb2b/</link>
                <guid isPermaLink="false">66d460fa38f2dc3808b790ed</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data ]]>
                    </category>
                
                    <category>
                        <![CDATA[ distributed systems ]]>
                    </category>
                
                    <category>
                        <![CDATA[ research ]]>
                    </category>
                
                    <category>
                        <![CDATA[ summary ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 30 Oct 2017 17:14:37 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*PlLhXyx7tBvL4fVm.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Shubheksha Jalan</p>
<p>This article presents a summary of the paper “<a target="_blank" href="https://pdfs.semanticscholar.org/5015/8bc1a8a67295ab7bce0550886a9859000dc2.pdf">Harvest, Yield, and Scalable Tolerant Systems</a>” published by Eric Brewer &amp; Amando Fox in 1999. All unattributed quotes are from this paper.</p>
<p>The paper deals with the trade-offs between consistency and availability (CAP) for large systems. It’s very easy to point to CAP and assert that no system can have consistency and availability.</p>
<p>But, there is a catch. CAP has been misunderstood in a variety of ways. As Coda Hale explains in his excellent blog post “<a target="_blank" href="https://codahale.com/you-cant-sacrifice-partition-tolerance/">You Can’t Sacrifice Partition Tolerance</a>”:</p>
<blockquote>
<p>Of the CAP theorem’s Consistency, Availability, and Partition Tolerance, Partition Tolerance is mandatory in distributed systems. You cannot <strong>not</strong> choose it. Instead of CAP, you should think about your availability in terms of yield (percent of requests answered successfully) and harvest (percent of required data actually included in the responses) and which of these two your system will sacrifice when failures happen.</p>
</blockquote>
<p>The paper focuses on increasing the availability of large scale systems by fault toleration, containment and isolation:</p>
<blockquote>
<p>We assume that clients make queries to servers, in which case there are at least two metrics for correct behavior: yield, which is the probability of completing a request, and harvest, which measures the fraction of the data reflected in the response, i.e. the completeness of the answer to the query.</p>
</blockquote>
<p>The two metrics, <strong>harvest</strong> and <strong>yield</strong> can be summarized as follows:</p>
<ul>
<li><strong>Harvest</strong>: data in response/total data<br>For example: If one of the nodes is down in a 100 node cluster, the harvest is 99% for the duration of the fault.</li>
<li><strong>Yield</strong>: requests completed with success/total number of requests<br><strong>Note:</strong> Yield is different from uptime. Yield deals with the number of requests, not only the time the system wasn’t able to respond to requests.</li>
</ul>
<p>The paper argues that there are certain systems which require perfect responses to queries every single time. Also, there are systems that can tolerate imperfect answers once in a while.</p>
<p>To increase the overall availability of our systems, we need to carefully think through the required consistency and availability guarantees it needs to provide.</p>
<h4 id="heading-trading-harvest-for-yield-probabilistic-availability">Trading Harvest for Yield — Probabilistic Availability</h4>
<blockquote>
<p>Nearly all systems are probabilistic whether they realize it or not. In particular, any system that is 100% available under single faults is probabilistically available overall (since there is a non-zero probability of multiple failures)</p>
</blockquote>
<p>The paper talks about understanding the probabilistic nature of availability. This helps in understanding and limiting the impact of faults by making decisions about what needs to be available and what kind of faults the system can deal with.</p>
<p>They outline the linear degradation of harvest in case of multiple node faults. The harvest is directly proportional to the number of nodes that are functioning correctly. Therefore, it decreases/increases linearly.</p>
<p>Two strategies are suggested for increasing the yield:</p>
<ol>
<li>Random distribution of data on the nodes<br>If one of the nodes goes down, the average-case and worst-case fault behavior doesn’t change. Yet if the distribution isn’t random, then depending on the type of data, the impact of a fault may vary.<br>For example, if only one of the nodes stored information related to a user’s account balance goes down, the entire banking system will not be able to work.</li>
<li>Replicating the most important data<br>This reduces the impact in case one of the nodes containing a subset of high-priority data goes down.<br>It also improves harvest.</li>
</ol>
<p>Another notable observation made in the paper is that it is possible to replicate all your data. It doesn’t do a lot to improve your harvest/yield, but it increases the cost of operation substantially. This is because the internet works based on best-in-effort protocols which can never guarantee 100% harvest/yield.</p>
<h4 id="heading-application-decomposition-and-orthogonal-mechanisms">Application Decomposition and Orthogonal Mechanisms</h4>
<p>The second strategy focuses on the benefits of orthogonal system design.</p>
<p>It starts out by stating that large systems are composed of subsystems which cannot tolerate failures. But they fail in a way that allows the entire system to continue functioning with some impact on utility.</p>
<blockquote>
<p>The actual benefit is the ability to provision each subsystem’s state management separately, providing strong consistency or persistent state only for the subsystems that need it, not for the entire application. The savings can be significant if only a few small subsystems require the extra complexity.</p>
</blockquote>
<p>The paper states that orthogonal components are completely independent of each other. They have no run time interface to other components, unless there is a configuration interface. This allows each individual component to fail independently and minimizes its impact on the overall system.</p>
<blockquote>
<p>Composition of orthogonal subsystems shifts the burden of checking for possibly harmful interactions from runtime to compile time, and deployment of orthogonal guard mechanisms improves robustness for the runtime interactions that do occur, by providing improved fault containment.</p>
</blockquote>
<p>The goal of this paper was to motivate research in the field of designing fault-tolerant and highly available large scale systems.</p>
<p>Also, to think carefully about the consistency and availability guarantees the application needs to provide. As well as the trade offs it is capable of making in terms of harvest against yield.</p>
<p>If you enjoyed this paper, please hit the clap button so more people see it. Thank you.</p>
<p>P.S. — If you made it this far and would like to receive a mail whenever I publish one of these posts, sign up <a target="_blank" href="http://eepurl.com/dcHGFP">here</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
