<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Writing on William Ong</title><link>https://williamong.vercel.app/blog/</link><description>Recent content in Writing on William Ong</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright © 2026, William Ong.</copyright><lastBuildDate>Tue, 20 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://williamong.vercel.app/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>On AI: The annoying part with TS any</title><link>https://williamong.vercel.app/linkedin-ai-generated-code-introduces-technical-debt-and-bugs/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-ai-generated-code-introduces-technical-debt-and-bugs/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_ai-helps-me-move-faster-but-its-also-making-activity-7419204749562073091-D8im"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While AI helps me move faster than ever, but it’s also making it easier for me to ship technical debt and bugs.&lt;/p&gt;
&lt;p&gt;Lately, I’ve been using agentic code generation (opencode) for frontend tasks.&lt;/p&gt;
&lt;p&gt;It’s satisfying to see results immediately, but I’ve noticed a recurring patterns where it keep trying to use &lt;code&gt;any&lt;/code&gt; for defining types. When building in an existing codebase, i observed that LLMs often try to take the path of least resistance.&lt;/p&gt;</description></item><item><title>I hate Timezones</title><link>https://williamong.vercel.app/linkedin-timezones-whose-7am/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-timezones-whose-7am/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_as-we-get-closer-to-the-end-of-the-year-activity-7412143253086494721-CZuy"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As we get closer to the end of the year, it reminds me of a tricky problem in engineering i recently encounter: timezones.&lt;/p&gt;
&lt;p&gt;Indonesia is a good reminder of this. In one country alone, it has three timezones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;WIB (UTC+7)&lt;/li&gt;
&lt;li&gt;WITA (UTC+8)&lt;/li&gt;
&lt;li&gt;WIT (UTC+9)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It sounds simple, until recently I need to ship something that says: “Activate this feature at 7–10 AM” across multiple cities in different timezones.&lt;/p&gt;</description></item><item><title>How to: Daily Journal</title><link>https://williamong.vercel.app/linkedin-boost-productivity-with-a-simple-daily-journal/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-boost-productivity-with-a-simple-daily-journal/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_i-used-to-end-my-workdays-wondering-where-activity-7408796727568216064-epxa"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I used to end my workdays wondering where the time went to. Meetings, code reviews, random questions, context switching.&lt;/p&gt;
&lt;p&gt;Before I know it, the day feels busy but directionless.&lt;/p&gt;
&lt;p&gt;That’s why, for the past two years, I’ve been keeping a simple daily bullet journal. Nothing fancy.&lt;/p&gt;
&lt;p&gt;Each day, I simply write down a small set of work tasks: a couple of must-dos, a few optional ones, and short notes when I learn something or notice a pattern.&lt;/p&gt;</description></item><item><title>Prefer Multicast, Async communication</title><link>https://williamong.vercel.app/linkedin-why-i-prefer-public-channels-over-dms-for-work-questions/</link><pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-why-i-prefer-public-channels-over-dms-for-work-questions/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_why-dms-rarely-effective-in-work-imo-activity-7396352773090500608-Ll0m"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ver the years, I’ve realized that direct messages rarely an effective way to ask for help or discuss things.&lt;/p&gt;
&lt;p&gt;When I DM someone with a question, a few things tend to happen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The pressure shifts entirely to one person.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I have no idea whether they’re busy or deep in focus.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The conversation becomes invisible to everyone else who might benefit from it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s why I’ve started to try to posting questions in a public channel instead.&lt;/p&gt;</description></item><item><title>How AI Agents shape how I build software.</title><link>https://williamong.vercel.app/linkedin-ai-agents-shape-how-i-build-software/</link><pubDate>Tue, 04 Nov 2025 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-ai-agents-shape-how-i-build-software/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_i-first-used-ai-for-quick-answers-now-ai-activity-7391292740644454400-39IK"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I first used AI for quick answers. Now, AI Agents shape how I build software.&lt;/p&gt;
&lt;p&gt;Over the past 2 years, my use of AI in development has changed a lot. It started with ChatGPT as a quick Q&amp;amp;A partner, then moved to code completion with Copilot. In the past few months, I’ve been using agentic coding assistants through Opencode (alongside a GitHub Copilot subscription) that live in my terminal and help me execute tasks directly.&lt;/p&gt;</description></item><item><title>Book Review: "The Missing README: A Guide for New Software Engineers"</title><link>https://williamong.vercel.app/linkedin-the-missing-readme-a-guide-for-new-software-engineers/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/linkedin-the-missing-readme-a-guide-for-new-software-engineers/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.linkedin.com/posts/williamong9923_i-wish-i-had-read-this-book-when-i-started-activity-7386237155200843777-hsxg"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I wish I had read this book when I started my first job as a software engineer.&lt;/p&gt;
&lt;p&gt;I recently started reading The Missing README: A Guide for the New Software Engineer by Chris Riccomini, Dmitriy Ryaboy.&lt;/p&gt;
&lt;p&gt;It’s packed with practical advice for anyone starting their software career or even for experienced folks joining a new team. Each chapter shares lessons you often learn the hard way on the job.&lt;/p&gt;</description></item><item><title>Fixing a Memory Leak in Go Service</title><link>https://williamong.vercel.app/fixing-memory-leak/</link><pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/fixing-memory-leak/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://williamong.netlify.app/posts/fixing-memory-leak/"&gt;williamong.netlify.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this article, I will show the journey of identifying and resolving a memory leak issue in a Go service. The problem emerged when our team query service experienced a significant surge in network traffic, resulting in a continuous rise in memory and CPU usage. Our expectation was that after a prolonged and extensive query process, the memory and CPU usage would return to normal. However, this was not the case. We will delve into the investigation, root cause analysis, and solution to fix this memory leak issue.&lt;/p&gt;</description></item><item><title>2022 Recap: Reflecting on Milestones and Embracing the Challenges Ahead</title><link>https://williamong.vercel.app/2022-recap/</link><pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/2022-recap/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://williamong.netlify.app/posts/2022-recap/"&gt;williamong.netlify.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hi, with 2023 coming nearly, I would like to thank you for all of my readers through this blog (tho I’m sure that me, my past self, and my future is the only one reading this blog).&lt;/p&gt;
&lt;p&gt;Many things happened in my life this year, and I would like to share them briefly in this article.&lt;/p&gt;
&lt;h3 id="finishing-my-internship-at-tokopedia"&gt;Finishing my internship at Tokopedia&lt;/h3&gt;
&lt;p&gt;During the past year, I had the incredible opportunity to embark on an internship at Tokopedia, a leading e-commerce company in Indonesia. This experience was truly invaluable as it allowed me to dive deep into the world of software engineering and gain practical insights into building scalable and innovative solutions.&lt;/p&gt;</description></item><item><title>Solve communication failures between services</title><link>https://williamong.vercel.app/handling-failure-when-calling-other-services/</link><pubDate>Sun, 11 Dec 2022 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/handling-failure-when-calling-other-services/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://williamong.netlify.app/posts/handling-failure-when-calling-other-services/"&gt;williamong.netlify.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Have you ever found this issue?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dial tcp &amp;lt;IPAddress&amp;gt;: cannot assign requested address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or any kind of issue due to failures when calling other services? If this issue is what you currently experiencing / curious about, this article is for you…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TLDR;&lt;/strong&gt; Here are the code solution &lt;a href="https://github.com/William9923/ping-pong-retryable"&gt;link (github)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Based on this &lt;a href="https://stackoverflow.com/a/31810116"&gt;stackoverflow&lt;/a&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The error occurs when we can’t assign the requested address during a Dial because it was running out of local ephemeral ports to use for the client connection.&lt;/p&gt;</description></item><item><title>Transaction in Hexagonal Architecture</title><link>https://williamong.vercel.app/seperate-application-and-database-code-in-hexagonal-architecture/</link><pubDate>Sun, 04 Dec 2022 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/seperate-application-and-database-code-in-hexagonal-architecture/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://williamong.netlify.app/posts/seperate-application-and-database-code-in-hexagonal-architecture/"&gt;williamong.netlify.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TLDR;&lt;/strong&gt; Here are the code example &lt;a href="https://github.com/william9923/clean-transaction"&gt;link (github)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of the applications of &lt;strong&gt;clean architecture&lt;/strong&gt; is &lt;a href="https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749"&gt;Hexagonal Architecture&lt;/a&gt;, an approach that explicitly distinguishes layers, adapters, and so on. This approach has gained love among Go developers because it does not require complex abstractions or intricate patterns and does not contradict complicated language idiom - the so-called Go way. Have you ever used &lt;strong&gt;transactions&lt;/strong&gt; in a hexagonal architecture using Go? How do you keep the application layer and database adapter layer separate? Have you occurred a code similar to the like below?&lt;/p&gt;</description></item><item><title>My biggest mistake as junior engineer</title><link>https://williamong.vercel.app/my-biggest-mistake-as-junior/</link><pubDate>Tue, 08 Nov 2022 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/my-biggest-mistake-as-junior/</guid><description>&lt;p&gt;I just completed my probation period in my first full-time job as a software engineer. A lot of things happened during those time. To celebrate it, I would like to share a few mistakes I did from past year and what I would like to do in the future to prevent those things.&lt;/p&gt;
&lt;h2 id="1-scared-to-take-on-challenging-task"&gt;1. Scared to take on challenging task&lt;/h2&gt;
&lt;p&gt;These mistakes happen during my internship period during my 6-month internship in my last year as a CS student. As someone who change from a data science role to a software engineer role, I was scared to take on the meaty task. I am scared that I cannot finish the job as well as they expected during my first 3 months, especially after I made many stupid mistakes on my first few tasks. I was feeling really bad about myself and kept thinking that I don’t have the correct skillset for the job. Thankfully, I think my manager notice this issue, and he keeps finding ways to make me feel good about myself. He consistently encourage me for the remaining 3 months I was there. I grow from that newbie engineer to one of the top performer engineers in the team (at least that’s what I think of myself :D). To this day, I am still very thankful for my senior &amp;amp; mentor (Mr. Agung) because he keeps encouraging me to always learn from my mistakes.&lt;/p&gt;</description></item><item><title>It's time to start</title><link>https://williamong.vercel.app/its-time-to-start/</link><pubDate>Sat, 29 Oct 2022 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/its-time-to-start/</guid><description>&lt;p&gt;Over the past year, I had been blogging on &lt;a href="https://medium.com/@williamong1400" title="medium"&gt;medium.com&lt;/a&gt; for my internship, and its truly been a great learning experience. Sadly throughout 2022, I need to focus on finishing my undergraduate studies and now becoming a full-time software engineer at a startup in Indonesia (where I live). A lot of things are changing fast and it was scary to say, at least from my perspective. With how fast things changes and how much I had learned these past few months, I would like to be able to archive my experience for myself, from technical things (programming) to my daily life routine.&lt;/p&gt;</description></item><item><title>Data Warehouse Modelling Concept</title><link>https://williamong.vercel.app/data-warehouse-modelling-concept/</link><pubDate>Sat, 14 Aug 2021 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/data-warehouse-modelling-concept/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://medium.com/analytics-vidhya/part-i-i-data-warehouse-modelling-concept-962f286d1566"&gt;Medium&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;Data Warehouse&lt;/li&gt;
&lt;li&gt;ETL Pipeline&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;First of all, all data used for this project were &lt;strong&gt;given&lt;/strong&gt; by our mentor (&lt;strong&gt;primary data&lt;/strong&gt;). Dataset consists of 7 &lt;code&gt;csv&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://miro.medium.com/v2/resize:fit:700/1*aI4o87zvWuoQEoe-WsDiPA.jpeg" alt="Image 1"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Dataset details&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For the project environment, please use :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/10/tutorial-install.html"&gt;PostgresSQL v10.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.devgenius.io/python-for-beginners-how-to-install-python-3-8-3-for-windows-pc-a84f5d237c19"&gt;Python 3.8+ (pip)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;p&gt;What is the &lt;strong&gt;pipeline structure&lt;/strong&gt; of this project?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://miro.medium.com/v2/resize:fit:700/1*7nHaQWPNGIDxGzPpTVg7WA.jpeg" alt="Image 2"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pipeline Simplify&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Above picture show the outline on what we are going to do to design &amp;amp; model &lt;strong&gt;Data Warehouse&lt;/strong&gt; that we are going to use for &lt;strong&gt;Part II&lt;/strong&gt; &amp;amp; &lt;strong&gt;Part III&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>What is CNN? A 5-Year-Old Guide to Convolutional Neural Network</title><link>https://williamong.vercel.app/what-is-cnn/</link><pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate><guid>https://williamong.vercel.app/what-is-cnn/</guid><description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://medium.com/analytics-vidhya/what-is-cnn-a-5-year-old-guide-to-convolutional-neural-network-c9d0338c3bf7"&gt;Medium&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://miro.medium.com/v2/resize:fit:700/0*XyHQemE1oQsJDhxr" alt="Image 2: A kid who was trying to learn CNN looks a bit confused"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A 5 year old kid trying to understand CNN&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Okay, that title might be a little bit misleading, because let’s face it no 5 year old will try to find out what a Convolutional Neural Network 🤣. This guide is targeted for beginners in deep learning who want to learn more about Image Processing, but feels pressured when seeing papers and other writing that seems a little bit too hard to understand 😂.&lt;/p&gt;</description></item></channel></rss>