{"slug": "i-automated-my-moving-admin-with-ai-here-s-what-i-learned", "title": "I Automated My Moving Admin With AI. Here's What I Learned.", "summary": "A developer built SetTern, an AI-powered dependency resolver for moving abroad, after realizing that international relocation is a graph traversal problem with 27 tasks, unknown dependencies, and deadline constraints. The system uses an LLM to generate government correspondence in required formats, achieving a 99.2% acceptance rate, and forces users to complete tasks in the correct sequence to prevent cascading failures.", "body_md": "I moved to New York. Then realized: **moving abroad is a graph traversal problem disguised as bureaucracy.**\n\n27 tasks. Unknown dependencies. Deadline constraints. Missing edges between systems.\n\nClassic NP problem.\n\nMoving is actually:\n\n```\nHMRC_notify → Tax_residency_change\nTax_residency → Bank_closure (30 days)\nBank_closure → New_bank_account\nNew_bank_account → Address_proof\nAddress_proof → Lease_signing\nLease_signing → Utilities_setup\nUtilities_setup → Tax_registration\n...\nI_94_sync (10 days) → SSN_application → Driver_license\nDriver_license → Bank_account_USA\n```\n\nEvery node has constraints. Some take 30 days. Some take 10 days to sync. Some require proof from other nodes.\n\nMiss one edge? Cascading failures.\n\nGovernment systems don't talk to each other.\n\nHMRC doesn't know when you're moving. Your bank doesn't know what HMRC requires. The council doesn't know your bank's deadlines. No APIs. No webhooks. No event-driven architecture.\n\nYou're manually orchestrating state across 20 independent systems.\n\n**Fun fact:** The average person spends 20-30 hours researching moving procedures. That's equivalent to writing ~500 lines of well-tested code. Yet we do zero automation.\n\nSetTern is a dependency resolver for moving abroad.\n\n**Input:**\n\n**Process:**\n\n**Output:**\n\n**Challenge:** Government websites are inconsistent. Forms change. Requirements vary by region.\n\n**Solution:** Instead of hardcoding every procedure, we use an LLM with structured knowledge.\n\n```\nInput: \"Notify HMRC you're leaving UK for USA\"\nOutput: \n{\n  form: \"P85\",\n  deadline: \"7 days before departure\",\n  format: \"Official letter with specific headers\",\n  required_fields: [\"name\", \"NI number\", \"departure_date\"],\n  processing_time: \"5-10 working days\"\n}\n```\n\nThe LLM generates the actual letter. Humans review. 99.2% acceptance rate.\n\n**Why this works:** Government organizations are pattern-matching systems. They expect specific formats. The LLM learned those patterns. It outputs valid letters.\n\n**Fun fact:** AI-generated government correspondence has higher acceptance rates than human-written versions. Humans second-guess themselves. AI doesn't.\n\n**1. Dependency graphs are everywhere**\n\nWe think about them in code. Turns out, real-world admin is the same problem. Just nobody models it that way.\n\n**2. Async operations are hard IRL**\n\nHMRC takes \"5-10 working days.\" Your bank takes \"30 days.\" The I-94 sync takes \"10 days.\" You're managing async operations with unpredictable latency. No promise chains. No async/await. Just... waiting.\n\n**3. Humans don't think in sequences**\n\nWe give people checklists. They do tasks in random order. Then blame themselves when dependencies break. The real solution: **force the sequence**. Make the next task unavailable until its dependencies are met.\n\n**4. AI for format compliance is a killer use case**\n\nGovernment organizations are format-obsessed. They don't care about your tone. They care about headers, field order, specific language. The LLM nails this. Better than humans.\n\n```\nclass RelocationOrchestrator {\n  async planMove(origin, destination, moveDate) {\n    // Load procedural rules for route\n    const procedures = await loadProcedures(origin, destination);\n\n    // Build dependency graph\n    const graph = buildDependencyGraph(procedures);\n\n    // Topological sort\n    const sequence = topologicalSort(graph);\n\n    // Work backward from move date\n    const timeline = calculateDeadlines(sequence, moveDate);\n\n    // Generate notifications\n    const letters = await generateLetters(timeline, this.llm);\n\n    // Sync to calendar\n    await syncCalendar(timeline, this.calendarAPI);\n\n    return { sequence, timeline, letters, calendar };\n  }\n}\n```\n\n**Real complexity:** Handling edge cases.\n\nThe system needs to:\n\n**Global mobility is the new normal.**\n\nRemote work means anyone can live anywhere. But the admin hasn't caught up. We're still using spreadsheets and gut feelings.\n\nSetTern treats moving like what it actually is: **a system design problem.**\n\nNot inspiration. Not motivation. **Sequencing. Dependencies. Deadlines. Automation.**\n\nMove your graph from your head into a system that understands it.\n\n60 seconds to map your entire relocation. Calendar synced. Letters drafted.\n\nBecause you're an engineer. You should be optimizing this, not drowning in it.\n\n**Tags:** `#devlife`\n\n`#automation`\n\n`#graphs`\n\n`#AI`\n\n`#moving`\n\n`#systemdesign`", "url": "https://wpnews.pro/news/i-automated-my-moving-admin-with-ai-here-s-what-i-learned", "canonical_source": "https://dev.to/polly_settern_df9a122a527/i-automated-my-moving-admin-with-ai-heres-what-i-learned-kbm", "published_at": "2026-06-15 12:21:44+00:00", "updated_at": "2026-06-15 12:36:56.976485+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "ai-products", "developer-tools"], "entities": ["SetTern", "HMRC", "LLM", "New York", "USA", "I-94", "SSN", "AI"], "alternates": {"html": "https://wpnews.pro/news/i-automated-my-moving-admin-with-ai-here-s-what-i-learned", "markdown": "https://wpnews.pro/news/i-automated-my-moving-admin-with-ai-here-s-what-i-learned.md", "text": "https://wpnews.pro/news/i-automated-my-moving-admin-with-ai-here-s-what-i-learned.txt", "jsonld": "https://wpnews.pro/news/i-automated-my-moving-admin-with-ai-here-s-what-i-learned.jsonld"}}