<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Idea on Noetic Nought</title>
    <link>https://punchagan.muse-amuse.in/tags/idea/</link>
    <description>Recent content in Idea on Noetic Nought</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>© 2006-2026 CC-BY-SA-4.0</copyright>
    <lastBuildDate>Tue, 23 Apr 2019 07:52:00 +0530</lastBuildDate>
    <atom:link href="https://punchagan.muse-amuse.in/tags/idea/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Thoughts on Technical Debt</title>
      <link>https://punchagan.muse-amuse.in/blog/thoughts-on-technical-debt/</link>
      <pubDate>Tue, 23 Apr 2019 07:52:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/thoughts-on-technical-debt/</guid>
      <description>&lt;p&gt;I recently watched &lt;a href=&#34;https://www.youtube.com/watch?v=pqeJFYwnkjE&#34;&gt;this short video by Ward Cunningham&lt;/a&gt; where he reflects on the&#xA;history, motivation for, and common misunderstandings of the term Technical&#xA;debt.&lt;/p&gt;&#xA;&lt;p&gt;This post is just some of my reflections on Technical debt, based on ideas and&#xA;thoughts from &lt;a href=&#34;https://en.wikipedia.org/wiki/Ward%5FCunningham&#34;&gt;Ward Cunningham&lt;/a&gt;, &lt;a href=&#34;https://martinfowler.com/&#34;&gt;Martin Fowler&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Robert%5FC.%5FMartin&#34;&gt;Uncle Bob&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-technical-debt&#34;&gt;What is Technical Debt?&lt;/h2&gt;&#xA;&lt;p&gt;Ward Cunningham coined the &amp;ldquo;Techincal Debt&amp;rdquo; metaphor &amp;ndash; he used the metaphor to&#xA;explain the idea of shipping something with a limited understanding of the&#xA;problem, in the hope of gaining a better understanding as more people interact&#xA;with the shipped code.&lt;/p&gt;&#xA;&lt;p&gt;The difference between the understanding of the problem and how the code models&#xA;it is going to slow down the developers. This &amp;ldquo;slowing down&amp;rdquo; is equivalent to&#xA;paying interest, until we take out the time to refactor the code to accurately&#xA;reflect the current understanding of the problem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-take-on-technical-debt&#34;&gt;Why take on Technical Debt?&lt;/h2&gt;&#xA;&lt;p&gt;When Cunningham says debt, he means shipping code with a partial, unclear or&#xA;even incorrect understanding of the problem and how it should be modeled. You&#xA;are willing to get the code out of the door, to improve this understanding.&lt;/p&gt;&#xA;&lt;p&gt;With borrowed money, sometimes you can do something sooner than you would&#xA;otherwise. Similarly, rushing software out the door can help us get some&#xA;experience with it, which would help gain a better understanding and improve the&#xA;software.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-mess-is-not-a-debt-or-is-it&#34;&gt;A mess is not a debt, or is it?&lt;/h2&gt;&#xA;&lt;p&gt;Cunningham says that people confuse messily written code with technical debt. He&#xA;is of the opinion that messy code isn&amp;rsquo;t technical debt. He&amp;rsquo;s never in favor of&#xA;shipping bad or messy code. He emphasizes that code that&amp;rsquo;s shipped should always&#xA;be clear enough to refactor easily, when required, even if it doesn&amp;rsquo;t model our&#xA;current understanding of the problem very accurately.&lt;/p&gt;&#xA;&lt;p&gt;Uncle Bob also has a post, on similar lines, where he says, &lt;a href=&#34;https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt&#34;&gt;a mess is not a&#xA;technical debt&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Martin Fowler, on the other hand, argues that the debt metaphor is a useful&#xA;metaphor to think about and to communicate problems in code &amp;mdash; especially to&#xA;non-technical people &amp;mdash; irrespective of the reason for the problem.&lt;/p&gt;&#xA;&lt;p&gt;Not shipping messy code makes sense. But, the debt metaphor is a useful tool to&#xA;talk about existing &amp;ldquo;messy&amp;rdquo; code, compared to just calling it messy code.&#xA;Looking at it as a debt lets you think about whether or not it&amp;rsquo;s worth paying&#xA;off, and if so when, etc. The Technical Debt Quadrant (explained below) further&#xA;classified this debt into 4 classes, which makes it even more useful to identify&#xA;bad code as debt.&lt;/p&gt;&#xA;&lt;h2 id=&#34;technical-debt-quadrant&#34;&gt;Technical Debt Quadrant&lt;/h2&gt;&#xA;&lt;p&gt;Martin Fowler came up with a &lt;a href=&#34;https://martinfowler.com/bliki/TechnicalDebtQuadrant.html&#34;&gt;Technical Debt Quadrant&lt;/a&gt; which incorporates other&#xA;kinds of debt, along with the one Ward Cunningham originally defined.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://martinfowler.com/bliki/images/techDebtQuadrant.png&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Fowler comes up with two kinds of divisions of debt &amp;mdash; Reckless vs Prudent and&#xA;Inadvertent vs Deliberate.&lt;/p&gt;&#xA;&lt;p&gt;When Ward says he&amp;rsquo;s against writing bad code, I think he means he&amp;rsquo;s never for&#xA;taking on reckless debt. Uncle Bob&amp;rsquo;s mess is also what Fowler would call&#xA;Reckless debt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reckless-Deliberate&lt;/strong&gt; debt is code written out of not caring enough about the&#xA;code, or not stopping to think about everything that&amp;rsquo;s going on with the code,&#xA;or just being mentally lazy. Code-reviews seem like one good way to avoid this&#xA;kind of debt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reckless-Inadvertent&lt;/strong&gt; debt is something that&amp;rsquo;s hard to prevent. It sounds like&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=GiPe1OiKQuk&#34;&gt;unknown-unknowns&lt;/a&gt; territory to me. The developers or the team would probably&#xA;benefit from improving their general design skills and/or getting some external&#xA;help as consultants, etc.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prudent-Deliberate&lt;/strong&gt; debt is what Ward talks about, I think, in his video. You&#xA;know your understanding is not good enough, but you aren&amp;rsquo;t yet sure what&amp;rsquo;s the&#xA;right design is. You may gather more knowledge about the problem while the&#xA;software is out there in the wild and being used.&lt;/p&gt;&#xA;&lt;p&gt;Ward talks about better understanding. But, you may not always realize that your&#xA;understanding is incomplete, when you are shipping the code. This I think would&#xA;put it in the 4th quadrant - &lt;strong&gt;Prudent-Inadvertent&lt;/strong&gt; debt.&lt;/p&gt;&#xA;&lt;h2 id=&#34;is-everything-tech-debt&#34;&gt;Is everything tech debt?&lt;/h2&gt;&#xA;&lt;p&gt;The Tech Debt quadrant seems to make a lot of things seem to fit into the debt&#xA;metaphor, but there are some things that I&amp;rsquo;m not sure about.&lt;/p&gt;&#xA;&lt;p&gt;For example, it can be a significant time investment to update dependencies.&#xA;Often, teams don&amp;rsquo;t update dependencies until it becomes absolutely essential &amp;mdash;&#xA;&amp;ldquo;don&amp;rsquo;t fix what ain&amp;rsquo;t broken&amp;rdquo;. This strategy of postponing of updates, to use&#xA;the time for other things, seems like taking on a debt. But, I&amp;rsquo;m not sure which&#xA;quadrant to put it into.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-should-i-care&#34;&gt;Why should I care?&lt;/h2&gt;&#xA;&lt;p&gt;Just calling code messy isn&amp;rsquo;t really qualifying the mess, and helping us talk&#xA;about how to tackle it. Thinking about debt while taking decisions seems&#xA;helpful, especially with further classification of debt into the 4 quadrants.&lt;/p&gt;&#xA;&lt;p&gt;It helps think about whether we&amp;rsquo;d like to pay off debts we have taken, and to&#xA;communicate with non-technical people the kind of &amp;ldquo;maintenance&amp;rdquo; or refactoring&#xA;work we plan to take up, and why it is important to do so. The deliberate debt&#xA;concept can be used to think and communicate about things we aren&amp;rsquo;t dealing&#xA;with, right now, in the interest of shipping software quicker.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keeping-track-and-repaying-debt&#34;&gt;Keeping track and repaying debt&lt;/h2&gt;&#xA;&lt;p&gt;If a debt is something we can take on deliberately, and we can take on multiple&#xA;such debts, what would be a good way to keep track of these debts?&lt;/p&gt;&#xA;&lt;p&gt;Keeping a list of these debts that we periodically review, seems like a good&#xA;idea. We check if our understanding has improved from the time we took on a&#xA;debt, and take out time to incorporate it back into the code.&lt;/p&gt;&#xA;&lt;p&gt;This list could just be a bunch of FIXMEs in the code with some detailed&#xA;explanation of the debt, and why it was required, or just a list of issues in&#xA;the issue tracker with a special tag to make it easy to find them.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;div style=&#34;font-size:small;&#34; class=&#34;reviewers&#34;&gt;&#xA;  &lt;div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Thanks to &lt;a href=&#34;https://baali.muse-amuse.in&#34;&gt;Shantanu Choudhary&lt;/a&gt; and &lt;a href=&#34;https://vkrishnaswam.github.io/&#34;&gt;Vivek Krishnaswamy&lt;/a&gt; for reading drafts of this post&#xA;and giving helpful suggestions.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Reading-time based scheduling</title>
      <link>https://punchagan.muse-amuse.in/blog/reading-time-based-scheduling/</link>
      <pubDate>Mon, 06 Jun 2016 00:00:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/reading-time-based-scheduling/</guid>
      <description>&lt;p&gt;I had posted a link to an poem written on Medium on a Slack channel that I use&#xA;with friends.  A friend said that she liked the fact that the Slack article&#xA;preview had the reading time from Medium in it.  She could decide whether or&#xA;not she wanted to read the poem or any other article at that moment.&lt;/p&gt;&#xA;&lt;p&gt;This gave me the idea for a reading time extension for my &lt;a href=&#34;https://www.chromium.org/getting-involved/download-chromium&#34;&gt;browser&lt;/a&gt;, or my &lt;a href=&#34;https://github.com/skeeto/elfeed&#34;&gt;feed&#xA;reader&lt;/a&gt; or my &lt;a href=&#34;https://pinboard.in&#34;&gt;bookmarks&lt;/a&gt; &amp;ndash; my reading list.  The first version should be able to&#xA;compute or extract the reading time for an article or a tab in my browser, and&#xA;index them.  I want to be able to specify the amount of time I will be able to&#xA;spend reading, and be presented with something from my reading list.  I think&#xA;this would help with scheduling the reading of longer articles, and also to&#xA;actually help me get through my reading list.&lt;/p&gt;&#xA;&lt;p&gt;Reading time estimates that use heuristics based on word-count may not really&#xA;work, and may do &lt;a href=&#34;https://medium.com/@fchimero/this-should-only-take-a-minute-or-four-probably-e38bb7bf2adf#.mvkd09m6m&#34;&gt;more harm than good&lt;/a&gt;.  But, it may still be worth a try to see&#xA;if it helps my reading habits in any way.  A quick search pointed me to &lt;a href=&#34;https://chrome.google.com/webstore/detail/readism-article-reading-t/bmiolhceebkeljaikojgcoeefblcihje&#34;&gt;this&#xA;extension&lt;/a&gt;, that can give the reading time for any page but doesn&amp;rsquo;t really do&#xA;what I want.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Recurse Center, 2014-06-11</title>
      <link>https://punchagan.muse-amuse.in/recurse-center/recurse-center-2014-06-11/</link>
      <pubDate>Wed, 11 Jun 2014 15:02:11 -0400</pubDate>
      <guid>https://punchagan.muse-amuse.in/recurse-center/recurse-center-2014-06-11/</guid>
      <description>&lt;h2 id=&#34;plan&#34;&gt;Plan&lt;/h2&gt;&#xA;&lt;p&gt;Continue with the Haskell tutorials, with additional reading from&#xA;Real World Haskell.&lt;/p&gt;&#xA;&lt;h2 id=&#34;actual&#34;&gt;Actual&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Finished exercises 4 and 5.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Learnt about Type classes in Haskell and how to create them and&#xA;make data types instances of them.&lt;/li&gt;&#xA;&lt;li&gt;Also came across a new algorithm of sieving called the &lt;a href=&#34;http://en.wikipedia.org/wiki/Sieve_of_Sundaram&#34;&gt;Sieve of&#xA;Sundaram&lt;/a&gt;, which was discovered by a student.  Surprisingly, I&#xA;never heard of it before!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;miscellaneous&#34;&gt;Miscellaneous&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A few of us had an interesting discussion about various places&#xA;people grew up in and visited, and the cultures, etc.&lt;/li&gt;&#xA;&lt;li&gt;Idea: implement a GitHub dashboard for organizations (say, HS&#xA;batches) that give you different statistics, and interesting&#xA;graphs. (Use elm?) [Update: Tom is working on HS and GitHub&#xA;integration. So, that&amp;rsquo;s perfect!]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Scraping Google Groups</title>
      <link>https://punchagan.muse-amuse.in/blog/scraping-google-groups/</link>
      <pubDate>Tue, 31 Dec 2013 00:00:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/scraping-google-groups/</guid>
      <description>&lt;p&gt;I was playing around with a few ideas for creating a timeline for the&#xA;mumbai ultimate group, and as a part of playing around with stuff, for&#xA;that idea, I ended up wanting to scrape all the emails on our google&#xA;group.  After looking around a little bit, I failed to find anything&#xA;that claims to be able to do this.&lt;/p&gt;&#xA;&lt;p&gt;So I ended up writing my own &lt;a href=&#34;https://gist.github.com/punchagan/7947337&#34;&gt;hacky script&lt;/a&gt; to download all the emails&#xA;sent on the group.  Like I said, this is a hack and can be improved&#xA;quite a bit, but I am not inclined to do anything about it, right&#xA;now.  Since, everything about google groups is ajaxy, this script uses&#xA;selenium and does things on the page, that one would do by hand.  It&amp;rsquo;s&#xA;not something that I am proud of, but it does the job!&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Pair Blogging</title>
      <link>https://punchagan.muse-amuse.in/blog/pair-blogging/</link>
      <pubDate>Sun, 08 Aug 2010 00:00:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/pair-blogging/</guid>
      <description>&lt;p&gt;I like the idea of pair blogging. Cate and Sacha, seem to be doing&#xA;it (intentionally or not). One person blogs on a topic he/she&amp;rsquo;s&#xA;presently thinking about and the other person posts his/her views&#xA;on the same issue.  Well, comments are meant for that, but a blog&#xA;post seems to give you greater freedom.&lt;/p&gt;&#xA;&lt;p&gt;PS: I called it pair-blogging. I don&amp;rsquo;t know if it already has a&#xA;name or if pair-blogging means something else.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Change &amp; Free flow</title>
      <link>https://punchagan.muse-amuse.in/blog/change-free-flow/</link>
      <pubDate>Fri, 30 Jul 2010 00:00:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/change-free-flow/</guid>
      <description>&lt;p&gt;No.  Not the Obama change.  I&amp;rsquo;m talking of change as in small&#xA;denominations of cash.  Everybody is reluctant to part with&#xA;it.  There&amp;rsquo;s always a problem with getting it.  I&amp;rsquo;m often worried&#xA;before getting into a bus or an auto, or going to a shop whether&#xA;or not the guy would give me change for a 50, 100 or a 500.&#xA;People so reluctant to &amp;ldquo;part&amp;rdquo; with it. What are they saving it&#xA;for?&lt;/p&gt;&#xA;&lt;p&gt;I think the situation would be much better if people readily gave&#xA;it, when required.  There would be a free flow and if not anything&#xA;more, I wouldn&amp;rsquo;t have to worry about it when going somewhere.&#xA;But, I &amp;ldquo;feel&amp;rdquo; this would actually reduce the instances when both&#xA;the parties don&amp;rsquo;t have enough change with them. What do you think?&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Competition and Population</title>
      <link>https://punchagan.muse-amuse.in/blog/competition-and-population/</link>
      <pubDate>Fri, 30 Jul 2010 00:00:00 +0530</pubDate>
      <guid>https://punchagan.muse-amuse.in/blog/competition-and-population/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve often got bad service from &amp;ldquo;service providers&amp;rdquo; - hotels,&#xA;restaurants, phone services, Internet services etc. I guess that&amp;rsquo;s&#xA;due to the population in India. If one customer goes back unhappy&#xA;that doesn&amp;rsquo;t really make a difference, because there would be&#xA;hundred others already waiting in the queue.&lt;/p&gt;&#xA;&lt;p&gt;You, as a, service provider would get your share of customers and&#xA;profits, no matter how bad you are. Thanks to the population.&lt;/p&gt;&#xA;&lt;p&gt;One solution could be, to write about the bad service you got from&#xA;a provider and make people aware of it, but often there aren&amp;rsquo;t&#xA;enough options, for others to choose from. Inevitably, the bad&#xA;service provider is going to get some customers. What&amp;rsquo;s the way&#xA;out?&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
