<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Insight</title><description>Prose and Poetry by Thiago Hirai</description><link>https://thiagohirai.com/</link><language>en-us</language><item><title>Manual Coding Is Dead</title><link>https://thiagohirai.com/blog/manual-coding-is-dead/</link><guid isPermaLink="true">https://thiagohirai.com/blog/manual-coding-is-dead/</guid><description>Stop looking at the code. Close your editors; the models don&apos;t need them.</description><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Stop looking at the code. Close your editors; the models don’t need them.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I have seen a lot of “coding is dead” and “coding is alive and well” posts in the last few months, and I now think both categories are missing the point. The typical ‘dead’ argument goes something like “agents can now write the code, so software engineers are doomed”. The typical ‘alive’ argument says “software engineers do a lot of things, and agents don’t do all of those things, so we’re fine”. I’m honestly not sure if we’re doomed or fine, but I suspect it’s neither: things are changing dramatically, and trying to explain a divergent future in terms of today’s jobs (or the past 50 years of them) isn’t going to work very well.&lt;/p&gt;
&lt;p&gt;I need a term for the old-school way of coding, the one where you open a text editor and type the code, one character at a time. I propose we call it manual coding. I’ll also include in this category variants such as “first read the code in the editor and then use a tool (agent or refactor button) to edit the code”. Basically, if you’re still opening an editor, you’re coding manually. And if you’re still reading the code that was produced, you’re reviewing manually.&lt;/p&gt;
&lt;p&gt;I strongly believe that manual coding is dead. Looking at the code is more and more akin to looking at the assembly: a few people actually need to do it, but the vast majority of us do not. If you take away just one thing from this essay, let it be this: &lt;em&gt;stop looking at the code&lt;/em&gt;. If you’re still doing it, you’re wasting your time, and you’re missing out on the biggest productivity multiplier since compilers were introduced. Close your editors; the models don’t need them.&lt;/p&gt;
&lt;p&gt;I think I understand at least some of the resistance to letting go of the code. I spent my entire 20-year career as an IC because I &lt;em&gt;liked the code&lt;/em&gt;. I did this for fun and professional pride. Few days felt as good as the ones spent entirely immersed in a hard problem, coming out on the other side with an elegant solution that you could proudly show your peers. It felt &lt;em&gt;great&lt;/em&gt; when someone understood you, when they recognized the &lt;em&gt;craft&lt;/em&gt;. Product people and business people may not have cared, but the coders did. You could look at 50 lines of code and say “this is beautiful”. So when I say “you have to let it go”, you say “but what of the beauty”? The beauty is for us, the old guard. You had to be there. The new generations will never see it.&lt;/p&gt;
&lt;p&gt;The primary reason you have to stop manually coding is simple: the SOTA LLMs (Opus 4.7 and GPT 5.5 as of this writing) are now better than us. Modesty aside, I think I’m a great coder. I went to two ACM ICPC world finals, I built Bing’s crawler scheduler, Facebook’s audio calling, Snap’s push notifications backend and OpenAI’s connectors. I worked with some of the best engineers in the world and I held my own. And even with those credentials, I think the LLMs code better than me. They’re more knowledgeable, more creative, and more precise. Even if they took just as long as I took to type the code, you should probably still take their code over mine (for a sufficiently well-defined task). But on top of all that, they are orders of magnitude faster. They do in minutes what would take me a day, and in hours what would take me a week or more. And they charge a lot less than I did per hour.&lt;/p&gt;
&lt;p&gt;If you take this advice and stop manually coding, you will soon find new challenges: writing good specs, verifying the agents’ work, designing good architectures, and designing good UIs. This partially explains the “alive and well” camp, because these skills matter today. Agents still need help sometimes, but they often do not need any help. Models got much better in the last few months and they’ll continue getting better. And a lot of people, myself included, have been spending time building harnesses to address these deficiencies at a higher level of abstraction. So I don’t think you should take it for granted that those other skills will retain value.&lt;/p&gt;
&lt;p&gt;If you read this far, it may seem that I’m saying that software engineering is dead. My main disagreement with the doomers camp is that the software doesn’t just appear out of thin air. Someone must will it to exist, and keep poking at it until it has the right shape and is delivered to the right people. The general business prompt to an all-powerful agent (“make me some money”) is unsatisfying and undifferentiated, and humans will continue thriving by trying to shape the world to match their preferences and judgment. We just won’t be typing much in the process.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I hope to write more frequently about this subject. In my next post, I’ll write a case study based on &lt;a href=&quot;https://retirementlab.app/&quot;&gt;Retirement Lab&lt;/a&gt;, a 200k LOC app that I built and shipped solo in two months with the immense help of Claude Max and Codex Pro subscriptions. If you’re not convinced by this first essay, perhaps a few examples and statistics will help.&lt;/p&gt;</content:encoded><category>software</category><category>ai</category></item><item><title>Second Leter to Ben</title><link>https://thiagohirai.com/blog/second-leter-to-ben/</link><guid isPermaLink="true">https://thiagohirai.com/blog/second-leter-to-ben/</guid><description>Time carries me relentlessly
I caught some droplets off its vast stream
Held them in my agings hands
and made ink....</description><pubDate>Mon, 06 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Time carries me relentlessly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I caught some droplets off its vast stream&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Held them in my agings hands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and made ink.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I refuse to let it go. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We shall remember. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;1. Bonding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Your mother can see into mysteries invisible to me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I nod when her prophecies come true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wondering about my blindness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I might have worried when she said&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You and I were not bonding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But I knew things were fine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(fathers have their own powers, you see)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We did bond.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We became quite the pair, you and I&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Countless steps back and forth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Holding you close to my chest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;2. Right leg up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I hope to one day visit your home&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;To sit down and have a cup of coffee&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I don’t know what we’ll talk about&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(I suspect it won’t be trucks anymore)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But I’m confident your right leg will be up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Just like you always liked it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3. Mexerico&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You’ve been fond of touching&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Ever since you were born&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Each face and toy and wall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Was something to be explored with curious fingers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Even today, three years later&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You still tell me that you’re just seeing this or that&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;With your hands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;4. Mirror&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Some people tell me you look just like me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I tend to disagree, my hair and skin being darker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Except in the earliest of hours&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;when the world looks black and white&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I look at you and see myself&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A ripple from another place and time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;5. Fearlessness and robots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You seem to have no fear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You’ll climb and jump and fight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;sometimes too bravely for my own heart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Nothing frightens you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;except for robots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Perhaps you know something we don’t.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;6. Cooking and feeding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;If I invite you to cook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You drop your favorite toy to join&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We like the fire, the smells and tastes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And we like to share our joy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;May your pantry ever be full&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I’m sure your table will have many guests.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;7. Dally&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;For years I was neither daddy nor papai&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I was ‘dal-ly!’&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;That’s how you’d summon me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;when you felt hungry, tired, proud or lonely&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And even when I was tired&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and everything else was quiet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I reminded myself that one day would be the last time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And I’d miss your voice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I do miss it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Never hesitate to call me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;That’s what dallys are for&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>poetry</category></item><item><title>Breadth</title><link>https://thiagohirai.com/blog/breadth/</link><guid isPermaLink="true">https://thiagohirai.com/blog/breadth/</guid><description>In the spring of 2015, my manager in London told me he was impressed with my technical breadth. I joined his team after a hackamonth working on a code editor with Kent Beck, went on to work on some low level bluetooth routing, and eventually left that to work on the newsfeed and composer surfaces of the Facebook app, covering three quite distinct surfaces in a few months. That conversation was the first time when I...</description><pubDate>Tue, 25 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://thiagohirai.com/posts/breadth/images/0_Up5IUPi6rIpHYG9s.jpg&quot; alt=&quot;sunset over broad horizon&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the spring of 2015, my manager in London told me he was impressed with my technical breadth. I joined his team after a hackamonth working on a &lt;a href=&quot;https://www.facebook.com/notes/994298340981590/&quot;&gt;code editor&lt;/a&gt; with &lt;a href=&quot;https://twitter.com/kentbeck?lang=en&quot;&gt;Kent Beck&lt;/a&gt;, went on to work on some low level bluetooth routing, and eventually left that to work on the newsfeed and composer surfaces of the Facebook app, covering three quite distinct surfaces in a few months. That conversation was the first time when I really felt like a senior engineer. Senior not in the sense of “I achieved level 5”, but rather in the sense of “I feel like I know what I’m doing”. Having worked on a lot of apparently unrelated things, I finally achieved a sense of mastery. This post offers some introspection on that process.&lt;/p&gt;
&lt;p&gt;(The other reason to write this one is that I really value symmetry, and thus a post about &lt;a href=&quot;https://thiagohirai.medium.com/depth-a2449c5b7218&quot;&gt;Depth&lt;/a&gt; keeps wanting its counterpart to exist)&lt;/p&gt;
&lt;p&gt;I don’t necessarily recommend that you become a generalist — it probably takes longer to rise up in the ranks than it takes a similarly skilled specialist. Furthermore, generalists tend to eventually branch off of technical jobs and go into management or other less technical disciplines. But some people — like me — can’t help themselves, and will sooner or later get bored of encountering the same problems, or worse, knowing the solutions and slowing down on their learning curves. At that point, the natural thing to do is simply to seek something new and shiny again. So that’s element number one of being a generalist: you don’t want to specialize.&lt;/p&gt;
&lt;p&gt;Now, how does anyone get good at anything if they don’t put in enough work? I don’t think they do. If I kept switching to completely different jobs (say farming, baking, running, painting) every 2 years I’d probably be mediocre at best at each of those jobs. The key realization for one to become a successful software generalist is that &lt;strong&gt;things are largely similar and applicable across different domains&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;As obvious as it may sound, it turns out that &lt;strong&gt;it’s all just code&lt;/strong&gt;. At a high level, it doesn’t really matter if the code is running on a desktop PC running Windows, or on an Android phone, or on a k8s container hosted on god-knows-which-cloud-provider. Code, as Turing would teach us, is all some arithmetic, branches, loops and state. And to make things even easier, modern system architectures are very similar to each other. Armed with that knowledge, one can always go ramp-up on a new problem space as long as they can patiently read and understand the code! I can’t emphasize enough how important it is to read the code. I’ve found and fixed a lot of issues over the years just because I’d be the only one to actually go read the code very carefully. A corollary here is that programming languages don’t matter all that much — as long as you learn what the computer is doing behind the scenes, you can always figure out how to work in a new language.&lt;/p&gt;
&lt;p&gt;The other important property of software that helps generalists is that certain patterns are fractally applicable (i.e they help at a high level, but if you zoom in and look again you still want the same patterns to hold). An obvious such property is the minimization of dependencies (in particular circular ones). You want this to be true when designing a collection of services, but also when defining a collection of processes in your container, or a collection of classes in your process, or a collection of variables in your class. Another one is size, or partitioning. No matter which level you’re operating at, you never want something so big you can no longer reason about it (think a 1000 loc function, or a service with 1000 endpoints), and you also don’t want a collection of pieces so small that you lose track of what exists (think 1000 functions made of 1 line each, or 1000 tiny services).&lt;/p&gt;
&lt;p&gt;I don’t intend to create an exhaustive list of all the behaviors that help across software domains, but some others include “testing” (how can I know something works), “fast iteration” (let’s build things in small chunks and ship them ASAP), “customer focus” (who are we building this for) and “business focus” (why are we building this). As you move through different projects in your career, these meta skills continue accruing and remain applicable to everything you touch. That’s what allows one to keep on improving when switching over to a new area — despite it being new, they’re not starting from scratch.&lt;/p&gt;
&lt;p&gt;One final thought. While my intention was to create a counterpart to my depth post, I now realize that these two have a common thread: curiosity and its natural consequence, exploration. No matter whether you’re going deeper into something you’re familiar with or getting to learn something brand new, allow yourself to be curious! Don’t treat software as black boxes. When given a chance, open it up and see what’s inside!&lt;/p&gt;</content:encoded><category>software</category><category>career</category></item><item><title>Depth</title><link>https://thiagohirai.com/blog/depth/</link><guid isPermaLink="true">https://thiagohirai.com/blog/depth/</guid><description>In this piece I discuss the practice of going deep into a system through a few examples. I believe I do this more often and more thoroughly than the average engineer, giving me an edge when tackling problems and increasing my rate of technical learning.

Microsoft, 2006

Soon after joining Microsoft as an SDET (a software engineer that writes test automation, a misguided concept IMO but a story for another day) I was...</description><pubDate>Wed, 17 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this piece I discuss the practice of going deep into a system through a few examples. I believe I do this more often and more thoroughly than the average engineer, giving me an edge when tackling problems and increasing my rate of technical learning.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://thiagohirai.com/posts/depth/images/1_bE2rmE5kyuA1yf8F07Gg5A.jpeg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;microsoft-2006&quot;&gt;Microsoft, 2006&lt;/h3&gt;
&lt;p&gt;Soon after joining Microsoft as an SDET (a software engineer that writes test automation, a misguided concept IMO but a story for another day) I was given the task to fix a test suite that had been severely damaged by the introduction of IPv6 to the Windows networking stack (including the component I was supposed to test, Microsoft’s DNS Server). The tests were written in a custom scripting language called HAPI and a very large amount of them were failing mysteriously. I &lt;strong&gt;think&lt;/strong&gt; my job was to fix them, but also to write tests for other new features that were coming online.&lt;/p&gt;
&lt;p&gt;Despite having spent nearly 2 years at that job, I never really understood how HAPI worked. I never made a custom build of the interpreter, I never even read its source code. In hindsight, it was pretty hopeless that I could fix the broken tests, because I didn’t understand what they were doing.&lt;/p&gt;
&lt;p&gt;Looking back to that time, I feel I wasted much of those 2 years. Not so much for staying in the SDET position (which was a minor mistake), but primarily for failing to go deeper into it. I learned a few things here and there, but not enough.&lt;/p&gt;
&lt;p&gt;Eventually I interviewed for a SDE position at Microsoft and accelerated my learning speed, and later joined Facebook and accelerated it even more.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;facebook-2012&quot;&gt;Facebook, 2012&lt;/h3&gt;
&lt;p&gt;After Skype balked at a partnership to support voice calling on Facebook mobile, I had a chance to write it from scratch. I proposed to write a prototype based on WebRTC, then a somewhat nascent technology developed for desktop computers. I started porting WebRTC to mobile and with the help of two other engineers got it to work on Facebook’s mobile application. Thanks to open source and a lot of hard, focused work, our small team of 3 people accomplished what a company of thousands wouldn’t do for us. I couldn’t be more proud at the time of my performance review.&lt;/p&gt;
&lt;p&gt;To my great surprise, despite a promotion and glowing commentary in other areas, my performance feedback said that I needed to go deeper into the system. Having handwritten some assembly to fix an endianness bug that would only manifest on ARM processors I was outraged at this feedback. Did they want me to go deeper than the actual CPU instructions? At that time I hadn’t yet learned to be cautious of my own bias against constructive feedback, so it didn’t immediately sink in.&lt;/p&gt;
&lt;p&gt;Having shipped a v1, at the time we were focused on improving quality before rolling out more broadly. A lot of my time was spent aggregating logs and trying to build a model to understand which variables could predict bad calls. Despite some good ideas, this effort didn’t yield the breakthrough I wanted, and I had wasted a good quarter on this.&lt;/p&gt;
&lt;p&gt;The one thing that probably saved my next review was an investigation that I did into connection establishment delays. We knew that sometimes it took too long to connect a call, so I set out to figure out what was taking time. For signaling (the metadata that controls a call, saying things like “I’m calling you” or “I accept”) we leveraged MQTT, a lightweight transport protocol that Facebook used for chat as well. I traced the code all the way down to the actual system call that opened a socket, and then got curious about how said socket was configured. I realized that we wanted to send bytes out as soon as possible (both for chats and calls), so I just reduced the TCP send buffer size. This was non-controversial enough that I simply committed a one line code change without wrapping it into an A/B test or anything like that. A month later someone chased me down because they were trying to understand how the latency for all chats had reduced by 10%. I explained, people were happy. Going deep paid off, and the previous performance feedback started to make sense. Nobody was saying I was incapable of doing this. They were saying I should do more of it!&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;snap-2016&quot;&gt;Snap, 2016&lt;/h3&gt;
&lt;p&gt;There was a time the Snapchat app for Android got so bad that the head of engineering asked my team in Seattle to stop everything we were doing and to help alleviate the problem. This was way before the rewrite (aka Mushroom) and I think no one will disagree when I say that was a wild time for that app.&lt;/p&gt;
&lt;p&gt;One of the many problems that plagued the app were the infamous ANRs. ANR is short for “application not responding”, which Android would show to users after the UI thread had been blocked for a long time, prompting them to terminate the offending application. When looking at the stack traces for our ANRs, the most common had to do with SharedPreferences.&lt;/p&gt;
&lt;p&gt;SharedPreferences is Android’s built in mechanism for an app to save small bits of data, typically some trivial state or app configuration. By then, most of our developers were savvy enough to &lt;strong&gt;not&lt;/strong&gt; update SharedPreferences on the UI thread, since blocking IO would easily lead to dropped frames and overall user sadness. But somehow we still had a lot of ANRs related to it. Having learned my lesson about going deep, this time I didn’t hesitate. I went beyond our app and started reading Android’s source code. That allowed me to understand that the implementation of SharedPreferences simply queued updates to be executed later on, that each update would completely rewrite the entire preferences file, and that the entire queue would be executed on the UI thread when certain system events occurred. With that knowledge I built a wrapper to avoid that access pattern, which killed one third of all Snapchat’s ANRs when shipped.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;snap-2020&quot;&gt;Snap, 2020&lt;/h3&gt;
&lt;p&gt;The other day I had a conversation with a more junior engineer in which he asked me how come I &lt;strong&gt;knew&lt;/strong&gt; so much stuff. My first instinct was to say “well, I’ve been doing this for a long time”. But reflecting further I remembered this pattern of going deep. When facing a technical mystery, don’t just shrug and write it off. Try to figure out what is actually going on — there are many tools to do it (debuggers, source code, tracing tools, network monitors and so on). If you do a good job, there’s a fairly decent chance that you crack an important problem. And even if you don’t, you’ll come out of your investigation knowing a bit more. You’ll get better and learn something different each time you repeat this cycle, eventually allowing you to solve problems that few others can.&lt;/p&gt;</content:encoded><category>software</category></item><item><title>Snow</title><link>https://thiagohirai.com/blog/snow-2/</link><guid isPermaLink="true">https://thiagohirai.com/blog/snow-2/</guid><description>If I grow old enough to forget
Or sad enough to despair
Or mad enough to lose touch
Be a good friend and remind me
Of that winter time when my kids were young...</description><pubDate>Wed, 03 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;If I grow old enough to forget   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Or sad enough to despair &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Or mad enough to lose touch   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Be a good friend and remind me   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Of that winter time when my kids were young   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Help me recall the quiet white   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the clear taste of snowflakes   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the mesmerizing fractal dances   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the comforting smell of hot chocolate   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the pure essence of childhood   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the all encompassing love   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Find me those memories and I shall smile   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Remembering that I have known true happiness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>poetry</category></item><item><title>1wloc</title><link>https://thiagohirai.com/blog/1wloc/</link><guid isPermaLink="true">https://thiagohirai.com/blog/1wloc/</guid><description>Joining Facebook in May of 2011 was quite a shock for me. I had come from 6 years at Microsoft, at a time a slow behemoth so big that it could probably ship software faster if it had less engineers. Facebook was not like that.

Every 2 weeks Facebook would pool its new hires into a Bootcamp class. Bootcamp was to last for 6 weeks, and it included everybody — new grads, veteran engineers and everyone in between. The...</description><pubDate>Wed, 20 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joining Facebook in May of 2011 was quite a shock for me. I had come from 6 years at Microsoft, at a time a slow behemoth so big that it could probably ship software &lt;strong&gt;faster&lt;/strong&gt; if it had &lt;strong&gt;less&lt;/strong&gt; engineers. Facebook was &lt;strong&gt;not&lt;/strong&gt; like that.&lt;/p&gt;
&lt;p&gt;Every 2 weeks Facebook would pool its new hires into a Bootcamp class. Bootcamp was to last for 6 weeks, and it included everybody — new grads, veteran engineers and everyone in between. The program included a few talks, but primarily it was about tasks and team selection. Bootcampers were assigned random tasks from across the company so they could get a flavor of many teams and so that the company could get a flavor of them. Completing no tasks was not good.&lt;/p&gt;
&lt;p&gt;I was given a laptop and told to sit at one of the many anonymous rows in an unfinished building. I happened to sit by some lively ex-interns — kids still. And while the kids were crushing it, completing several tasks a day, by the end of my first week I was still stuck on my first task, wondering if I’d be fired.&lt;/p&gt;
&lt;p&gt;In comparison, my previous job had been easy. Projects were &lt;strong&gt;supposed&lt;/strong&gt; to take long, with plenty of planning time. Now, my planning habits were looking very much out of place.&lt;/p&gt;
&lt;p&gt;So I invented a trick that I still use when I need to start on a new project. Let’s call it ‘one wrong line of code’, or &lt;em&gt;1wloc&lt;/em&gt; for brevity.&lt;/p&gt;
&lt;p&gt;I say ‘invented’ because I don’t remember anyone teaching me this. It’s entirely possible that it was mentioned to me and I forgot about it, and I’d bet that this idea arose independently several times; maybe it’s even a thing somewhere. But I don’t think I’ve heard of it before it occurred to me.&lt;/p&gt;
&lt;p&gt;This is applicable when many things are still unknown. I don’t know how to structure the software (functions or classes or something else), I don’t know where to put it (file names, folder names, projects) and I don’t know where to start. Over time all these mysteries clear, but they can be paralyzing at the beginning.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;1wloc&lt;/em&gt; goes like this: just open a code editor and type a single, wrong line of code. If it’s an existing project I’ll try to place it in a spot I know how to run, and if it’s a brand new one it will be in a new file that contains only main(). It doesn’t matter that the code doesn’t run, that it doesn’t compile and that it doesn’t even make a lot of sense. As soon as I have a single line of code in front of me, I can leave the abstract planning behind and start &lt;strong&gt;fixing&lt;/strong&gt; it. Putting all the other concerns aside and focusing on just that, I’ll go on to type a second line, and a third, and slowly things will begin to take shape. When there’s enough lines they will move into a function, and then into a class, and then into a file, and we’ll be in business.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://thiagohirai.com/posts/1wloc/images/1_lVmAXSHKxbHcPoaMXvFtTA.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The key for this to work is detachment. There’s almost no chance that this first line survives. Very likely it will be entirely replaced by something better as the project starts to take shape. The point is not to produce an enduring work of art, but rather to get your thoughts flowing. What you need at this stage is not the final code; you need momentum to start exploring and figure out where to go next.&lt;/p&gt;
&lt;p&gt;Hopefully it goes without saying that &lt;strong&gt;never&lt;/strong&gt; having a plan also won’t work. If you turn &lt;em&gt;1wloc&lt;/em&gt; into &lt;em&gt;nwloc&lt;/em&gt; you get nonsense. I find that this technique is a great way to break analysis paralysis, but it needs other companion behaviors (such as planning and iteration) to be successful.&lt;/p&gt;
&lt;p&gt;As to Facebook’s bootcamp, I wasn’t fired. I adapted and eventually got the hang of it, going on to have a moderately successful stint at the company. The pressure during those years was formative, and I learned then much of what makes me a good software engineer now. I hope to share a few more of my learnings in future posts. I haven’t fully planned this series yet, but one has to start somewhere. Call it &lt;em&gt;1wloc&lt;/em&gt; for posts if you will.&lt;/p&gt;</content:encoded><category>software</category><category>facebook</category><category>software-development</category></item><item><title>First Letter to Ben</title><link>https://thiagohirai.com/blog/first-letter-to-ben/</link><guid isPermaLink="true">https://thiagohirai.com/blog/first-letter-to-ben/</guid><description>Everyone will remember this as a dark time
But not me

History books will talk about viruses, murders, fires, lies
But not love, naturally...</description><pubDate>Sat, 02 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Everyone will remember this as a dark time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But not me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;History books will talk about viruses, murders, fires, lies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But not love, naturally&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;scholars can’t comprehend this mystery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;What I remember most vividly from this year&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Is a grey day by the end of summer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;When your mother and I lay spooning on a hospital bed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Waiting for you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We arrived early&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;As one does for very important appointments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The morning went by peacefully&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And sometime in the afternoon the outside world dimmed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;as the spotlight was cast on you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We teared up and held hands tightly when it was time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I don’t know whether you or mom were in a hurry&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;but you came out fast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Push, breathe, push and there you were&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Screaming for air&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Full of precious life&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We left by the following night&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;listening to our music while driving&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The trees on empty roads watching over us&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;as the family pieces fell into place&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Everyone will remember this as a dark time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But not me, I can’t&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;For you filled our hearts with light&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;May it shine forevermore&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>poetry</category></item><item><title>Second Letter to Ian</title><link>https://thiagohirai.com/blog/second-letter-to-ian/</link><guid isPermaLink="true">https://thiagohirai.com/blog/second-letter-to-ian/</guid><description>I start with an apology:
I’m sorry I didn’t write earlier
I took a while because I was afraid
that my words wouldn’t be good enough
to capture these miracles I’ve seen....</description><pubDate>Sun, 09 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I start with an apology:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I’m sorry I didn’t write earlier&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I took a while because I was afraid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;that my words wouldn’t be good enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;to capture these miracles I’ve seen.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;That is obvious now; they never will.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(Some friends used to say&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;in red lettered posters&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;that ‘done is better than perfect’&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and they were right)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I write to tell you about the lessons I’ve taken&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;on the subject of time.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;First, that the future does not exist,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;yet you’ll imagine many futures,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;like I do now,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;thinking of future you.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Second, that there’s only now,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;all that happens is at the present moment,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and you should be mindful of it - all else is waste.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Third, that memories are but a shadow of the present,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;yet you’ll cherish some forever,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;because they’re all that’s left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;of a perfect past.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Fourth, that human time is not made of seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;but rather of moments. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;In that sense you enlarged my existence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;a thousand fold.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I collected some of our moments here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;While your memory isn’t ready&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and while mine hasn’t faded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;These will go one day too&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But for now we fight the fleetingness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;with beauty.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I. Disarray and first bottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Dry lips in the morning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Sore breasts which you wouldn’t take&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A nurse that didn’t know the urgency of life&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A cupboard impatiently opened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Pots and pans on the floor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A hastily opened box full of nutrition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Your first bottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Relieved breaths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;II. Drive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Never have I felt such clarity of purpose&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;as when doing things for you.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I drove to three cities because you needed me to&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and no traffic or rain could bother me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Nothing would stop or distract me from my mission&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;to provide.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;III. First Light&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I remember watching the very first light appear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;breaking one of our many sleepless nights&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;turning the dark sky grey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;as the world turned, revealing itself&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I held you in my arms then,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;as I did many times before and after,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and understood everything.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;IV. Warmth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I miss the time when you perennially wanted to be held&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I’d walk around rooms everywhere,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;In this continent or another&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Sometimes I’d sing, or count in silence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And you were always so warm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;V. Old new clothes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;One day you wouldn’t fit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;any single one of your clothes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;When did you grow?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Were we not looking?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Your mother and I packed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;everything, carefully, in a box&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And hugged each other as the tears flowed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;VI. Banana pure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Your first solid meal was banana pure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;That must be quite common&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A baby eating their first pure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But like many times since we met&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I couldn’t really tell you why I teared up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;It’s something about life&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Rushing in, thunderously&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;VII. Past, present and future&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I opened a door&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And for a brief moment stepped out of time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;My father was carrying me&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I was carrying you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You were carrying a baby&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;May this cycle be repeated a thousand times.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;VIII. Remote control, red balloon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You were always eager to explore&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We encouraged you, of course,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But you struggled to do more&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Like that day when you got&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;the remote control in one hand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and a red balloon in the other&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;and places to go&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I asked you ‘what now’&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And off you went&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Walking by yourself&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>poetry</category></item><item><title>First Letter to Ian</title><link>https://thiagohirai.com/blog/first-letter-to-ian/</link><guid isPermaLink="true">https://thiagohirai.com/blog/first-letter-to-ian/</guid><description>On the night you came into this world
Your mother and I listened together
Hand in hand
To all our love songs
The water broke as the second one played...</description><pubDate>Tue, 21 Nov 2017 00:00:00 GMT</pubDate><content:encoded>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;On the night you came into this world&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Your mother and I listened together&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Hand in hand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;To all our love songs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The water broke as the second one played&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And we kept on listening&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I felt infinite love for her&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And let a tear or two surface and drop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;(Unlike what others may say,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Men do and should cry)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We rested for a bit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;There was lightning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We never see lightning in this part of the world&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I wondered what kind of omen that was&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decided it was a good one&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And went back to waiting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I will never forget your mother&apos;s face while she pushed you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The fiercest, bravest expression you&apos;ll ever see&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;All the fury and energy and power of every woman that ever walked this earth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A warrior you could not face&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The primal forces of nature combined&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;No words will do it justice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;It takes a lot to bring one of us into life&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We saw your black hair first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Then you were out, eyes wide open&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A blur of medical people surrounded us&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;But your mother and I saw just you&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;We cried the happiest tears&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;And held you a long time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;A different room, a little rest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The early hours snowed the first winter snow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Wasn&apos;t it supposed to be fall?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;I hope you like this world&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;It&apos;s weird and messy and full of beauty&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Welcome now&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;There&apos;s much for you to learn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Know this, remember it always:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;You&apos;ve been loved from the start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Endlessly&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>poetry</category></item></channel></rss>