Product decisions

How the systems were shaped.

Senior engineering thinking in public — context, decision, tradeoff. Not trend-chasing. Not fabricated case studies.

Why Cloudflare D1?

ContextSmall team, edge deployment for Kathmandu firms, low operations budget. Relational data with migrations — not a key-value dump.

DecisionUse D1 + Workers for NepalIPMS register, matters, and API state. Keep documents in R2; sessions and hot cache in KV.

TradeoffDifferent scaling model than managed Postgres. Single-writer realities require disciplined schema design and query habits.

Why exact matching ahead of fuzzy matching?

I originally believed fuzzy matching would improve trademark search. It did, until it quietly introduced ambiguity in production. That mistake completely changed how I think about search systems.

Context130K+ trademark dataset. Paralegals search during live client calls. A false conflict is worse than a missed fuzzy suggestion.

DecisionPrioritize normalized exact and FTS5 token accuracy. Add controlled normalization (case, spacing, common mark variants) before fuzzy expansion.

TradeoffLess “smart” flexibility in the UI. Higher trust when the desk has to act on the result.

Why this OCR pipeline architecture?

ContextDepartment of Industry bulletins vary by issue — layout shifts, bilingual text, irregular columns. Staff cannot trust unverified machine output in a matter file.

DecisionSeparate extraction from intelligence: store → OCR → classify → map → human review → merge. Confidence gates every field.

TradeoffMore components and latency than a single “AI upload” button. Far safer for legal records.

Why domain model over generic CRM?

ContextIP firms already organize work as company → file → matter → asset. Generic CRM shapes force practitioners to reorganize around the software.

DecisionMirror the desk in NepalIPMS. Deadlines, documents, and litigation attach to matters — not orphaned “deals.”

TradeoffHarder to pitch as a horizontal SaaS. Easier to earn daily use inside a specialized practice.

Why human-in-the-loop for AI features?

ContextLegal AI that auto-files or auto-merges creates silent liability. Experts need acceleration, not abdication.

DecisionRetrieval-first drafts and OCR suggestions always land in a review queue. No auto-write into client matters.

TradeoffSlower “wow” demos. Stronger production trust — and features that survive real desks.

Why edge-native over always-on servers?

ContextNo dedicated DevOps hire. Users in Nepal and abroad. Downtime during renewal season is a product failure, not an ops ticket.

DecisionCloudflare Workers + bindings for compute, data, and files. Deploy with the same person who designs the product.

TradeoffPlatform constraints (CPU time, SQLite shape) become design inputs. Operational simplicity becomes the win.

Engineering notes · Architecture · ← Portfolio