[{"data":1,"prerenderedAt":183},["ShallowReactive",2],{"blog-/blog/building-products-that-scale":3},{"id":4,"title":5,"body":6,"date":173,"description":174,"extension":175,"image":176,"meta":177,"navigation":178,"path":179,"seo":180,"stem":181,"__hash__":182},"blog/blog/building-products-that-scale.md","Building products that scale",{"type":7,"value":8,"toc":166},"minimark",[9,18,25,30,53,70,74,77,144,153,157,163],[10,11,12,13,17],"p",{},"When you're building something new, it helps to separate what ",[14,15,16],"em",{},"scales"," from what doesn't. Here’s a short take with concrete examples.",[10,19,20],{},[21,22],"img",{"alt":23,"src":24},"Team and whiteboard","https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=800&q=80",[26,27,29],"h2",{"id":28},"what-actually-scales","What actually scales",[31,32,33,41,47],"ul",{},[34,35,36,40],"li",{},[37,38,39],"strong",{},"Clear problem and audience"," – If you can’t say who it’s for and what pain it solves in one sentence, you’ll keep changing scope.",[34,42,43,46],{},[37,44,45],{},"Simple data model"," – Fancy schemas are tempting; start with the smallest model that supports the core flow.",[34,48,49,52],{},[37,50,51],{},"Automation over manual steps"," – Every manual step will break at 10x. Automate early where it matters.",[10,54,55,56,63,64,69],{},"For more on product thinking, ",[57,58,62],"a",{"href":59,"rel":60},"https://www.lennysnewsletter.com/",[61],"nofollow","Lenny’s Newsletter"," and ",[57,65,68],{"href":66,"rel":67},"https://www.reforge.com/",[61],"Reforge"," are good places to go deeper.",[26,71,73],{"id":72},"picking-the-stack","Picking the stack",[10,75,76],{},"Rough comparison I keep in mind when starting something new:",[78,79,80,96],"table",{},[81,82,83],"thead",{},[84,85,86,90,93],"tr",{},[87,88,89],"th",{},"Need",[87,91,92],{},"Prefer",[87,94,95],{},"Avoid (until you need it)",[97,98,99,111,122,133],"tbody",{},[84,100,101,105,108],{},[102,103,104],"td",{},"Backend",[102,106,107],{},"Supabase, Edge functions",[102,109,110],{},"Custom servers, k8s",[84,112,113,116,119],{},[102,114,115],{},"Frontend",[102,117,118],{},"Vue/React + Tailwind",[102,120,121],{},"Heavy design systems",[84,123,124,127,130],{},[102,125,126],{},"AI / search",[102,128,129],{},"GPT, embeddings, RAG",[102,131,132],{},"Custom models, fine-tuning",[84,134,135,138,141],{},[102,136,137],{},"Auth & payments",[102,139,140],{},"Built-in (Supabase, Stripe)",[102,142,143],{},"DIY auth, custom billing",[10,145,146,147,152],{},"Start with the “Prefer” column; move right only when you hit real limits. I used this kind of filter when choosing the stack for ",[57,148,151],{"href":149,"rel":150},"https://nabuai.me",[61],"NabuAI",".",[26,154,156],{"id":155},"one-rule","One rule",[158,159,160],"blockquote",{},[10,161,162],{},"Ship the smallest version that delivers the core value. Add scale and polish after people use it.",[10,164,165],{},"Two more posts on shipping and on NabuAI are coming next.",{"title":167,"searchDepth":168,"depth":168,"links":169},"",2,[170,171,172],{"id":28,"depth":168,"text":29},{"id":72,"depth":168,"text":73},{"id":155,"depth":168,"text":156},"2025-01-20","A few principles I've learned from shipping across AdTech, EdTech, and startups.","md",null,{},true,"/blog/building-products-that-scale",{"title":5,"description":174},"blog/building-products-that-scale","XbjsQbcdqJOHTYwido2jHJrSib6vfUBsxpE-LNZ4pTE",1775533848267]