<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mario Hayashi</title>
    <description>The latest articles on Forem by Mario Hayashi (@logicalicy).</description>
    <link>https://forem.com/logicalicy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F482955%2F718f7cfe-5398-478f-8c19-db3859676dae.jpg</url>
      <title>Forem: Mario Hayashi</title>
      <link>https://forem.com/logicalicy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/logicalicy"/>
    <language>en</language>
    <item>
      <title>The Factory Must Grow: I Replaced Myself with AI. Now What?</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Wed, 15 Apr 2026 14:01:41 +0000</pubDate>
      <link>https://forem.com/logicalicy/the-factory-must-grow-i-replaced-myself-with-ai-now-what-1geg</link>
      <guid>https://forem.com/logicalicy/the-factory-must-grow-i-replaced-myself-with-ai-now-what-1geg</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; -- I made an orchestration system that creates PRDs, writes code, opens PRs and handles review feedback. And then I realised I'd automated myself out of the parts I once called my job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PR That Changed Things
&lt;/h2&gt;

&lt;p&gt;My orchestration system opened a PR. Tests passing and commit messages better than any I could write. The code was clean. I left my feedback in the PR but the work was solid. After this first PR, I started feeding the task pipeline with more ideas while it churned out PRDs, implemented them and addressed feedback, without much of my attention.&lt;/p&gt;

&lt;p&gt;That was the moment it clicked for me: I am just feeding product ideas to the machine. The system handles everything else. Ideas really are cheap now.&lt;/p&gt;

&lt;p&gt;If 2025 was the year of agentic AI, 2026 is the year agents will be operationalised at scale. It's both exciting and scary to see half of what I used to call a job automated away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fve40iyn6ov66myk1zh4n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fve40iyn6ov66myk1zh4n.jpg" alt="Step #1: It starts with just a thought. A note in Github" width="800" height="231"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Step #1: It starts with just a thought. A note in Github&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  My Slow Start
&lt;/h2&gt;

&lt;p&gt;Most engineers will have been following the rise of agentic AI very closely in 2025. Not me. I was changing nappies. I have a young son and didn't have the bandwidth to follow what was happening. I leaned on Cursor's tooling, had AI help me generate code, but never graduated beyond one-off agentic work. I was comfortable under my rock.&lt;/p&gt;
&lt;h2&gt;
  
  
  "Just Try Building One Yourself"
&lt;/h2&gt;

&lt;p&gt;An old friend, a software engineer I worked with several times over the years, changed my mind. He had kept a close watch on AI while I was busy being tired from parenting. His advice was simple: build an agent yourself.&lt;/p&gt;

&lt;p&gt;I let it sit at the back of my mind for a few weeks. Then I got curious and decided to build it. The gap between reading about agents and watching one work on your own codebase is the gap between reading a recipe and tasting the food. The understanding only clicks when you see an AI agent produce PRs in your codebase, with your conventions. Cheaply also. I'm on Claude's Max plan, so I pay a flat subscription. Over the last week my orchestrator ran 300 worker runs across four workflows and burned through at least $240 of API-equivalent tokens. I say "at least" because crashed runs (of which there were many) never emit a final cost event, so the real number is higher.&lt;/p&gt;

&lt;p&gt;At that pace it would be north of $1,000 a month without the subscription. Instead I pay the flat Max fee and the system keeps going. A full pipeline -- PRD, code, review, fix -- averages around $4 in API-equivalent per shipped PR. I hope subscriptions remain this affordable but I know pricing could change any time. I'll park that thought for now.&lt;/p&gt;
&lt;h2&gt;
  
  
  From Bash Scripts to an Orchestration System
&lt;/h2&gt;

&lt;p&gt;Before the orchestration system, I built basic agents.&lt;/p&gt;

&lt;p&gt;I wrote about that first version in &lt;a href="https://blog.mariohayashi.com/p/an-autonomous-dev-pipeline-for-one" rel="noopener noreferrer"&gt;An autonomous dev pipeline for one&lt;/a&gt;: bash scripts, cron, tmux and Claude glued together until the behaviour was reliable enough to trust. It picked up tasks, wrote code, opened pull requests and handled review feedback. "Beginner" agentic, held together with glue and hope.&lt;/p&gt;

