<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/rss/atom-styles.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ahmad Hasan Siregar</title>
  <subtitle>Ahmad Hasan Siregar is a software engineer who shares insights in technical leadership through his personal blog.</subtitle>
  <link href="https://hasansiregar.com//atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://hasansiregar.com/" rel="alternate" type="text/html"/>
  <updated>2025-11-27T01:13:49.723Z</updated>
  <language>en</language>
  <id>https://hasansiregar.com//</id>
  <author>
    <name>Ahmad Hasan Siregar</name>
    <uri>https://hasansiregar.com/</uri>
  </author>
  <generator uri="https://github.com/Dnzzk2/Litos" version="5.0">Astro Litos Theme</generator>
  <rights>Copyright © 2025 Ahmad Hasan Siregar</rights>
  
  <entry>
    <title>Clarity Thrives in Discrete Thinking</title>
    <link href="https://hasansiregar.com//posts/discrete-thinking" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/discrete-thinking</id>
    <updated>2025-11-25T00:00:00.000Z</updated>
    <published>2025-11-25T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">The world is continuous; understanding is discrete.</summary>
    <content type="html"><![CDATA[
<h2>Mental Acumen</h2>
<p>I’ve been thinking about what the difference is between thoughts, ideas, information, and concepts.</p>
<p>Then, there’s also thinking, deriving a conclusion, understanding, et cetera. A process that transforms a series of thoughts into a brilliant idea.</p>
<p>One obvious thing is that these are concepts in the realm of mental, mind, and cognition. Borrowing a model from computer science, these are data and computation. So let’s call them:</p>
<ul>
<li><em><strong>mental representation</strong></em>: a structured internal symbol the mind uses to encode something about the world.</li>
<li><em><strong>cognition</strong></em>: a mental process that transforms representations across various fidelity levels.</li>
</ul>
<p>The mental representation can go from low-fidelity to high-fidelity:</p>
<ol>
<li>Senses</li>
<li>Perception</li>
<li>Information</li>
<li>Knowledge</li>
<li>Concept</li>
<li>Thought</li>
<li>Idea</li>
</ol>
<p>What’s important is not how comprehensive the bullet points are. Rather, the subjective comparison between them in terms of level of fidelity.</p>
<p>The cognition can consist of sensing, perceiving, thinking, and understanding. The cognition process transforms mental representation from low-fidelity to high-fidelity.</p>
<p>There’s also memory in the cognitive faculty. The ability to store and recall mental representations is part of the cognitive process as well. I’m not going to talk about the difference between short-term and long-term memory.</p>
<h2>Discrete Thoughts</h2>
<p>What is interesting here is that reality works in a continuous fashion. Time flows continuously. Space exists continuously. We sense inputs continuously.</p>
<p>Only when a recurring pattern is identified and categorized, a discrete meaning emerge. If we’re able to capture that and symbolize it with a name, we will have a stable symbol for that specific, discrete meaning. Examples are cat, house, glass, which are nouns. It can also be more abstract such as globalization, hard, biology. What matters is that each of them is different, distinct from the other, discrete.</p>
<p>Logic and reasoning also operate in a discrete context. Computer works in discerete, 1 and 0 (binary).</p>
<p>So I think, the more we can identify patterns, categorize them, name them (symbolization), and segregate the symbols, the more we can gain clarity of thinking.</p>
<h2>Strong Engineer</h2>
<p>Thinking simplistically, the <strong>technical</strong> talent of an engineer can be reduced to mental acumen and domain-relevant skills. The ability to hold various complex concepts, performs transformations on them (mental gymnastic!), store temporarily, recall at will, and manipulate it again is the important raw-ingredient. Combine it with domain-relevant skills we get a comprehensive and robust, I’d say, framework how to hone and test an engineer’s technical talent.</p>
<p>Read <a href="https://hasansiregar.com/posts/investable-candidate/" rel="noopener noreferrer" target="_blank">Investable Candidate</a> for my complete take on engineering talent.</p>
<h2>Connection to AI and vector embeddings</h2>
<p>One of my criticisms about the AI industry is how the industry heavily relies on <em>vector embeddings</em>, a series of floating-point numbers that we don’t fully understand. We try to derive new training/inference methods, new computing processes (CPU-&gt;GPU), and new papers/research on a foundation that’s not robust.</p>
<p>But, thinking about it, we don’t necessarily need to fully understand the continuous blob of floating-point numbers. What matters are the symbols, the distinct meaning of those vectors. In fact, not fully understanding them unlocks the ability to represent reality more completely as floating-point numbers operate continuously. Though limited as CPU has 32/64/… bit limit :)</p>]]></content>
    <category term="thinking" />
  </entry>
  <entry>
    <title>Scalable Products</title>
    <link href="https://hasansiregar.com//posts/scalable-products" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/scalable-products</id>
    <updated>2025-11-11T00:00:00.000Z</updated>
    <published>2025-11-11T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">How do I think about scaling B2B vs B2C products.</summary>
    <content type="html"><![CDATA[
<img src="https://hasansiregar.com/_astro/like-intensity.DOaPhOJb_Z129d0h.webp" alt="like-intensity" />
<ul>
<li>
<p>Starts with Sam’s love—users chart.</p>
</li>
<li>
<p>Continue with capturing the market share.</p>
<ul>
<li>1,000 engineers</li>
<li>dotted box line</li>
</ul>
</li>
<li>
<p>what does scaling to the right mean in B2B vs B2C context</p>
</li>
<li>
<p>Scalable architectures vs scalable features</p>
<ul>
<li>B2C → how the systems endure 1,000,000 users</li>
<li>B2B → how the systems endure 1,000,000 combinations of use case</li>
</ul>
</li>
<li>
<p>Make something that small subset of people love, but scalable → ensures growth to majority market share adoption.</p>
</li>
</ul>]]></content>
    <category term="product" />
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>Investable Candidates</title>
    <link href="https://hasansiregar.com//posts/investable-candidate" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/investable-candidate</id>
    <updated>2025-10-10T00:00:00.000Z</updated>
    <published>2025-10-10T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">What makes someone an investable hire (to me).</summary>
    <content type="html"><![CDATA[
<p>Continuing my thought about <a href="/posts/investing-in-people">Investing on People</a>, there should be a criteria on whether the investment worth it or not. It’s in the context of professional organization i.e. companies. So I’m talking about hiring/firing.</p>
<blockquote><p>Remember, worth, value used in here is in its most broadest sense!</p></blockquote>
<p>Part of my thoughts are formed thanks to my boss at work currently. I’d propose there are 3 dimensions:</p>
<ol>
<li>
<p>Technical competency, the ability, can you do it.</p>
</li>
<li>
<p>They care (they give a f), do they want to do it.</p>
</li>
<li>
<p>Vibe check.</p>
</li>
</ol>
<p><em>Technical competency</em> is mostly about the floor and ceiling ideas in <a href="/posts/high-floor-high-ceiling-candidates">High Floor, High Ceiling Candidates</a>. The concrete skill, expertise. Along with the future growth potential of their ability.</p>
<p><em>They care</em>. I’d propose 80% of this dimensions is driven by leadership. A leader with strong vision, purpose, well-grounded strategy, and able to part this semantics to people, i.e. strong leadership, will almost automatically make people care. By its nature, people want to do great job. They want to serve other people, to be fulfilled, to server higher purpose than their self. The rest 20%, or whatever minor number that fits, I guess, come naturally from them.</p>
<p>So if they don’t care, employees are unengaged, unmotivated, I’d propose it’s caused by weak leadership. When they are well-engaged, fully motivated, know exactly clear where do we go, they will help achieve the goal of the organization. They somehow even work hard. I have some intuitive sense on why, but that’s a story for another day.</p>
<p><em>Vibe check</em>. The last point is pretty easy really as it’s subjective and simple. The most concrete way I use to describe this is whether you want to spend time and hang out with them outside of work? You can answer organically without comprehensive measurements, hence it’s pretty clear.</p>
<p>TODO: refine, but clarity is there.</p>]]></content>
    <category term="software-engineering" />
    <category term="hiring" />
  </entry>
  <entry>
    <title>Purpose-Driven Demo</title>
    <link href="https://hasansiregar.com//posts/demo" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/demo</id>
    <updated>2025-10-09T00:00:00.000Z</updated>
    <published>2025-10-09T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">How starting with why can make a difference in product demos.</summary>
    <content type="html"><![CDATA[
<p>I learned from Simon’s “Start with Why” about the three layers of the onion: why, how, and what. Companies differentiate themselves from other competitors based on the values they offer that others don’t have, the how. They elaborate on the mechanics of how they manage to fill the gaps, the how. But Simon highlighted that people don’t buy what you do, but why you do it.</p>
<p>Simon quoted how Apple market their products by starting with stating their beliefs on challenging the status quo and thinking differently. Beautifully designed, simple to use, and user-friendly, the “how”. The final “what” is that they just so happened to sell computers, phones, tablets, etc.</p>
<p>From Accelerate (2018) by Forsgren, Humble, and Kim, there are 3 types of organizational culture: pathological, bureaucratic, and generative. To make the story short, the highest-performing organization, defined by profitability, market share, and productivity, fosters a generative culture focused on its mission. How to accomplish the goal? Everything is subject to good performance.</p>
<p>Armed with this knowledge, I think it’s clear and explicit what the best way to open a demo.</p>
<p>A demo to a director with an influence over 200-engineers strong was coming. This was the reason why I was researching these. We’re building a deployment portal, and we need to demo it to them so they can adopt our ecosystem. We’ve been building this portal over the last 9 months, and we were not quite ready yet to open our product to wider users, by the nature of deployment platform, or because I had some strategic mistakes on my product and technical leadership. So it’s pretty high-stakes, but not really, as I don’t expect them to adopt right away given the maturity of the platform. Hence, the strategy here is to ensure they realize our purpose.</p>
<p>I started by stating our 3 beliefs. These are a set of how we think the reality should work. They strongly resonate with our beliefs, but was still concerned about the feature-set of our platform, i.e. the maturity. This was expected. But, here’s the kicker that convinced me, imagine if we do the presentation on the same month, same day, but fast-forward 1 year, it’ll be super easy to convince them to adopt our tooling.</p>
<p>If the vision and purpose are clear, people will follow. There will come a day when this strategy shines its values. Let the time flow, and I will come back with plenty of evidence.</p>
<p>TODO: refine, fix the flow of story.</p>
<p>TODO: 1) talk about Founder Mode by Chesky; 2) explain the initial journey of building deployment portal.</p>]]></content>
    <category term="speaking" />
  </entry>
  <entry>
    <title>Investing in People (in progress...)</title>
    <link href="https://hasansiregar.com//posts/investing-in-people" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/investing-in-people</id>
    <updated>2025-09-27T00:00:00.000Z</updated>
    <published>2025-09-27T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">Why investing in people is more valuable than investing in systems or processes.</summary>
    <content type="html"><![CDATA[
<p>Investing in people is more valuable than investing in systems or processes. A lesson learned that I try to apply more consciously.</p>
<blockquote><p>When I use the term “<em>invest</em>”, I mean in the context of investing one’s time, effort, and energy to a particular undertaking in the expectation of returned values in the broadest sense.</p></blockquote>
<p>The journey started when I was feeling overwhelmed. I felt I spent too much time trying to control the quality of every single output stream of my team. Until I decided it’s enough and there should be a better way to do this.</p>
<p>There were several ideas popped up in my mind, mostly automating the process. But, there’s a limit to automation a tool can do. Such as linters. Higher semantic such as architecture compliancy, dependency graph to ensure non-spaghetti code, etc. cannot be automated. Rather, it’s an art of trade-off that requires human time to judge and decide.</p>
<p>One particular solution keeps surfacing in my mind from various sources when I tried to find the answer. When I asked my question on Reddit. When I watched a YouTube <a href="https://youtu.be/J4KzV7Ihif4" rel="noopener noreferrer" target="_blank">video</a> from Timothy Ronald (controversial, I know).</p>
<p>That is “delegation”. I’ve been hearing this “delegation” term in all leadership books, articles, and videos. It never clicked with me. But this was finally the first time it clicked and unlocked the solution to my problem.</p>
<p>It may have struck me that I was trying too much to be in control. Everybody has 24 hours in their day, technically 8 hours for a corporate job. It was never a scalable strategy in the first place.</p>
<hr />
<p>TODO: refine this section</p>
<p>If we make an analogy of a stream, where water flows from upstream to downstream, reviewing code is located pretty far downstream.</p>
<p>I invested time and effort in refining and maturing our processes. Building various checkpoints along the lines, such as low-level design review and specification review. Finally, the code review.</p>]]></content>
    <category term="leadership" />
    <category term="culture" />
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>Outsourcing Mentorship to Reddit r/ExperiencedDevs</title>
    <link href="https://hasansiregar.com//posts/mentorship-in-reddit" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/mentorship-in-reddit</id>
    <updated>2025-09-27T00:00:00.000Z</updated>
    <published>2025-09-27T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">Finding mentorship in less expected places.</summary>
    <content type="html"><![CDATA[
<p>The story began when I was trying to validate my ideas for a set of problems that I’m uncertain of. Hence, I was looking for a mentor, somebody I can look up to, who can help me find answers to my questions.</p>
<p>Unfortunately, in my organization, I did not have a dedicated mentor, specifically in leadership. So the journey began.</p>
<p>I have been a long-time lurker in r/ExperiencedDevs. Reading software career stories and experiences. Gaining a lot of insights, and low-key, it was fun reading these posts too. But I was never somebody who wrote answers, let alone wrote a post.</p>
<p>I figured asking questions to validate my ideas on r/ExperiencedDevs might be a good solution. So I asked. Unexpectedly, I got a lot of quality responses. Responses that point out my mistake, gave me insights that I can reflect on, and practical actions.</p>
<p>Reflecting upon it, it was such a great experience to be able to bounce my ideas to the whole world and get responses on them. Improving the quality of my ideas even further.</p>
<p>Since then, I concluded that outsourcing mentors to Reddit is actually a viable plan.</p>]]></content>
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>High Floor, High Ceiling Candidates</title>
    <link href="https://hasansiregar.com//posts/high-floor-high-ceiling-candidates" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/high-floor-high-ceiling-candidates</id>
    <updated>2025-09-23T00:00:00.000Z</updated>
    <published>2025-09-23T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">Thinking about candidate types in hiring.</summary>
    <content type="html"><![CDATA[
<p>When our team was hiring, I was thinking types of good candidates.</p>
<p>I defined two dimensions to judge a candidate. The floor and the ceiling. The floor is the existing cumulative experience the candidate has. The ceiling is the future potential of growth the candidate has.</p>
<p>A fresher from the top 3 universities can be categorized as low floor, high ceiling candidates. They currently don’t have that much experience. But, the raw intelligence, the ingredients, that can be shaped to be a mature software engineers is the high ceiling.</p>
<p>Meanwhile, another candidate with 15 years of experience with a title of Senior Software Engineer might be categorized as high floor, low ceiling candidates. In their 15 years of experience, they’re “still” at Senior level.</p>
<blockquote><p>Please notice the quote on “still” in the sense that being a Senior at 15 YoE of and itself is not inherently bad. But, it does signal low future growth potential, which may not be bad if that’s no longer the candidate’s priority in their life.</p></blockquote>
<p>An example of high floor, high ceiling candidates, that I know of, is a Staff Software Engineer at Google (Chrome) with 6 YoE. Another example is a 15 YoE as a Senior Director or VP in big techs corporation ladder. Or, it might mean young 30s founders with unicorn valuation.</p>
<p>There’s no right or wrong answer. What matters is the <em>fit</em>. Whether the candidate fits the expected requirements of the role itself.</p>]]></content>
    <category term="hiring" />
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>Software Engineering IQ</title>
    <link href="https://hasansiregar.com//posts/software-engineering-iq" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/software-engineering-iq</id>
    <updated>2025-09-23T00:00:00.000Z</updated>
    <published>2025-09-23T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">What makes a software engineer smart?</summary>
    <content type="html"><![CDATA[
<p>I started thinking about what is the “single” trait that will guarantee our new hire will be a good hire when our team needed to find a frontend engineer, after we just ended a previous position caused by a mismatched role.</p>
<p>A good hire, I defined as somebody who will ramp-up, contribute meaningfully, and continue to grow in the team.</p>
<p>One thing that stuck to me is that a candidate should be “smart”. But, in hiring, I should be able to have an objective criteria that’s applied across the candidates. So I began the journey of delving deep of what’s smart in the context of software engineering.</p>
<p>I found that measuring just IQ is not a comprehensive set of measurements. Just being smart is not enough to be a good software engineer. So the smartness here needs to be contextualized in software engineering. But, it got close to home to what people understood a smart person is. So I just stuck with the term but slap-on the software engineering prefix, hence <em>software engineering IQ</em>.</p>
<p>We’re actually looking for traits that a person demonstrates. To be more precise, a set of traits. After doing personal research and thinking, I decided the traits that embodies a smart engineer boils down to 3 dimensions:</p>
<ul>
<li>Problem solving</li>
<li>Strong mental model capacity</li>
<li>Sound logic</li>
</ul>
<p>Mental model is the capability to represent a reality internally in the brain which entails being able to conduct mental gymnastic on those representation. The analogy I frequently use is given a box of 6 sides and 6 colors, if I give you a sequence of flips and I ask you what’s the color on the top side, that’s the mental capabilities.</p>
<p>A practical example why this matters is, says one of the upstream service dependency failed which cause our service to fail as well. We need to be able to reason quickly how does that service failure cause our outage.</p>
<p>This is why I think a lot of people misunderstand “Leetcode” question used in the interviews. Though I hate the term “Leetcode” as a replacement for data structures and algorithm questions.</p>
<p>I think, the number one reason why people hate Leetcode in interview setting is because of lazy interviews which only took question(s) from the bank, threw it to candidates, and testing whether they can solve the problem or not. Similar to “can a monkey climb?”</p>
<p>TODO: fill the rest</p>]]></content>
    <category term="hiring" />
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>Why Smaller, Stacked PRs Work (even with merge conflicts!)</title>
    <link href="https://hasansiregar.com//posts/smaller-stacked-pr" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/smaller-stacked-pr</id>
    <updated>2025-09-23T00:00:00.000Z</updated>
    <published>2025-09-23T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">Benefits of smaller, stacked pull requests in software development.</summary>
    <content type="html"><![CDATA[
<blockquote><p>Starts with concrete, tactical, and practical point of discussion. See at the bottom for foundational principles and values.</p></blockquote>
<p>Recently our team started making smaller PRs and stacking them. Here is my reasoning on justifying why smaller PRs is better than a big(ger) one even with several administrative overheads as mentioned below.</p>
<h3>Here are the pros:</h3>
<ul>
<li>Reduce the chunk of focus block the reviewer (me :smile:) needed to carve out of their time</li>
<li>Get the PR reviewed faster (and merged faster) enabling faster feedback cycle (and less context switch in-terms of days)</li>
</ul>
<h3>Cons:</h3>
<ul>
<li>Requires some thinking on how to split the code into reasonable chunks</li>
<li>PR stacking yield merge conflict</li>
</ul>
<p>1st cons aint real. Provides better structured thinking and better code isolation and responsibility. In blunt context, reduce the chance of spaghetti code because the stubbed out code provides strong separation of concern needed that just this part of currently implemented code (skeleton code) is sufficient enough to produce good understanding of what is it doing without the underlying implementation details.</p>
<h2>Tactical Tips</h2>
<h3>1. Direction of Change</h3>
<ul>
<li>You can start bottom-up such as DDL, domain, data layer.
<ul>
<li>Pros: you build from smaller building blocks. So nothing get stub out and everything is concrete.</li>
<li>Cons: Sometimes bottom up is hard because the read/write pattern is not clear.</li>
</ul>
</li>
<li>Can start top-down from Routes + Service:
<ul>
<li>Pros: clear read/write pattern yields more focused responsibility on data layer</li>
<li>Cons: stubbed out code, Pagination may be unwieldy to stub</li>
</ul>
</li>
</ul>
<p>2nd cons is something that I’d trade for the pros listed. Of course it’s biased as it helps me review code faster. But I still think let say just the sake of getting code merged faster is already a plus for everybody. Plus the rest of pros laid out above</p>
<h3><strong>2. Separate Refactoring from Features</strong></h3>
<p>A common cause of huge PRs is mixing a large refactor with a new feature. The rule should be:</p>
<ul>
<li><strong>PR #1:</strong> The refactoring. (e.g., “Refactor Service Layer to use new pattern”).</li>
<li><strong>PR #2:</strong> The new feature, built on top of the refactored code.</li>
</ul>
<h3><strong>3. Use Feature Flags</strong></h3>
<p>For large, multi-day features, the work should be done behind a feature flag. This allows developers to merge incomplete, incremental PRs into the main branch without affecting users. The 1000-line feature can be broken down into 2–3 coherent, digestible PRs.</p>
<h2>Principles &amp; Values</h2>
<h3>1. Short(en) Feedback Cycle</h3>
<p>Short(er) cycle for feedback is fundamentals for developer experience. Getting feedback early enables us to iterate changes more frequently which reduce risks of diverting too far from the correct “line” (note, nobody knows what’s the correct “line“, but we can move in smaller steps in what we think is better that current position).</p>
<p>Short(er) feedback cycle also reduce context switching as PRs get reviewed in 2 days, instead of 4 days later when we’ve moved on to another feature we’re working on with another set of contextual business domain that we need to keep track mentally in our working memory.</p>
<p>This can be achieved by reviewing PRs immediately. But, most of reviewers don’t have a good chunk of 2 hours of highlyfocused block in their day to review a PR of 1,000 lines of <strong>reviewable</strong> code (includes production, tests, and boilerplate; excludes generated code, dependencies, and large data files). So it’s important for software engineers to be able to split their work into smaller, digestible chunk of PRs with various tactical tips laid out above (<a href="https://quip-apple.com/zU4LAmRiYb9S#temp:C:fZH193e08e5605f479bb8cf4de0f" rel="noopener noreferrer" target="_blank">Tactical Tips</a>).</p>
<blockquote><p><a href="https://mtlynch.io/human-code-reviews-1/#start-reviewing-immediately" rel="noopener noreferrer" target="_blank">https://mtlynch.io/human-code-reviews-1/#start-reviewing-immediately</a></p></blockquote>
<p>Based on multiple researches such as <a href="https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/" rel="noopener noreferrer" target="_blank">SmartBear — best practices for peer code review</a>, reviewer takes about 1 hour per 500 LoC reviewed. Any rates faster than that, it shows a significant drop in defect density.</p>
<blockquote><p>Reviewer takes about 1 hour per 500 LoC reviewed.</p></blockquote>]]></content>
    <category term="culture" />
    <category term="software-engineering" />
  </entry>
  <entry>
    <title>What people misunderstood about &quot;Leetcode-style&quot; questions in interviews</title>
    <link href="https://hasansiregar.com//posts/what-people-misunderstood-about-leetcode" rel="alternate" type="text/html"/>
    <id>https://hasansiregar.com//posts/what-people-misunderstood-about-leetcode</id>
    <updated>2025-09-23T00:00:00.000Z</updated>
    <published>2025-09-23T00:00:00.000Z</published>
    <author>
      <name>Ahmad Hasan Siregar</name>
    </author>
    <summary type="text">Why people hate Leetcode questions in interviews.</summary>
    <content type="html"><![CDATA[
<p>The primary reasons, as far as I observed, on the hate of Leetcode-style questions in interview are it’s not used in the job, it takes time to learn and away from the job itself.</p>
<p>I think the this is understandable and reasonable. What I’d like to propose is the one reason why these hate came up to be are caused by <em>lazy interviewers</em> which I assume they took question(s) from the bank and threw it to the candidate. Test whether they can climb them as expected or not.</p>
<p>I already disliked the term “Leetcode question” itself as a replacement for data structure &amp; algorithm question.</p>
<p>It’s not about whether the candidate can arrive to the finish line or not. Rather, we should be looking at the <em>delta</em>. That is, given starting point and a hard situation, i.e. the question at hand, how far can the candidate arrive at the finish line.</p>
<p>The candidate who has the highest delta should be the one selected. I’d propose the delta as the number one measurement because it reflects the work environment the most. Work setting is about having some problems that needs to be solved in a very dynamic environment. You can do a lot of activities to achieve the goals such as code the implementation, design the solution, do the initial PoC to derisk a project, talk to your manager.</p>
<img src="https://hasansiregar.com/_astro/graph-1.D4bdckzn_1Tvzcc.webp" alt="" />
[Excalidraw](https://excalidraw.com/#json=fNrrteV7AON2zdBQL3uDf,-ofYKZJLRxJsiVAQdcUzcg)
<p>All of those activities cannot be tested in a constrained 45 minutes interviews. So, instead of testing the real activities, opt to test for the existence of the fundamental, core traits that supports the behaviours we would like to see.</p>
<p>The simplest representation I can think of is we can represent the day-to-day activities we do in work as the circles in red. While the circles in blue are the fundamental, core traits that support the activities.</p>
<p>The core essence of data structure &amp; algorithm (DSA) questions are to test the fundamentals of the candidates in hope that it’ll cover enough ground for the downstream day-to-day activities.</p>
<p>But, Leetcode “practicioner” rip out that essence from (DSA) questions and make it so it’s like a tree monkey climbing simulator. It’s like a industrialized version of a hand-made crafts.</p>
<p>There’s also another dimension of the question being “too pure” or too far from the practical skills applied daily.</p>
<p>Hence, conducting these kind of interviews is actually hard. First, the interview skill issue. Second, the nature of question being too far away from practical day-to-day skills.</p>
<p>With all of the context at hand, I would propose a solution for the 2nd problem we have at hand. First, we should understand what’s the requirements for the actual technical skills involved. Second, take one abstraction level higher from that layer of technical skills.</p>
<img src="https://hasansiregar.com/_astro/graph-2.Bc0oyO4D_Z1GbHiG.webp" alt="" />
[Excalidraw](https://excalidraw.com/#json=fNrrteV7AON2zdBQL3uDf,-ofYKZJLRxJsiVAQdcUzcg)
<p>Using the same simplified representation of people activities, skills, and traits, instead of testing for the root nodes which is 2 level away, we test for the circles in blue, which is 1 level away from practical day-to-day skills.</p>
<p>To make it concrete…</p>
<p>Recently we need to hire a <a href="/software-engineering-iq/">frontend engineer</a> with Typescript and React tech stacks. What I asked is React State Tree Traversals of components are represented as tree, how state propagates from top to bottom, calculating final state renders, and updating those states. It’s a simplified version of how React manage states.</p>
<p>I can ask the candidate to implement a website. That’ll take a while, but it’ll test whether they can use React or not. But not much signal besides that. We’re not sure of how far their debugging skills, their thinking capacity, etc.</p>
<p>One abstraction higher on that is testing whether they understood React internal working. How are the states being managed in React? Understand the inner principle, the initial reasoning why it the way it is is crucial on seeing whether the candidate has a strong reasoning skills. Being able to model a tree, doing “mental gymnastic” on the tree test whether the candidate has a strong mental model skill.</p>
<p>TODO: refine</p>]]></content>
    <category term="hiring" />
    <category term="software-engineering" />
  </entry>
</feed>