<!DOCTYPE html>
<html lang="en">

<!-- Powered by Bear Blog -->

<head>
  
  
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
  
  <title>Joshua Valdez</title>
  <link rel="canonical" href="https://joshuavaldez.com">
  


<meta name="joshuavaldez" content="look-for-the-bear-necessities">


<!-- Primary Meta Tags -->
<meta name="title" content="Joshua Valdez">
<meta name="description" content="AI SWE Newsletter">

<!-- Open Graph / Facebook -->
<meta property="og:site_name" content="Joshua Valdez">
<meta property="og:title" content="Joshua Valdez">
<meta property="og:type" content="website">
<meta property="og:url" content="https://joshuavaldez.com">
<meta property="og:description" content="AI SWE Newsletter">
<meta property="og:image" content="/static/og-image.png">


<!-- Twitter -->
<meta property="twitter:card" content="summary">
<meta property="twitter:url" content="https://joshuavaldez.com">
<meta property="twitter:title" content="Joshua Valdez">
<meta property="twitter:description" content="AI SWE Newsletter">
<meta property="twitter:image" content="/static/og-image.png">



<!-- Microdata -->
<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "website",
    "name": "Joshua Valdez",
    "headline": "Joshua Valdez",
    "url": "https://joshuavaldez.com",
    "description": "AI SWE Newsletter",
    "image": "/static/og-image.png"
  }
</script>
<link rel="alternate" type="application/atom+xml" href="/feed/" title="Joshua Valdez">
<link rel="alternate" type="application/rss+xml" href="/feed/?type=rss" title="Joshua Valdez">

  





  
  
  
    
        <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20100%20100'%3E%3Ctext%20y='.9em'%20font-size='90'%3E❮❯%3C/text%3E%3C/svg%3E">
    



  <style data-name="default">
      
      
:root {
    --width: 720px;
    --font-main: Verdana, sans-serif;
    --font-secondary: Verdana, sans-serif;
    --font-scale: 1em;
    --background-color: #fff;
    --heading-color: #222;
    --text-color: #444;
    --link-color: #3273dc;
    --visited-color:  #8b6fcb;
    --code-background-color: #f2f2f2;
    --code-color: #222;
    --blockquote-color: #222;
}

@media (prefers-color-scheme: dark) {
    :root {
        --background-color: #01242e;
        --heading-color: #eee;
        --text-color: #ddd;
        --link-color: #8cc2dd;
        --visited-color:  #8b6fcb;
        --code-background-color: #000;
        --code-color: #ddd;
        --blockquote-color: #ccc;
    }
}

body {
    font-family: var(--font-secondary);
    font-size: var(--font-scale);
    margin: auto;
    padding: 20px;
    max-width: var(--width);
    text-align: left;
    background-color: var(--background-color);
    word-wrap: break-word;
    overflow-wrap: break-word;
    line-height: 1.5;
    color: var(--text-color);
}

h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-main);
    color: var(--heading-color);
}

a {
    color: var(--link-color);
    cursor: pointer;
    text-decoration: none;
}

a:hover {
    text-decoration: underline; 
}

nav a {
    margin-right: 8px;
}

strong, b {
    color: var(--heading-color);
}

button {
    margin: 0;
    cursor: pointer;
}

time {
 	font-family: monospace;
  	font-style: normal;
  	font-size: 15px;
}

main {
    line-height: 1.6;
}

table {
    width: 100%;
}

hr {
    border: 0;
    border-top: 1px dashed;
}

img {
    max-width: 100%;
}

code {
    font-family: monospace;
    padding: 2px;
    background-color: var(--code-background-color);
    color: var(--code-color);
    border-radius: 3px;
}

blockquote {
    border-left: 1px solid #999;
    color: var(--code-color);
    padding-left: 20px;
    font-style: italic;
}

footer {
    padding: 25px 0;
    text-align: center;
}

.title:hover {
    text-decoration: none;
}

.title h1 {
    font-size: 1.5em;
}

.inline {
    width: auto !important;
}

.highlight, .code {
    padding: 1px 15px;
    background-color: var(--code-background-color);
    color: var(--code-color);
    border-radius: 3px;
    margin-block-start: 1em;
    margin-block-end: 1em;
    overflow-x: auto;
}

/* blog post list */
ul.blog-posts {
    list-style-type: none;
    padding: unset;
}

ul.blog-posts li {
    display: flex;
}

ul.blog-posts li span {
    flex: 0 0 130px;
}

ul.blog-posts li a:visited {
    color: var(--visited-color);
}
      
  </style>
</head>

<body class="home" onload="(function() { document.cookie = `timezone=${Intl.DateTimeFormat().resolvedOptions().timeZone};path=/`; })()">
  
  <header>
    <a class="title" href="/">
      <h1>
        Joshua Valdez
      </h1>
    </a>
    <nav>
      
    </nav>
  </header>
  <main>
    


<p>Hi, I'm Josh. I'm a software engineer, skier and photographer.</p>
<p>I'm currently building <a href='https://superswarm.dev'>Swarm</a>, an AI IDE.</p>
<p>Previously, I built Uber's load testing system, <a href='https://x.com/gergelyorosz/status/1502606683071262726'>Hailstorm</a>. I was an engineering manager at <a href='https://gem.com'>Gem</a>. And most recently I was cofounder of <a href='https://engines.dev'>Engines</a>, building a repo setup agent.</p>
<p>You can find my <a href='https://blog.joshuavaldez.com'>Substack here</a>.</p>
<p>This blog is a collection of my notes on software engineering, startups and AI coding:<br />