&lt;p&gt;It worked well enough but this time I rebuilt the whole thing in TypeScript. Proper architecture and state management. Where bash was duct tape and slightly chaotic, TypeScript is steel: typed interfaces, phase boundaries and methodical error handling.&lt;/p&gt;
&lt;h2&gt;
  
  
  Managing Many Agents
&lt;/h2&gt;

&lt;p&gt;One agent was manageable. Then I wanted a specialised one for planning, another one for code review, another for fixing PR review feedback. Managing the agents became tricky. Capability is not the bottleneck, orchestration is. I needed a conductor for my orchestra.&lt;/p&gt;

&lt;p&gt;Put another way, the factory must grow.&lt;/p&gt;

&lt;p&gt;If you recognise that phrase, you already understand how I felt the need to get this right. What started as "let me just automate this one thing" became a full orchestration system: idea goes in, PRD comes out, issues get created, workers pick them up, code gets written, PRs get opened, reviews get addressed, fixes get pushed. I ideate and check in. The system handles the rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzkdd6vhtlmdobzk9xsz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzkdd6vhtlmdobzk9xsz.jpg" alt="Factorio: The Factory Must Grow. Source: https://commons.wikimedia.org/wiki/File:Factorio_Space_Age_Gleba_Screenshot.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Factorio: The Factory Must Grow. Source: &lt;a href="https://commons.wikimedia.org/wiki/File:Factorio_Space_Age_Gleba_Screenshot.jpg" rel="noopener noreferrer"&gt;https://commons.wikimedia.org/wiki/File:Factorio_Space_Age_Gleba_Screenshot.jpg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The pipeline looks something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;idea &amp;gt; PRD &amp;gt; issues &amp;gt; code &amp;gt; tests &amp;gt; PR &amp;gt; review &amp;gt; fixes &amp;gt; merge&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm still figuring this out, but the pattern is clear. Each step is a phase with defined inputs, outputs and failure modes. The system retries, backs off, stops to ask for help as needed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;The architecture is simpler than you would expect. GitHub is my system of record, my state machine. Each column in the Project board is a state. The orchestrator polls the board, picks up eligible issues and spawns workers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2o8h2s800nuyso6395z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2o8h2s800nuyso6395z.jpg" alt="Step #2: After your idea/note is processed, agent creates a PRD after clarifying ambiguities with me" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Step #2: After your idea/note is processed, agent creates a PRD after clarifying ambiguities with me&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpe0sv75klu0ocu9jg00.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpe0sv75klu0ocu9jg00.jpg" alt="Step #3: Agent creates a PR" width="800" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Step #3: Agent creates a PR&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctvg7gqol2vyai5oqbom.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctvg7gqol2vyai5oqbom.jpg" alt="Step #4: Agent reviews its own code and I review it only thereafter" width="800" height="438"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Step #4: Agent reviews its own code and I review it only thereafter&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon76y76p1h5felbq3inp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon76y76p1h5felbq3inp.png" alt="Step #5: Approve and merge the work" width="800" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Step #5: Approve and merge the work&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each worker gets its own fresh workspace directory, where it can read, write and commit without stepping on other agents' toes. The worker is a Claude CLI subprocess streaming JSON events and the orchestrator watches that stream for completion.&lt;/p&gt;

&lt;p&gt;The part that took the longest to get right was retries. The interesting failures are the ones that look like success. An agent finishes its work, reports success, the orchestrator changes the issue to Done, and nothing has actually been pushed. A pre-commit hook silently rejected the push and the work is sitting orphaned in the workspace directory. Put another way, the agent gets close to finishing, pauses on a turn limit, resumes, gets close again, pauses again, repeat ad infinitum. Or the agent burns through its cost cap without ever committing. Oops.&lt;/p&gt;

&lt;p&gt;There are two kinds of retry. A continuation is the agent pausing mid-task because it's hit its turn limit. It resumes with its full conversation history and picks up where it left off. A failure retry is the agent crashing. It retries with a fresh start, no memory, backoff before trying again. Continuation and failure retries both have per-issue caps now. The orchestrator also checks &lt;code&gt;git status&lt;/code&gt; after every reported success and abandons any issue that breaches the (configurable) dollar budget. Most of the retry logic exists because one of these went wrong.&lt;/p&gt;

