{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Batu Bora blog",
  "description": "Batu Bora's notes on software, systems, and shipping practical things.",
  "home_page_url": "https://batubora.com/",
  "feed_url": "https://batubora.com/blog.json",
  "items": [
    {
      "id": "https://batubora.com/blog/notes-on-shipping/",
      "url": "https://batubora.com/blog/notes-on-shipping/",
      "title": "notes on shipping small tools",
      "summary": "A short playbook for scoping and shipping quickly.",
      "content_text": "Shipping small tools is mostly about scope. Pick one real user problem and write the smallest possible path to a useful outcome.\n\nThe pattern I use is simple: scope, slice, ship, then tighten. The key is to avoid a pile of nice-to-have features before you have signal.\n\n## my quick checklist\n\n- Define one core action and make it fast.\n- Ship with strong defaults and guardrails.\n- Write a short release note to lock the intent.\n- Measure one thing that tells you if it worked.\n\nOnce the tool proves it helps someone, you can layer on polish without losing the original focus.",
      "date_published": "2024-10-01T00:00:00.000Z"
    },
    {
      "id": "https://batubora.com/blog/mcts-go/",
      "url": "https://batubora.com/blog/mcts-go/",
      "title": "monte carlo tree search for go",
      "summary": "What I learned while building a lightweight MCTS engine.",
      "content_text": "I built a lightweight Go engine using Monte Carlo Tree Search. The core loop is simple: selection, expansion, simulation, backpropagation.\n\nThe hard part is speed. Your engine only feels smart if the rollout loop is fast and steady under pressure.\n\n## what helped the most\n\n- Keep the board representation compact and cache friendly.\n- Use quick rollout policies over perfect play.\n- Cap branching early so the tree stays shallow.\n\nOnce the basics work, the fun begins: tune exploration, add priors, and test against real opponents.",
      "date_published": "2024-07-18T00:00:00.000Z"
    },
    {
      "id": "https://batubora.com/blog/security-mindset/",
      "url": "https://batubora.com/blog/security-mindset/",
      "title": "moving into security-minded dev",
      "summary": "Habits for threat modeling and safer defaults.",
      "content_text": "Security is a habit, not a feature. The fastest progress for me came from small, repeatable checks in daily work.\n\nInstead of huge audits, I focus on how defaults and data flows behave when something goes wrong.\n\n## habits that stuck\n\n- Start every feature with a quick threat model.\n- Prefer secure defaults even if they feel strict.\n- Log enough to debug without leaking secrets.\n- Write tests for the failure path, not just the happy path.\n\nIt is not perfect, but the mindset shift makes every release safer.",
      "date_published": "2024-05-03T00:00:00.000Z"
    }
  ]
}