<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>TwinStack Studio — Writing</title>
    <link>https://twinstackstudio.com/blog</link>
    <description>Practical writing on web applications, computer vision, machine learning, chatbots and NLP, AI automation, e-commerce, deep learning and dashboards.</description>
    <language>en</language>
    <lastBuildDate>Fri, 16 Oct 2026 09:00:00 GMT</lastBuildDate>
    <atom:link href="https://twinstackstudio.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to write a software brief a studio can actually quote</title>
      <link>https://twinstackstudio.com/blog/writing-a-brief-a-studio-can-quote</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/writing-a-brief-a-studio-can-quote</guid>
      <pubDate>Fri, 16 Oct 2026 09:00:00 GMT</pubDate>
      <category>Process</category>
      <description>"We need an app like Uber" cannot be priced honestly. A one-page brief that names the users, the three jobs the software must do and the deadline can. Here is what to put in it.</description>
      <content:encoded><![CDATA[<p>Quotes for the same software idea can vary by ten times. Usually that is not because one studio is greedy and another is cheap; it is because each one imagined a different product. A short, clear brief makes quotes comparable and saves weeks of back and forth.</p><p>It does not need technical language. It needs the facts only you know about your business.</p><h2>What to put in one page</h2><ul><li>The problem: what is slow, expensive or impossible today, in two or three sentences.</li><li>The users: who will use it (customers, staff, managers, drivers) and roughly how many of each.</li><li>The must-have jobs: the three to five things the first version must do. Everything else is a wish list.</li><li>What exists already: current software, spreadsheets, payment providers, anything the new system must connect to.</li><li>Where it runs: website, phone app, both, or an internal tool on office computers.</li><li>Deadline and why: a launch event, a season, a contract date.</li><li>Budget range: even a rough range lets a studio propose the right size of first version.</li></ul><figure><img src="/blog/writing-a-brief-a-studio-can-quote-figure.jpg" alt="A one-page brief template with seven labelled sections: problem, users, must-have jobs, existing systems, platform, deadline and budget range." loading="lazy" /><figcaption>Seven short sections are enough for an honest first estimate.</figcaption></figure><h2>Must-haves versus the wish list</h2><p>The most useful thing a brief can do is separate what the first version needs from what would be nice later. A focused first version launches sooner, gets real feedback, and makes the second version better informed.</p><table><caption>An example split for a delivery business (illustrative only).</caption><thead><tr><th>First version</th><th>Later</th></tr></thead><tbody><tr><td>Customers place and track orders</td><td>Loyalty points</td></tr><tr><td>Riders see and update their deliveries</td><td>Route optimisation</td></tr><tr><td>Staff manage orders and riders</td><td>Detailed analytics</td></tr><tr><td>Cash on delivery and one online payment</td><td>Wallet and referral credits</td></tr></tbody></table><h2>Why a budget range helps you</h2><h3>What a range lets a studio do</h3><p>Sharing a range can feel like giving away a negotiating position. In practice it lets a studio tell you honestly what fits: the full idea, a smaller first version, or a different approach such as an existing platform with a few custom parts. Without it, every quote is a guess at what you meant.</p><h2>What a good studio should send back</h2><ul><li>Questions: a good reply asks about the parts you left unclear rather than guessing.</li><li>A written scope: what is included, what is not, and what counts as a change.</li><li>Stages with something you can see and use at each one.</li><li>What happens after launch: fixes, hosting, ownership of code and accounts.</li></ul><blockquote><p>A brief does not need to be long. It needs to be specific about the few things only you know.</p></blockquote><h2>Frequently asked questions</h2><h3>Should we include designs or sketches?</h3><p>If you have them, yes. Even photos of hand-drawn screens or screenshots of apps you like help a lot. They are not required.</p><h3>Do we need to sign an NDA first?</h3><p>For most ideas a short description is enough to get a first estimate. If the details are sensitive, ask for an NDA before sharing them; any serious studio will sign one.</p><h3>Fixed price or hourly?</h3><p>Fixed price per stage works well when the scope is clear. Hourly suits ongoing work and projects that will change a lot as you learn. Many projects use fixed stages first, then a monthly plan.</p><h3>How quickly will we get a quote?</h3><p>For a clear one-page brief, usually within a few working days, often after one short call to clear up open questions.</p><aside><h3>Send this, get a quote</h3><p>One page: the problem, the users, three to five must-have jobs, what exists, where it runs, the deadline and a budget range. That is enough for an honest quote.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Dashboards people actually open</title>
      <link>https://twinstackstudio.com/blog/dashboards-people-actually-open</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/dashboards-people-actually-open</guid>
      <pubDate>Tue, 13 Oct 2026 09:00:00 GMT</pubDate>
      <category>Data analytics</category>
      <description>A dashboard with forty charts is opened once. One that answers the three questions a manager asks every Monday is opened every Monday. Start from the decision, not the data.</description>
      <content:encoded><![CDATA[<p>Many dashboards are built by connecting a database and charting every column. The result looks thorough, and it is rarely used. People do not open a dashboard to browse; they open it to answer a question and decide what to do next.</p><h2>Start with the Monday questions</h2><p>Before any chart, we ask each person who will use the dashboard what they need to know each week and what they do with the answer.</p><ul><li>Sales manager: are we ahead or behind target this month, and which branch is pulling us down?</li><li>Store manager: which items will run out before the next delivery?</li><li>Finance: which customers owe the most, and for how long?</li><li>Owner: is this month better than the same month last year?</li></ul><h2>One screen, top to bottom</h2><ul><li>Top: three to five headline numbers, each compared with target or last period.</li><li>Middle: one or two trends that explain the headline numbers.</li><li>Bottom: a short list of things that need action, such as overdue accounts or items running out.</li><li>Everything else goes on a second page or in a filter, not on the first screen.</li></ul><figure><img src="/blog/dashboards-people-actually-open-figure.jpg" alt="A dashboard wireframe: a row of headline numbers with changes, a trend chart below, and a table of items needing action at the bottom." loading="lazy" /><figcaption>Headline numbers, the trend behind them, then what to act on. The rest can wait for page two.</figcaption></figure><h2>Trust comes before design</h2><h3>Agree the definitions</h3><p>The fastest way to kill a dashboard is one wrong number. If the sales figure does not match what accounts reported, nobody will open it again. Before building visuals, we agree definitions in writing and reconcile the numbers with the team.</p><table><caption>Definitions worth agreeing in writing before building any chart.</caption><thead><tr><th>Term</th><th>The question to settle</th></tr></thead><tbody><tr><td>Sales</td><td>Before or after returns, discounts and tax?</td></tr><tr><td>Active customer</td><td>Ordered in the last 30, 60 or 90 days?</td></tr><tr><td>Month</td><td>Calendar month, or the business's own closing date?</td></tr><tr><td>Stock</td><td>In the warehouse only, or including goods in transit?</td></tr></tbody></table><h2>Small details that matter</h2><ul><li>Show when the data was last refreshed, on the page itself.</li><li>Use the currency and number format people use: lakh and crore in Pakistan, not millions.</li><li>Make it readable on a phone, because many managers check it there first.</li><li>Send a short weekly summary by email or WhatsApp with a link, so the dashboard comes to them.</li></ul><blockquote><p>A dashboard is finished when it answers a question someone asks every week, not when every column has a chart.</p></blockquote><h2>Frequently asked questions</h2><h3>Power BI or a custom web dashboard?</h3><p>Power BI is quick to build and familiar to finance teams, with licence costs per user. A web dashboard costs more to build but has no per-user licence and can include actions, such as approving or assigning, not just charts.</p><h3>Our data is in Excel files. Is that a problem?</h3><p>Not at the start. Many dashboards begin from a shared folder of spreadsheets. Once the reports prove useful, moving the data into a proper database makes them faster and more reliable.</p><h3>How often should it refresh?</h3><p>As often as the decisions it supports. Daily is enough for most sales and stock reports; live data is only worth it when someone acts within the hour.</p><h3>Who should own the dashboard after launch?</h3><p>Someone on your side who knows the business. We hand over definitions, data sources and a short guide so they can add filters and pages without us.</p><aside><h3>The checklist</h3><p>Build from the weekly questions, agree definitions before charts, keep the first screen short, and make sure every number matches what the team already trusts.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Urdu and Roman Urdu in software: what works today</title>
      <link>https://twinstackstudio.com/blog/urdu-and-roman-urdu-nlp</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/urdu-and-roman-urdu-nlp</guid>
      <pubDate>Fri, 09 Oct 2026 09:00:00 GMT</pubDate>
      <category>Chatbots &amp; NLP</category>
      <description>Customers write "order kab ayega?" as often as "when will my order arrive?". Language models now handle Roman Urdu and Urdu far better than they did, with a few gaps worth planning around.</description>
      <content:encoded><![CDATA[<p>Messages to Pakistani businesses arrive in a mix of languages. English, Urdu script and Roman Urdu, often in the same sentence: "Mera order abhi tak deliver nahi hua, tracking number send karein". Software that only understands English misses a large share of what customers say.</p><h2>What works well now</h2><ul><li>Understanding intent: modern language models recognise what a Roman Urdu or Urdu message is asking for, even with mixed English words.</li><li>Replying in the customer's language: the same assistant can answer in English, Urdu or Roman Urdu depending on how the customer wrote.</li><li>Sorting messages: complaints, order questions, price questions and sales leads can be separated reliably.</li><li>Summaries: a long Roman Urdu voice-note transcript or chat can be summarised in English for the team.</li></ul><h2>Where the gaps are</h2><ul><li>Spelling: Roman Urdu has no standard spelling. "Kab", "kb" and "kub" all mean the same thing, which hurts simple keyword search.</li><li>Urdu text in scanned documents: reading printed Urdu from images is still much weaker than reading English.</li><li>Speech: transcription of Urdu voice notes is usable but makes more mistakes with names, places and fast speech.</li><li>Smaller models: compact models that run on a modest server handle Roman Urdu less well than the large hosted ones.</li></ul><figure><img src="/blog/urdu-and-roman-urdu-nlp-figure.jpg" alt="Three versions of a customer question in English, Urdu script and Roman Urdu, each with spelling variants, all pointing to one &quot;order status&quot; intent." loading="lazy" /><figcaption>Many spellings, one meaning. Match on meaning, not on exact words.</figcaption></figure><h2>Practical choices</h2><table><caption>Common Urdu and Roman Urdu tasks and the approach that tends to work.</caption><thead><tr><th>Task</th><th>Approach</th><th>Note</th></tr></thead><tbody><tr><td>Search a help centre</td><td>Meaning-based search, not keywords</td><td>Handles spelling variants</td></tr><tr><td>Route WhatsApp messages</td><td>Language model classification</td><td>Test on real messages first</td></tr><tr><td>Reply to customers</td><td>Model replies in the customer's language</td><td>Keep numbers from lookups</td></tr><tr><td>Transcribe voice notes</td><td>Speech model, then a summary</td><td>Check names and amounts</td></tr><tr><td>Read Urdu scanned forms</td><td>Specialised OCR plus review</td><td>Expect manual checks</td></tr></tbody></table><h2>Test with your own messages</h2><h3>Building the test set</h3><p>The best test set is a few hundred real, anonymised messages from your own customers. They carry the spellings, slang and product names that general benchmarks never include. We measure on those before promising anything.</p><blockquote><p>Customers will not switch to English for your software. The software has to meet them in the language they type.</p></blockquote><h2>Frequently asked questions</h2><h3>Can the bot reply in Urdu script?</h3><p>Yes. It can reply in Urdu script, Roman Urdu or English, usually matching the way the customer wrote. Some businesses prefer always replying in one language, which is a simple setting.</p><h3>Do we need to label thousands of messages?</h3><p>Usually not anymore. Large language models understand intent with a short description and a few examples. Labelled messages are mainly needed to test accuracy.</p><h3>What about Punjabi, Sindhi or Pashto?</h3><p>Support is weaker and uneven. We test on real samples before relying on it, and keep a person in the loop for those conversations.</p><h3>Can it understand voice notes in Urdu?</h3><p>Yes, with a speech model that transcribes the voice note first. Accuracy is good for clear speech and weaker with noise, names and fast talking, so important details are checked.</p><aside><h3>What to plan for</h3><p>Understanding and replying in Urdu and Roman Urdu now works well. Plan for spelling variety, weaker Urdu OCR and speech, and test on your own customers' messages.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Deep learning or classic machine learning? A practical way to choose</title>
      <link>https://twinstackstudio.com/blog/deep-learning-or-classic-ml</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/deep-learning-or-classic-ml</guid>
      <pubDate>Fri, 02 Oct 2026 09:00:00 GMT</pubDate>
      <category>Deep learning</category>
      <description>Tables of numbers usually want gradient boosting. Images, sound and free text usually want deep learning. The amount of labelled data and where the model has to run decide the rest.</description>
      <content:encoded><![CDATA[<p>Deep learning gets the headlines, and for good reason: it is what lets software see, listen and read. But it is not the right tool for every prediction. For many business problems a classic method is faster to build, cheaper to run and easier to explain, and it is just as accurate.</p><h2>Start with the shape of the data</h2><ul><li>Tables: rows of customers, orders, transactions, sensor readings with named columns. Classic methods such as gradient-boosted trees are usually the strongest choice.</li><li>Images and video: photos, scans, camera feeds. Deep learning, almost always, usually starting from a pretrained model.</li><li>Audio: calls, voice notes, machine sounds. Deep learning, often a pretrained speech or audio model.</li><li>Free text: emails, reviews, chat messages. Pretrained language models, sometimes with a small classic model on top.</li></ul><figure><img src="/blog/deep-learning-or-classic-ml-figure.jpg" alt="A decision chart: tables lead to gradient boosting, images and audio lead to pretrained deep networks, and text leads to language models, with data size and deployment as the next questions." loading="lazy" /><figcaption>The type of data answers most of the question. Data size and where the model runs answer the rest.</figcaption></figure><h2>Then look at labelled data</h2><p>Deep networks learn a lot from a lot of examples. With a few hundred labelled rows, a classic model or a pretrained network with a small amount of fine-tuning will do better than training anything large from scratch.</p><table><caption>A rough guide to choosing an approach (rules of thumb, not hard limits).</caption><thead><tr><th>Situation</th><th>Usually choose</th><th>Why</th></tr></thead><tbody><tr><td>A few thousand table rows</td><td>Gradient-boosted trees</td><td>Strong, fast, explainable</td></tr><tr><td>A few hundred labelled images</td><td>Fine-tune a pretrained model</td><td>Reuses what it already learned</td></tr><tr><td>Tens of thousands of labelled images</td><td>Fine-tune a larger pretrained model</td><td>Room to learn your specifics</td></tr><tr><td>Free text, few labels</td><td>Pretrained language model</td><td>Understands language out of the box</td></tr><tr><td>Must run on a phone or small device</td><td>Small, compressed model</td><td>Speed and memory limits</td></tr></tbody></table><h2>Where it runs matters as much as accuracy</h2><ul><li>A model behind a website can use a server GPU. A model inside a phone app has to be small and fast.</li><li>A model reading every frame from ten cameras needs very different hardware from one scoring a hundred loan applications a day.</li><li>Training once on a rented GPU is cheap. Running a large model all day, every day, is where the cost really sits.</li></ul><h2>Explainability is a feature</h2><h3>When someone has to act on it</h3><p>When a credit officer or a doctor has to act on a prediction, being able to say why matters. Classic models show which inputs pushed a score up or down quite directly. Deep models can be explained too, but with more effort and less certainty. That alone can decide the choice.</p><blockquote><p>Choose the simplest model that meets the target, on the hardware it will actually run on.</p></blockquote><h2>Frequently asked questions</h2><h3>Do we need our own GPU?</h3><p>For training, usually not: GPUs can be rented by the hour. For running a vision or speech model all day, a GPU on site or a dedicated server is often cheaper than paying per request.</p><h3>Can we train on our own data without sharing it?</h3><p>Yes. Models can be fine-tuned and run entirely on your own hardware, so the data never leaves your network.</p><h3>Is deep learning more accurate?</h3><p>On images, sound and text, by a wide margin. On ordinary business tables, often not; gradient-boosted trees remain hard to beat there.</p><h3>Can you start with one approach and switch later?</h3><p>Yes. We often start with a quick classic model as a baseline and move to a deep model only where the data and the gain justify it.</p><aside><h3>How to decide</h3><p>Tables: start with classic models. Images, audio and text: start from a pretrained deep model. Let data size, hardware and the need to explain decide the details.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Your online store is judged on a mid-range phone</title>
      <link>https://twinstackstudio.com/blog/online-store-on-a-phone-in-pakistan</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/online-store-on-a-phone-in-pakistan</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>E-commerce</category>
      <description>Most shoppers will see your store on an ordinary Android phone over mobile data. Page weight, checkout steps, cash on delivery and order tracking decide whether they buy.</description>
      <content:encoded><![CDATA[<p>Online stores are usually designed on a large monitor over office Wi-Fi. Customers in Pakistan mostly shop on a mid-range Android phone, often over mobile data, often with patchy signal. The store that feels fast in the design review can feel slow and heavy in a customer's hand.</p><h2>Page weight is the first filter</h2><p>Every second of loading loses shoppers. The usual causes are easy to find and fix.</p><ul><li>Images: product photos uploaded straight from a camera at several megabytes each. Resize and serve modern formats such as WebP at the size the screen needs.</li><li>Apps and plugins: each one adds scripts to every page. Remove the ones nobody uses.</li><li>Sliders and videos on the home page that load before the products do.</li><li>Fonts: several families and weights where one or two would do.</li></ul><figure><img src="/blog/online-store-on-a-phone-in-pakistan-figure.jpg" alt="A stacked bar showing what makes up a heavy product page: images, scripts from plugins, fonts and the page itself, with images taking most of the space." loading="lazy" /><figcaption>On most slow stores, oversized images and unused plugin scripts are most of the weight.</figcaption></figure><h2>Make checkout short and familiar</h2><ul><li>Guest checkout. Forcing an account before the first order loses customers.</li><li>Phone number first, with the address filled from the last order for returning customers.</li><li>City as a list, not free text, so delivery charges and courier choice are correct.</li><li>Show the full price, delivery included, before the last step.</li></ul><h2>Cash on delivery is a feature to manage</h2><p>Cash on delivery is still how many customers prefer to pay, and refusing it loses sales. It also brings returns and fake orders. The answer is not to remove it, but to manage it.</p><table><caption>Common cash-on-delivery problems and practical counter-measures.</caption><thead><tr><th>Problem</th><th>Counter-measure</th></tr></thead><tbody><tr><td>Fake or prank orders</td><td>Confirm by WhatsApp or a call before dispatch</td></tr><tr><td>Customer not home</td><td>Send tracking and the rider's expected day</td></tr><tr><td>Refused at the door</td><td>Small discount for paying online in advance</td></tr><tr><td>Repeat refusers</td><td>Flag the number and ask for advance payment next time</td></tr></tbody></table><h2>After the order: tell them where it is</h2><h3>Updates without asking</h3><p>Most "where is my order" messages disappear when customers get updates without asking: order confirmed, dispatched with the courier's tracking number, out for delivery. WhatsApp updates work better than email for most shoppers here.</p><blockquote><p>Test the store on a cheap phone over mobile data. That is the store your customers see.</p></blockquote><h2>Frequently asked questions</h2><h3>Shopify, WooCommerce or a custom store?</h3><p>Shopify is quickest to launch, WooCommerce gives more control on your own hosting, and a custom store makes sense when the business has rules neither handles well, such as complex pricing or tight links to an existing system.</p><h3>Which payment options should we offer?</h3><p>Cash on delivery plus at least one local online option such as a card gateway or a mobile wallet. Bank transfer with a screenshot works for small stores but needs manual checking.</p><h3>How do we know if the store is fast enough?</h3><p>Measure it on a real mid-range phone over mobile data, and with free tools such as PageSpeed Insights. We aim for the product page to be usable within a few seconds on that phone.</p><h3>Should we build a mobile app as well?</h3><p>Usually not at first. A fast mobile website covers most shoppers. An app makes sense later for repeat customers, push notifications and loyalty features.</p><aside><h3>Test it this way</h3><p>Design for a mid-range phone on mobile data: light pages, a short guest checkout, managed cash on delivery and order updates on WhatsApp.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Automate the boring workflow first</title>
      <link>https://twinstackstudio.com/blog/what-to-automate-first</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/what-to-automate-first</guid>
      <pubDate>Wed, 16 Sep 2026 09:00:00 GMT</pubDate>
      <category>AI automation</category>
      <description>The best first automation is rarely the impressive one. It is the copy-and-paste job someone does every morning, that follows clear rules and that nobody will miss doing by hand.</description>
      <content:encoded><![CDATA[<p>When a business first looks at automation, the ideas tend to be big: an AI agent that runs sales, a bot that handles all of support. Those can come later. The automations that pay back fastest are usually small, dull and repeated every single day.</p><h2>Signs of a good first candidate</h2><ul><li>It happens often: daily or many times a week.</li><li>It follows rules someone can write down on one page.</li><li>The inputs arrive in a predictable place: an inbox, a form, a spreadsheet, a WhatsApp number.</li><li>A mistake is easy to spot and cheap to fix.</li><li>The person doing it today would be glad to stop.</li></ul><p>Copying order details from emails into a sheet, sending payment reminders, posting new leads to the sales group, creating a weekly report from three exports: these are the classic first wins.</p><h2>Score the candidates</h2><p>We list every repeated task the team mentions and score each one quickly. It takes an hour and usually makes the first choice obvious.</p><table><caption>A quick way to rank automation ideas (score each 1 to 3; start with the highest total).</caption><thead><tr><th>Question</th><th>1</th><th>3</th></tr></thead><tbody><tr><td>How often does it happen?</td><td>Monthly</td><td>Daily or more</td></tr><tr><td>How clear are the rules?</td><td>Mostly judgement</td><td>Written steps</td></tr><tr><td>How tidy are the inputs?</td><td>Scattered, free text</td><td>One form or one inbox</td></tr><tr><td>Cost of a mistake?</td><td>Money or a customer lost</td><td>A quick correction</td></tr></tbody></table><figure><img src="/blog/what-to-automate-first-figure.jpg" alt="A two-by-two grid with how often a task happens on one axis and how clear its rules are on the other, with the top-right corner marked &quot;start here&quot;." loading="lazy" /><figcaption>Frequent and rule-based: the top-right corner is where first automations pay back.</figcaption></figure><h2>Where AI fits in</h2><p>Plain workflow tools such as n8n handle the moving of data: watch an inbox, call an API, update a sheet, send a message. AI is useful at the messy edges: reading a free-text email, pulling fields from a PDF, transcribing a voice note, sorting a message into the right category.</p><ul><li>Keep the AI step small and checkable: "extract these five fields", not "handle this customer".</li><li>Validate what it returns: dates are dates, amounts add up, required fields are present.</li><li>Send anything that fails validation to a person with the original attached.</li></ul><h2>Keep a human in the loop at first</h2><h3>Approvals first</h3><p>For the first few weeks, the automation prepares and a person approves. The draft reminder is written, the row is filled, the reply is suggested, and someone clicks send. Once the approvals are almost always "yes", that step can be removed for the routine cases.</p><blockquote><p>An automation nobody trusts gets switched off. Earn trust with approvals first, then remove them.</p></blockquote><h2>Frequently asked questions</h2><h3>Do we need to buy a lot of software?</h3><p>Usually not. A workflow tool, which can run on your own server, plus the accounts you already have (email, sheets, WhatsApp Business) cover most first automations.</p><h3>What happens when something breaks?</h3><p>Every workflow we build sends an alert when a step fails and keeps a log of each run, so a broken step is noticed the same day and can be re-run.</p><h3>Can an AI agent do the whole job?</h3><p>For narrow, well-defined jobs, increasingly yes. For anything involving money, promises to customers or judgement, we keep a person approving the important steps.</p><h3>How long does a first automation take?</h3><p>A simple workflow, such as emails to a sheet with an alert, is often a few days including testing. Steps that read documents or voice notes take longer because their output needs checking.</p><aside><h3>Where to begin</h3><p>Pick the frequent, rule-based, low-risk task first. Use AI only for the messy step, validate its output, and keep a person approving until the results earn trust.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>A chatbot that says "I don't know" is worth more than one that guesses</title>
      <link>https://twinstackstudio.com/blog/chatbots-that-say-i-dont-know</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/chatbots-that-say-i-dont-know</guid>
      <pubDate>Fri, 04 Sep 2026 09:00:00 GMT</pubDate>
      <category>Chatbots &amp; NLP</category>
      <description>Customers forgive a bot that hands them to a person. They do not forgive one that invents a refund policy. Here is how we keep business chatbots grounded in what the business actually says.</description>
      <content:encoded><![CDATA[<p>Large language models are very good at sounding right. Ask one about your return policy and it will give a confident, well-written answer, whether or not your business has that policy. For a customer-facing chatbot, that fluency is the risk.</p><p>The goal is not a bot that can talk about anything. It is a bot that answers what the business has written down, does the actions it is allowed to do, and hands everything else to a person.</p><h2>Answer from your documents, not from memory</h2><p>The common pattern is called retrieval-augmented generation. In plain words: when a question comes in, the system first searches your own material (policies, price lists, product pages, FAQs) for the passages that match, and then asks the model to answer using only those passages.</p><ul><li>The bot can quote the policy page it used, so staff can check where an answer came from.</li><li>Updating the bot means updating a document, not retraining a model.</li><li>If the search finds nothing relevant, the bot knows it has no basis for an answer.</li></ul><figure><img src="/blog/chatbots-that-say-i-dont-know-figure.jpg" alt="A flow from a customer question to a search over business documents, then either a grounded answer with a source or a handover to a person." loading="lazy" /><figcaption>Search first, answer from what was found, and hand over when nothing was found.</figcaption></figure><h2>Let rules handle numbers</h2><p>Prices, balances, stock levels and delivery dates should never come from a language model's guess. We fetch them from the real system and give them to the model as facts, or skip the model entirely for those answers.</p><table><caption>Who should answer which kind of question in a business chatbot.</caption><thead><tr><th>Question</th><th>Answered by</th><th>Why</th></tr></thead><tbody><tr><td>What is your return policy?</td><td>Model, from the policy document</td><td>Wording varies, the source is fixed</td></tr><tr><td>Where is my order?</td><td>Order system lookup</td><td>Must be exact and current</td></tr><tr><td>How much is the 2 kg pack?</td><td>Price list lookup</td><td>Prices change, guesses are costly</td></tr><tr><td>I want to complain about a rider</td><td>Handover to a person</td><td>Needs judgement and follow-up</td></tr></tbody></table><h2>Design the handover first</h2><h3>When to hand over</h3><p>The handover to a person is not a failure path; it is a feature. A good one passes the whole conversation along, so the customer never repeats themselves, and it happens early, before the customer gets frustrated.</p><ul><li>Hand over when the search finds nothing, when the customer asks for a person, or when the topic is a complaint, a refund or a legal matter.</li><li>Outside working hours, take the details and promise a callback rather than pretending to resolve it.</li><li>Log every handover. The most common reasons show which documents to write next.</li></ul><blockquote><p>The best measure of a support bot is not how much it answers. It is how rarely it answers wrongly.</p></blockquote><h2>Test it like a customer would</h2><p>Before launch we write a test list of real questions, including the awkward ones: misspellings, Roman Urdu, two questions in one message, questions about competitors, attempts to make the bot promise a discount. Every release is checked against that list.</p><h2>Frequently asked questions</h2><h3>Can it run on WhatsApp?</h3><p>Yes. The same assistant can answer on a website widget and on WhatsApp through the official business platform, with the same documents behind both.</p><h3>Do our documents leave our control?</h3><p>That depends on the model you choose. A hosted model receives the passages it needs for each answer; a self-hosted model keeps everything on your own server, at the cost of running it.</p><h3>Will it ever make something up?</h3><p>The risk can be reduced a lot, never to zero. That is why we limit it to your material, keep numbers in lookups, show sources, and review conversations regularly after launch.</p><h3>How do we keep the answers up to date?</h3><p>By keeping the documents up to date. When a policy or price list changes, the bot uses the new version on the next question; nothing has to be retrained.</p><aside><h3>What good looks like</h3><p>Answer from your documents, fetch numbers from real systems, hand over early, and test with the questions customers really ask.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Computer vision outside the lab: light, angles and the last five percent</title>
      <link>https://twinstackstudio.com/blog/computer-vision-outside-the-lab</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/computer-vision-outside-the-lab</guid>
      <pubDate>Thu, 27 Aug 2026 09:00:00 GMT</pubDate>
      <category>Computer vision</category>
      <description>A detector that scores well on a test set can still fail at the gate at 6 pm. Glare, rain, night, dirty lenses and odd angles are where camera projects are won or lost.</description>
      <content:encoded><![CDATA[<p>Computer vision demos are easy to like. A box appears around every person, car or product, labelled and counted. The hard part starts when the same model has to work on a real camera, mounted where the building allows, through every hour of the day and every season of the year.</p><p>Most of the effort in a camera project goes into the conditions the demo never showed. Planning for them early is cheaper than discovering them after installation.</p><h2>Where models fail in the field</h2><ul><li>Light: low sun straight into the lens, headlights at night, a shop window reflecting the street.</li><li>Weather: rain on the lens, dust in summer, fog in winter mornings.</li><li>Angle: a camera mounted high looks down on objects the model only saw from the front.</li><li>Motion: fast vehicles or people blur at low shutter speeds, especially at night.</li><li>Change: new uniforms, new packaging, a repainted wall, seasonal decorations.</li><li>Hardware: compressed video streams, dropped frames, a camera that reboots at midnight.</li></ul><h2>Collect data from the real camera, early</h2><p>The single most useful step is recording a week or two of footage from the actual camera position before training anything serious. Public datasets and stock images help a model learn what a car or a box looks like. Only your own footage teaches it what your gate looks like at dusk.</p><h3>Picking the hard frames</h3><p>From that footage we pick frames on purpose: the brightest, the darkest, the busiest, the rainiest. A few hundred carefully chosen frames of hard cases often help more than thousands of easy ones.</p><figure><img src="/blog/computer-vision-outside-the-lab-figure.jpg" alt="A grid of camera frames sorted from easy to hard: clear daylight, partial shade, glare, night with headlights and rain on the lens." loading="lazy" /><figcaption>Hard frames are picked on purpose. The model learns most from the cases it gets wrong.</figcaption></figure><h2>Fix it at the camera before the model</h2><p>Some problems are cheaper to solve with hardware than with training data. Before adding more images, we look at the camera itself.</p><table><caption>Field problems and the cheapest fix we usually try first.</caption><thead><tr><th>Problem</th><th>Try first</th><th>Then</th></tr></thead><tbody><tr><td>Glare from low sun</td><td>Move or tilt the camera, add a hood</td><td>Train on glare frames</td></tr><tr><td>Blur at night</td><td>Faster shutter, infrared lighting</td><td>Train on night frames</td></tr><tr><td>Objects too small</td><td>Zoom lens or a second camera closer</td><td>Higher input resolution</td></tr><tr><td>Rain and dust on lens</td><td>Hood and a cleaning schedule</td><td>Flag low-confidence frames for review</td></tr></tbody></table><h2>Design for the frames it will get wrong</h2><p>No vision system is right on every frame. A good one knows when it is unsure and says so. Every prediction carries a confidence score; below a threshold, the frame goes to a person instead of straight into the record.</p><ul><li>Combine several frames: a number plate read the same way on five frames is more trustworthy than one read once.</li><li>Keep a review queue for low-confidence results, and use what people correct as new training data.</li><li>Track accuracy per hour and per camera, so a dirty lens shows up as a drop on one chart, not as a mystery.</li></ul><blockquote><p>A vision system that says "not sure" on one frame in fifty is more useful than one that is confidently wrong on the same frame.</p></blockquote><h2>Frequently asked questions</h2><h3>Can you use our existing CCTV cameras?</h3><p>Often, yes. We first check resolution, frame rate and placement on recorded footage. Some tasks work on ordinary CCTV; small details such as text at a distance may need a better camera.</p><h3>Does it need a GPU on site?</h3><p>Not always. Small models run on a modest computer or an edge device for a few cameras. Many cameras, or heavier models, need a GPU on site or a server the video can reach.</p><h3>How accurate will it be?</h3><p>We only quote a number after testing on footage from your cameras, across day and night. Accuracy on someone else's dataset says little about your gate.</p><h3>What happens when we add a new camera?</h3><p>We record from it for a few days and check accuracy on that footage before switching it on. A new angle or lighting can need a small round of extra training.</p><aside><h3>Before you buy cameras</h3><p>Record from the real camera first, fix what hardware can fix, train on the hard frames, and send uncertain results to a person instead of guessing.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>Before you train a model, beat a spreadsheet</title>
      <link>https://twinstackstudio.com/blog/start-with-a-baseline</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/start-with-a-baseline</guid>
      <pubDate>Fri, 14 Aug 2026 09:00:00 GMT</pubDate>
      <category>Machine learning</category>
      <description>A machine learning project should start with the dumbest method that could work: last month's number, a simple average, a rule someone already uses. If the model cannot beat that, it should not ship.</description>
      <content:encoded><![CDATA[<p>Almost every business that asks for machine learning already has a way of making the same decision. The store manager orders roughly what sold last month. The credit team approves anyone with a salary above a threshold. The planner adds ten percent before Eid. These rules are not glamorous, but they work well enough that the business is still running.</p><p>That existing rule is the bar a model has to clear. Not zero, not a random guess: the thing people already do. We write it down and measure it before anyone trains anything.</p><h2>What a baseline is</h2><p>A baseline is the simplest prediction that makes sense for the problem. It costs nothing to build and it is easy to explain, which is exactly why it is useful.</p><ul><li>Forecasting sales: next week equals the same week last year, or the average of the last four weeks.</li><li>Predicting churn: customers who have not ordered in 60 days will leave.</li><li>Classifying support tickets: a list of keywords mapped to departments.</li><li>Pricing: the median price of similar items listed this month.</li></ul><h2>Why it saves projects</h2><p>Measuring the baseline first changes the conversation. Instead of "the model is 87 percent accurate", which means little on its own, the result becomes "the model cuts forecasting error from 22 percent to 14 percent compared with how you plan today". That is a number a manager can turn into money.</p><p>It also protects against a common failure: a model that looks impressive but only matches what a simple rule already does. When the gap is small, the honest recommendation is often to improve the rule, not to deploy a model that someone has to maintain.</p><figure><img src="/blog/start-with-a-baseline-figure.jpg" alt="Three bars comparing error rates: the current rule, a simple average and a trained model, with the model only slightly better than the average." loading="lazy" /><figcaption>If the trained model is only a little better than a simple average, the average may be the better product.</figcaption></figure><h2>Measure it the way it will be used</h2><h3>Testing it fairly</h3><p>A baseline is only fair if both it and the model are tested the same way. The test must look like real use, or the numbers will flatter the model.</p><ul><li>Hold out time, not random rows: train on January to September, test on October to December. The future is what the model will face.</li><li>Hold out whole customers or stores when the model will meet new ones.</li><li>Use the measure the business cares about: money lost on stock-outs, not just average error.</li><li>Look at the worst cases, not only the average. A forecast that is usually right but misses Eid completely is not usable.</li></ul><table><caption>Common problems, a sensible first baseline, and what a model has to add to be worth it.</caption><thead><tr><th>Problem</th><th>First baseline</th><th>What the model must add</th></tr></thead><tbody><tr><td>Weekly demand</td><td>Same week last year</td><td>Promotions, holidays, new items</td></tr><tr><td>Customer churn</td><td>No order in 60 days</td><td>Earlier warning, fewer false alarms</td></tr><tr><td>Fraud flags</td><td>Amount above a threshold</td><td>Catching small, unusual patterns</td></tr><tr><td>Lead scoring</td><td>Source of the lead</td><td>Ranking within each source</td></tr></tbody></table><h2>When the honest answer is "keep the rule"</h2><p>Sometimes the data simply does not hold enough signal, and no model beats the simple rule by a useful margin. That is a real result, not a failed project. It saves the business from maintaining a model that adds nothing, and it often points to the data that should be collected next.</p><blockquote><p>A model is a cost. It has to earn its place against the rule it replaces.</p></blockquote><h2>Frequently asked questions</h2><h3>What if we do not have an existing rule?</h3><p>Then we build the simplest sensible one together, usually in an afternoon, and measure it. It becomes the bar the model has to beat.</p><h3>How much better does a model need to be?</h3><p>Enough that the gain pays for building and maintaining it. For a forecast that drives ordering, a few points of error can be worth a lot; for a report nobody acts on, nothing is worth it.</p><h3>Can the baseline and the model run side by side?</h3><p>Yes, and that is how we prefer to launch. Both make predictions for a few weeks, and the team sees which one was closer before switching.</p><h3>What data do you need to measure a baseline?</h3><p>Usually the same history the model would learn from: past sales, past decisions, past outcomes. A year or two of records is enough for most forecasting and scoring problems.</p><aside><h3>The rule to remember</h3><p>Write down how the decision is made today, measure it, and only ship a model that clearly beats it on the data it will actually face.</p></aside>]]></content:encoded>
    </item>
    <item>
      <title>What a web application costs after launch</title>
      <link>https://twinstackstudio.com/blog/what-a-web-app-costs-after-launch</link>
      <guid isPermaLink="true">https://twinstackstudio.com/blog/what-a-web-app-costs-after-launch</guid>
      <pubDate>Tue, 04 Aug 2026 09:00:00 GMT</pubDate>
      <category>Web applications</category>
      <description>The build is the part everyone budgets for. Hosting, fixes, updates and the small changes users ask for in month three are the part that decides whether the app is still useful a year later.</description>
      <content:encoded><![CDATA[<p>Most quotes for a web application cover one thing: building it. That is reasonable, because the build is the biggest single cost. But an app is not a brochure. It holds data, people log in to it every day, and the business around it keeps changing. The money and attention it needs after launch is smaller each month, but it never stops.</p><p>None of this is a reason not to build. It is a reason to plan for the second year before signing for the first, so nobody is surprised when the first small change request arrives.</p><h2>The four costs that start on launch day</h2><ul><li>Hosting: the server or platform the app runs on, the database, file storage, backups and the domain. Small for most business apps, but it grows with users and stored files.</li><li>Third-party services: email delivery, SMS codes, maps, payment gateways, error tracking. Each is cheap on its own; together they are a line on the monthly bill.</li><li>Updates: frameworks, libraries and the operating system all release security fixes. Skipping them for a year turns a one-hour update into a week of work.</li><li>Change requests: the field that should have been a dropdown, the report the accounts team now wants, the new branch that needs its own login. This is usually the biggest of the four, and the most useful.</li></ul><h2>A rough way to budget</h2><p>Every app is different, so treat this as a rule of thumb rather than a price list. For a typical business application in steady use, plan a yearly running budget of roughly 15 to 25 percent of what the build cost. The lower end is an internal tool with a few dozen users and few changes; the upper end is a customer-facing app that the business keeps improving.</p><table><caption>Where the running budget usually goes for a business web app (rule of thumb, not a quote).</caption><thead><tr><th>Item</th><th>How often</th><th>What drives it up</th></tr></thead><tbody><tr><td>Hosting and database</td><td>Monthly</td><td>More users, more stored files, video, heavy reports</td></tr><tr><td>Third-party services</td><td>Monthly</td><td>SMS volume, maps usage, payment fees</td></tr><tr><td>Security and library updates</td><td>Monthly to quarterly</td><td>Old frameworks, many plugins, no automated tests</td></tr><tr><td>Small fixes and changes</td><td>As needed</td><td>New processes, new branches, new reports</td></tr><tr><td>Backups and restore tests</td><td>Monthly</td><td>Large databases, strict recovery needs</td></tr></tbody></table><figure><img src="/blog/what-a-web-app-costs-after-launch-figure.jpg" alt="A bar chart of a web application over two years: one tall bar for the build, then a row of small monthly bars for hosting, updates and changes." loading="lazy" /><figcaption>The build is one tall bar. Running the app is a long row of small ones.</figcaption></figure><h2>Decisions at build time that lower the bill later</h2><h3>Build-time choices</h3><p>Running costs are mostly decided before launch. A few choices make the difference between an app that is cheap to keep and one that needs a rescue project after eighteen months.</p><ul><li>Fewer moving parts: one well-chosen framework and one database beat five services that each need their own updates.</li><li>Automated tests on the parts that handle money, stock or permissions, so an update can be checked in minutes instead of by clicking through every screen.</li><li>Settings instead of code: tax rates, branch names, email text and price lists that staff can change themselves never become a change request.</li><li>Logs and error alerts from day one, so problems are found by the team before a customer reports them.</li><li>Written handover notes: how to deploy, where the backups are, which accounts own which services.</li></ul><blockquote><p>The cheapest change request is the one staff can make themselves from a settings page.</p></blockquote><h2>Questions to ask before you sign</h2><ul><li>Who owns the hosting accounts, the domain and the code once the project ends?</li><li>What happens if a security update breaks something six months after launch?</li><li>How long are fixes covered for free, and what does a change cost after that?</li><li>Can we see the backups being restored, not just being taken?</li></ul><h2>Frequently asked questions</h2><h3>Can we just host it ourselves to save money?</h3><p>Yes, if someone on your side is comfortable with servers, updates and backups. The hosting bill is rarely the expensive part; the time spent looking after it is.</p><h3>Is a no-code tool cheaper to run?</h3><p>Often, at the start. The trade-off comes later: per-user pricing grows with the team, and some processes simply do not fit the tool. It is a good choice for simple internal workflows.</p><h3>Do you offer support after launch?</h3><p>Yes. Every project includes a period of free fixes after launch, and after that we work either on a small monthly plan or per change, whichever suits how often the app changes.</p><h3>Will we need a redesign in a few years?</h3><p>Rarely a full one, if the app is kept current. Most apps change in small steps: a new report, a faster screen, a new branch. A rebuild is usually a sign the updates were skipped.</p><aside><h3>Budget it like this</h3><p>Budget for the second year before you sign for the first. A rough 15 to 25 percent of the build cost per year keeps a business app safe, current and useful.</p></aside>]]></content:encoded>
    </item>
  </channel>
</rss>