&lt;p&gt;The entire workflow configuration (one each for PRD, dev, review) lives in a single file. States, cost limits and prompt templates live in it. When you change the file, the orchestrator hot-reloads it. I spent a good amount of time adjusting these workflow files but it's starting to work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────────────────┐
                    │      ORCHESTRATOR TICK      │
                    └──────────────┬──────────────┘
                                   │
                    ┌──────────────▼────────────────┐
                    │  1. RECONCILE running workers │
                    └──────────────┬────────────────┘
                                   │
                    ┌──────────────▼──────────────┐
                    │  2. GATE on rate limits     │
                    └──────────────┬──────────────┘
                                   │
                    ┌──────────────▼──────────────┐
                    │  3. FETCH candidate issues  │
                    └──────────────┬──────────────┘
                                   │
                    ┌──────────────▼──────────────┐
                    │  4. DISPATCH workers        │
                    └──────────────┬──────────────┘
                                   │
                    └───── schedule next tick ──────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Thinking Is Still Mine (For Now)
&lt;/h2&gt;

&lt;p&gt;I've replaced (most of) myself. But I can still decide what to build. And what not to build. I can still judge whether code is correct or there's code smell. I can feed the pipeline with ideas that are worth pursuing and axe the ones that are not. I can judge whether the output matches the intent. Being less in the weeds, I have more time to think about strategy.&lt;/p&gt;

&lt;p&gt;The orchestration system handles the execution. The thinking, taste and judgement are still mine, for now.&lt;/p&gt;

&lt;p&gt;On the flip-side, every layer of abstraction creates demand for someone who understands the layer below it. The more software we automate, the more we need people who can fix the pipes when they burst.&lt;/p&gt;

&lt;p&gt;We've all been replaced in small ways before. I started my career writing vanilla JS and jQuery code that has been replaced by higher level libraries and frameworks powering today's web apps. Abstractions make yesterday's hard problems trivial. Each time, the work shifts slightly. The only difference this time is that the shift is... vast.&lt;/p&gt;

&lt;p&gt;I am the product and tech strategy machine now. I will feed the machine with ideas until I am replaced again and then I'll have to carve out another higher level role. The factory must grow.&lt;/p&gt;




&lt;p&gt;If you're experimenting with AI in your workflow, I'd love to hear from you! I write more like this at &lt;a href="https://blog.mariohayashi.com" rel="noopener noreferrer"&gt;blog.mariohayashi.com&lt;/a&gt;, and feel free to follow me on X: &lt;a href="https://x.com/logicalicy" rel="noopener noreferrer"&gt;@logicalicy&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>softwareengineering</category>
      <category>automation</category>
    </item>
    <item>
      <title>Trade-offs leading tech at early-stage startups</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Tue, 05 Jan 2021 12:06:40 +0000</pubDate>
      <link>https://forem.com/logicalicy/developing-tech-at-early-stage-startups-the-right-way-14bb</link>
      <guid>https://forem.com/logicalicy/developing-tech-at-early-stage-startups-the-right-way-14bb</guid>
      <description>&lt;p&gt;If you're a first-time tech founder or lead at a startup, you'll find yourself spending an inordinate amount of time making trade-offs. You'll need to pick a tech stack that works for your team; decide how much time to invest in visual design; balance your vision with the most valuable thing you can deliver to your user &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This post intentionally confronts this controversial topic head on. I feel it's a topic that's not talked about nearly enough. Tech founders and leads often find out they'd spent countless hours on creating something no-one wants only after the fact (myself included). Having built tech from scratch at multiple startups and talked to other tech founders in the past, I've noticed that some (if not many!) first-time founders and tech leads find out the hard way that they may have taken the wrong turn when they were presented with a trade-off. &lt;/p&gt;

