<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tools on Vedant Andhale</title>
    <link>https://www.vedant.me/tags/tools/</link>
    <description>Recent content in Tools on Vedant Andhale</description>
    <image>
      <url>https://www.vedant.me/</url>
      <link>https://www.vedant.me/</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 10 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.vedant.me/tags/tools/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A small tool should finish one job</title>
      <link>https://www.vedant.me/notebook/notes-on-shipping-small-tools/</link>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.vedant.me/notebook/notes-on-shipping-small-tools/</guid>
      <description>How to scope a useful internal tool: one input, one outcome, explicit failures and a short path to feedback.</description>
      <content:encoded><![CDATA[<p>A small tool starts to become useful when you can finish this sentence: “Give it this input, and it will produce this result.” If the sentence needs three exceptions and a tour of the interface, the first version probably has too much in it.</p>
<p>For a CSV-checking tool, that promise might be: upload a file and get a list of rows that cannot be imported. It does not need a dashboard, accounts or a scheduling system to prove that the check helps.</p>
<h2 id="define-the-failure-output-too">Define the failure output too</h2>
<p>The successful path is usually obvious. The more important design work is deciding what happens when the file has no header, the encoding is unexpected, or the same identifier appears twice.</p>
<p>A message such as <code>Invalid file</code> sends the work back to the user. “Row 18: customer_id is empty” gives them something to fix. If the tool changes data, show the proposed change before making it and preserve enough information to undo it.</p>
<p>I like a first-version checklist with four items:</p>
<ul>
<li>One supported input format, documented with a real example.</li>
<li>One result that the user can inspect or download.</li>
<li>Errors that identify the failed input and the next step.</li>
<li>A short explanation of what the tool does not handle yet.</li>
</ul>
<h2 id="put-it-in-the-actual-workflow">Put it in the actual workflow</h2>
<p>The right interface depends on where the work already happens. A command-line script can be enough for a developer. A browser form may be the better choice for someone who would otherwise ask a developer to run the script.</p>
<p>Before adding features, watch whether the output is used. Does the person fix the flagged rows? Do they copy the result into another system? Is there a repetitive step immediately before or after it?</p>
<p>That feedback gives the next version a reason to exist. “Add authentication” is a task. “Let three colleagues use the checker without sharing files through me” is a problem you can design around.</p>
<p>The first release does not need to look unfinished. Clear labels, predictable keyboard behaviour and a readable result are part of doing the one job well.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