<ul class="embedded blog-posts">
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2026-02-27T17:25Z">
    27 Feb, 2026
</time>
            </i>
        </span>
        <a href="/what-changed/">What changed?</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2026-01-09T23:39Z">
    09 Jan, 2026
</time>
            </i>
        </span>
        <a href="/the-quest-for-flow-with-ai-coding/">The quest for flow with AI coding</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2026-01-08T19:35Z">
    08 Jan, 2026
</time>
            </i>
        </span>
        <a href="/build-your-own-background-agent/">Build your own background agent!</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-11-13T00:33Z">
    13 Nov, 2025
</time>
            </i>
        </span>
        <a href="/a-startup-is-momentum/">A startup is momentum</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-09-12T22:16Z">
    12 Sep, 2025
</time>
            </i>
        </span>
        <a href="/stop-reading-start-doing/">Stop reading, start doing</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-08-19T20:14Z">
    19 Aug, 2025
</time>
            </i>
        </span>
        <a href="/the-unbearable-slowness-of-ai-coding/">The unbearable slowness of AI coding</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-08-05T22:16Z">
    05 Aug, 2025
</time>
            </i>
        </span>
        <a href="/on-building-trust/">On building trust</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-08-05T22:09Z">
    05 Aug, 2025
</time>
            </i>
        </span>
        <a href="/engineering-is-writing/">Engineering is writing</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-08-05T22:06Z">
    05 Aug, 2025
</time>
            </i>
        </span>
        <a href="/future-of-coding-agents/">Future of coding agents</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-08-05T21:35Z">
    05 Aug, 2025
</time>
            </i>
        </span>
        <a href="/principles-for-vibe-coding/">Principles for vibe coding</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-03-21T04:30Z">
    21 Mar, 2025
</time>
            </i>
        </span>
        <a href="/1-week-with-claude-code/">1 week with Claude Code</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-03-04T22:22Z">
    04 Mar, 2025
</time>
            </i>
        </span>
        <a href="/on-getting-startup-ideas/">On getting startup ideas</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-02-20T04:07Z">
    20 Feb, 2025
</time>
            </i>
        </span>
        <a href="/dev-tools-for-agents/">Dev tools for agents</a>
        

        

        
    </li>
    
    <li data-tags="">
        <span>
            <i>
                <time datetime="2025-02-19T04:37Z">
    19 Feb, 2025
</time>
            </i>
        </span>
        <a href="/why-im-starting-a-blog/">Why I&#x27;m starting a blog</a>
        

        

        
    </li>
    
</ul></p>
<p><img src="https://bear-images.sfo2.cdn.digitaloceanspaces.com/computetime/facetune_11-05-2019-21-43-21.webp" alt="Facetune_11-05-2019-21-43-21" /></p>







    <script>
    window.addEventListener("load", () => {
        if (navigator.webdriver !== true) {
            const sendHit = score => {
                const params = new URLSearchParams({
                    blog: "joshuavaldez",
                    token: "/",
                    referrer: document.referrer.includes("joshuavaldez.com") ? "" : document.referrer,
                    title: "",
                    score: score
                });
                new Image().src = `/hit/?${params.toString()}`;
            };

            document.addEventListener('touchmove', () => sendHit(100), { once: true });
            document.addEventListener('mousemove', () => sendHit(100), { once: true });
        }
    });
    </script>



  </main>
  <footer>
    

<span>
    Powered by <a href="https://bearblog.dev">Bear <span role="img" class="bear" aria-label="ASCII bear logo">ʕ•ᴥ•ʔ</span></a>
</span>

  </footer>

  
  <script>
        (() => {
          "use strict";
          const times = document.querySelectorAll('time');
          const format_string = "d M, Y" || "d M, Y"

          times.forEach(time => {
              time.innerText = formatDate(time.dateTime, format_string)
          });

          function formatDate(dateStr, formatStr) {
            const date = new Date(dateStr);
            const day = date.getDate();
            const month = date.getMonth();
            const year = date.getFullYear();
            const weekday = date.getDay();
            const hours = date.getHours();
            const minutes = date.getMinutes();
            const monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
            const monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
            const daysFull = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
            const daysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
            
            function getOrdinal(n) {
                const s = ['th', 'st', 'nd', 'rd'];
                const v = n % 100;
                return s[(v - 20) % 10] || s[v] || s[0];
            }
            
            const map = {
                'd': () => day.toString().padStart(2, '0'),
                'm': () => (month + 1).toString().padStart(2, '0'),
                'Y': () => year.toString(),
                'y': () => year.toString().slice(-2),
                'F': () => monthsFull[month],
                'j': () => day.toString(),
                'D': () => daysShort[weekday],
                'l': () => daysFull[weekday],
                'S': () => getOrdinal(day),
                'M': () => monthsShort[month],
                'H': () => hours.toString().padStart(2, '0'),
                'h': () => {
                    let h = hours % 12;
                    h = h === 0 ? 12 : h;
                    return h.toString().padStart(2, '0');
                },
                'g': () => {
                    let h = hours % 12;
                    return h === 0 ? '12' : h.toString();
                },
                'i': () => minutes.toString().padStart(2, '0'),
                'a': () => hours < 12 ? 'am' : 'pm',
                'A': () => hours < 12 ? 'AM' : 'PM',
            };
            
            let result = '';
            for (let char of formatStr) {
                result += map[char] ? map[char]() : char;
            }
            return result;
        }
        })();
    </script>
    
</body>
<!-- ID: joshuavaldez -->
<!-- 🐻 -->
</html>