&lt;p&gt;Here, I talk about the most common "questionable turns" taken that I've experienced for myself, heard about or seen others experience. These thoughts may be controversial and you might not agree with most of them but I will feel I've contributed something if you might agree with just one!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tech stack:&lt;/strong&gt; Some founders spend lots of time thinking about the tech stack, trying to pick the "perfect" technologies. It's good to explore. But don't spend an inordinate amount of time thinking about it. Before I joined my first early-stage startup, I was given helpful advice (from my CTO at the time) to "just build". Your startup might not exist in 18 months. Pick things that work &lt;em&gt;right now&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hire the right people:&lt;/strong&gt; I was really lucky when we hired someone who was extremely talented at my first tech lead role. I learned things daily from him. He had opinions (something I've come to value a lot). We iterated fast. I've seen the opposite however too: hires who've struggled to push any code and shown not much engagement despite trying to accommodate. Founders inevitably need to make a decision whether or not to let that person go, so make sure to hire well (or be prepared for it to hurt!).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust:&lt;/strong&gt; Give everyone the benefit of the doubt. At the beginning, everything might be all over the place. That's ok. Introduce or suggest the right processes that you and others can trust. That way, structure will come and you'll be able to make progress. If there's distrust from the get-go, it'll be hard to make it work long-term. Everything will feel "transactional".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; One experienced CTO once told me that testing is overkill at a startup pre-Product-Market Fit (PMF). And I think he's mostly right: at many startups, if you're iterating fast, you'll be throwing away lots of code. Yes, there are some exceptions — code for financial transactions, mission-critical applications, etc. where bugs can be disastrous — but for most pre-PMF startups that are creating a few REST APIs and a React.js front-end, focusing on testing may be overkill. Start testing when your product starts to stabilise. Be comfortable with tech debt. You can address tech debt when you reach Series A and your team is growing (when there's an obvious need for tests). It's ok to do things that don't scale at first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; Only document as much as you need to communicate with your team. Creating a big project implementation plan may be a waste of time in a small, nimble team. Instead, make sure to communicate in daily stand-ups, comms tools, etc. Similarly, documenting code is secondary at an early stage. You may throw away lots of code and the API may change a lot. Note: this is not to be confused with good practices, such as good naming conventions and code structure, which are a must. Documenting code will become a productivity multiplier once you have more than a few engineers but not until then.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goals:&lt;/strong&gt; Make sure to define goals. You might think building tech counts as progress. It is but only if it's contributing to your company's wider goals. Without goals, you'll have less alignment in the team (yet another risk you can't afford at an early stage) and you're leaving success to chance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; Similarly, make sure to install analytics from an early stage, tracking the most important metrics. I've seen founders regret not measuring early enough. That includes me!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design:&lt;/strong&gt; Both UX and UI design are fluid, especially at the start. You're still trying to find PMF, so naturally your UX will evolve. UI design and the visual language will change as your branding becomes more clear. Therefore, spending an inordinate amount of time creating the perfect design system is a bit of an overkill. I would suggest sitting down with the designer to work out the most pragmatic path to a product that allows users to accomplish their jobs (if you're using JTBD). Often designers are just trying to paint the "ideal" picture. Designers are very pragmatic and will design around technical limitations if you flag them. Also, some product designers may prefer using existing design systems to iterate faster (such as Material, Bootstrap or Tailwind).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speak to users:&lt;/strong&gt; You might be getting siloed in "tech", either because responsibilities are defined in binary or there's so much product development to do that you don't have time for other things. If it's the former: ownership doesn't mean others can't be involved. Speaking to customers can be driven by your co-founder but your team will benefit from your involvement as you'll better understand what product to build. If there's too much on your plate: ask yourself, would you prefer to do things the right way or do the right things? Speaking to users de-risks the possibility that you're building the wrong thing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are some rule-of-thumbs that have helped me, with some of the trade-offs above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pick speed and limit scope:&lt;/strong&gt; The &lt;a href="https://blog.mariohayashi.com/delivering-software-product-management-triangle"&gt;Product Management Triangle&lt;/a&gt;: you can only pick two of speed, scope and quality. Obviously pick speed, as iterating is key to developing product at an early stage. Of scope and quality, try to limit scope so as to minimise the sacrifices you make with quality. Also, limiting scope will help you iterate faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-communicate:&lt;/strong&gt; Always over-communicate your intentions. You might be a small team but it never hurts to share too much. It's never too early to introduce 1-on-1's. If silence is the norm in your startup, ask yourself if that's ok. If silence is the manifestation of lack of trust or "we have nothing to talk about but work", then it might need addressing. Your opportunity cost is your time, so make sure that whatever you're working towards is communicated!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be pragmatic:&lt;/strong&gt; Not everything is black-and-white. So making a rule in the first week and expecting it hold for the next months is unrealistic. Take information as it comes and act on the information. The startup that processes the information most efficiently (the advantage of being a startup!) often makes the most progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are just some of my thoughts around tech founder trade-offs. Some may be controversial but I hope there may be some things that you could relate to, from your current or past experience.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>architecture</category>
      <category>testing</category>
      <category>leadership</category>
    </item>
    <item>
      <title>10 things they don't teach you about AWS</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Thu, 31 Dec 2020 13:05:05 +0000</pubDate>
      <link>https://forem.com/logicalicy/10-things-they-don-t-teach-you-about-aws-k5c</link>
      <guid>https://forem.com/logicalicy/10-things-they-don-t-teach-you-about-aws-k5c</guid>
      <description>&lt;p&gt;Some things that I've picked up over the years that may not be obvious when starting out with a new AWS service.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create SSL certificates in&lt;/strong&gt; &lt;code&gt;us-east-1&lt;/code&gt;. CloudFront's provisioning infrastructure is based there, so is only compatible with &lt;code&gt;us-east-1&lt;/code&gt; certificates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM.&lt;/strong&gt; May not be obvious to the newcomer: permissions are granted via statements in &lt;strong&gt;Policies&lt;/strong&gt;, which are assigned to either &lt;strong&gt;Identities&lt;/strong&gt; or &lt;strong&gt;Resources&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFormation vs Terraform.&lt;/strong&gt; CloudFormation features oddly sometimes lag behind Terraform, which uses AWS's API under the hood (not CloudFormation's).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda deployment too big&lt;/strong&gt;. Consider AWS Lambda Layers when your deployment package size has exceeded Lambda limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambdas suffer from cold starts&lt;/strong&gt;. Tackle it by reducing your package size. Also, you get at least the same amount of CPU in the init phase as in the handler. You get the init phase for very close to free, so move as much application code as possible outside of your handler function. Subsequent invocations can also reuse resources outside the handler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQS deliverability&lt;/strong&gt;: Standard queues guarantee at least one delivery, FIFO queues attempt one delivery. Make sure your application code makes the correct assumptions/de-dupe as necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS KMS is your friend&lt;/strong&gt;. Use it to encrypt your keys. Think twice about what goes into environment variables or Parameter Store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS RedShift performance.&lt;/strong&gt; RedShift queries perform a lot better with Distribution Keys. Set them up early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Cognito customisation&lt;/strong&gt;. &lt;del&gt;You can't customise AWS Cognito verification emails.&lt;/del&gt; As suggested in the comments, you can now customise verification email with code. (&lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-email-verification-message-customization.html"&gt;See docs&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Credits&lt;/strong&gt;. Most accelerator programmes offer you AWS Credits. Join one and ask for them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Helpful resource, in case you haven't come across it — &lt;a href="https://github.com/open-guides/og-aws"&gt;Open Guide to Amazon Web Services (GitHub)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cover: "AWS - Amazon Web Services Office in Houston, Texas" by Tony Webster is licensed with CC BY 2.0. To view a copy of this license, visit &lt;a href="https://creativecommons.org/licenses/by/2.0/"&gt;https://creativecommons.org/licenses/by/2.0/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>Do web/mobile app copy changes get handed over to you in Notion/Sheets?</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Mon, 14 Dec 2020 03:53:54 +0000</pubDate>
      <link>https://forem.com/logicalicy/do-web-mobile-app-copy-changes-get-handed-over-to-you-in-notion-sheets-1o8f</link>
      <guid>https://forem.com/logicalicy/do-web-mobile-app-copy-changes-get-handed-over-to-you-in-notion-sheets-1o8f</guid>
      <description>&lt;p&gt;Hey! 👋&lt;/p&gt;

&lt;p&gt;This Q is for devs who work on web/mobile apps and have PMs/marketers/designers who write the copy for these apps in Notion/Google Sheets...!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How frequently do you get asked for copy changes (in Notion/Google Sheets)?&lt;/li&gt;
&lt;li&gt;How annoying/easy is it for you to update the copy in your web/mobile app?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to research your opinions, as I'm the maker of &lt;a href="https://copyocean.com"&gt;CopyOcean&lt;/a&gt; (posted about &lt;a href="https://dev.to/logicalicy/write-copy-in-notion-export-to-json-4g5g"&gt;last week&lt;/a&gt;), which turns web/mobile app copy in Notion Tables into GitHub/Gitlab Pull Requests. Your feedback will be very helpful! Thank you 🙏&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>mobile</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Write copy in Notion, export to JSON</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Wed, 02 Dec 2020 22:20:59 +0000</pubDate>
      <link>https://forem.com/logicalicy/write-copy-in-notion-export-to-json-4g5g</link>
      <guid>https://forem.com/logicalicy/write-copy-in-notion-export-to-json-4g5g</guid>
      <description>&lt;p&gt;Hey there! 👋&lt;/p&gt;

&lt;p&gt;I made a Low-Code project that I’d welcome feedback on —&lt;/p&gt;

&lt;p&gt;Aimed at devs, PMs and copywriters, CopyOcean takes copy from a Notion Table and exports it to JSON, so developers can easily drop it into the app (&lt;a href="https://www.copyocean.com"&gt;https://www.copyocean.com&lt;/a&gt;). It also makes i18n a breeze!&lt;/p&gt;

&lt;p&gt;It was motivated by experience in product development where copy management was often messy and ad-hoc. Unnecessary communication overhead, outdated copy and lost productivity were some of the problems that came with copy changes. CopyOcean attempts to solve this problem by using Notion Tables as a central source for copy and helping you add the copy to your product with a machine-readable export (JSON).&lt;/p&gt;

&lt;p&gt;Would love to know from you (a) how your copy process looks like today and (b) whether this is of interest! Of course any other thoughts welcome.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>i18n</category>
    </item>
    <item>
      <title>Made a blog on software contracting/freelancing</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Wed, 07 Oct 2020 13:40:56 +0000</pubDate>
      <link>https://forem.com/logicalicy/made-a-blog-on-software-contracting-freelancing-3jhh</link>
      <guid>https://forem.com/logicalicy/made-a-blog-on-software-contracting-freelancing-3jhh</guid>
      <description>&lt;p&gt;Hey! 👋 Just wanted to share a blog (&lt;a href="https://contracto.dev"&gt;contracto.dev&lt;/a&gt;) I made to describe my experiences as a software contractor. I usually take on jobs like React.js, Node.js, Serverless and more.&lt;/p&gt;

&lt;p&gt;If you're curious about software contracting, its challenges and benefits, I've written a couple of posts on it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://contracto.dev/what-is-software-contracting"&gt;Is contracting for me?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://contracto.dev/how-to-get-started"&gt;How to get started&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let me know if you have any Qs!&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>Where to start with SQL? A few posts to help beginners</title>
      <dc:creator>Mario Hayashi</dc:creator>
      <pubDate>Mon, 05 Oct 2020 17:13:24 +0000</pubDate>
      <link>https://forem.com/logicalicy/where-to-start-with-sql-a-few-posts-to-help-beginners-5bid</link>
      <guid>https://forem.com/logicalicy/where-to-start-with-sql-a-few-posts-to-help-beginners-5bid</guid>
      <description>&lt;p&gt;There are tonnes of SQL resources out there. This small project I made over the weekend — How do I SQL? — collates them to make it a bit more digestible. Hope it helps!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why SQL? &lt;a href="https://howdoisql.com/why-sql"&gt;https://howdoisql.com/why-sql&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;List of SQL resources: &lt;a href="http://howdoisql.com/resources"&gt;http://howdoisql.com/resources&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;List of SQL courses &lt;a href="https://howdoisql.com/courses"&gt;https://howdoisql.com/courses&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
